GNU/Linux como router: Reenvío de paquetes y NAT
Suponga de un modo no totalmente hipotético que necesita preparar un host con GNU/Linux para que haga de router en una red. Claro está que sobre este asunto hay mucho que decir, pero aquí se va a tratar un caso de lo más corriente que sucede en las clases prácticas.
La cuestión es que se debe proporcionar acceso a la red a una MV que se encuentra en una red privada a través de un host que conecta la red privada con la red del aula.
Por ejemplo:
En este caso se han preparado dos máquinas virtuales:
- La primera (MV1 Gateway) con dos interfaces de red:
enp0s3
en modo puente y conectada a la LAN del aula.enp0s8
en modo red interna.
- La segunda (MV Cliente) únicamente tiene una interfaz de red en modo red interna.
Resulta evidente que la segunda máquina virtual necesitará utilizar a la primera como puerta de enlace para acceder al exterior de su propia red interna.
Pues bien, para que MV1 Gateway actúe como puerta de enlace es necesario:
Activar el reenvío de paquetes.
En el núcleo Linux el fichero/proc/sys/net/ipv4/ip_forward
sirve para:
- Consultar el estado del reenvío de paquetes.
usuario@laika:~$ cat /proc/sys/net/ipv4/ip_forward 0 usuario@laika:~$
- Activar o desactivar el reenvío de paquetes.
root@laika:/home/usuario# echo 1 >/proc/sys/net/ipv4/ip_forward root@laika:/home/usuario# cat /proc/sys/net/ipv4/ip_forward 1 root@laika:/home/usuario#
Cuando el fichero contiene el valor 1
está activo el reenvío de paquetes y el host aceptará trabajar como gateway para otros equipos. Si se fija el valor de /proc/sys/net/ipv4/ip_forward
con el comando echo
, cuando se reinicie el equipo se volverá al estado por defecto.
Si se quiere hacer persistente el cambio entonces será necesario descomentar la siguiente línea del fichero /etc/sysctl.conf
:
#net.ipv4.ip_forward=1
Y utilizar el comando sysctl -p
para aplicar los cambios o reiniciar el equipo.
Activar el NAT en la interfaz enp0s3
Con el paso anterior se consigue que la MV1 retransmita el tráfico de la MV2. Pero en general la MV2 aún no tendrá una buena conexión al exterior y la cuestión es que, al utilizar una dirección de red privada, quien reciba sus paquetes no sabrá a quién debe contestar. Para solucionar este problema se necesita hacer NAT en la interfaz enp0s3
de MV1 Gateway.
Así cuando se retransmita tráfico a través de MV1 Gateway, en el momento de dejar los paquetes en su interfaz de salida (enp0s3
) se cambiará en el paquete la dirección de origen (inicialmente la de MV2 Cliente) para utilizar como dirección de origen la propia IP que tenga enp0s3
en MV1 Gateway. De este modo quien reciba el paquete sabrá a quien contestar y, MV1 Gateway, tratará la respuesta de la manera adecuada para que acabe llegando al origen del tráfico (MV2 Cliente).
La regla para activar un NAT de tipo MASQUERADE en la interfaz de red enp0s3
es:
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Más información: