sábado, 11 de febrero de 2012

IP Forwarding con Linux

El mecanismo de “IP forwarding” se encarga de la retransmisión de los paquetes que se reciben por una interfaz física y de retransmitirlos por otra interfaz hacia otro nodo.


Cuando un paquete IP se recibe por una interfaz física, el modulo IP de entrada (IPinput ) procesa el paquete. 
 
Si la dirección IP destino del paquete se corresponde con la del dispositivo se procesa el paquete y se pasa al modulo TCPinput.
 
En caso de que la dirección IP destino no se corresponda con la del dispositivo y
 
el módulo IP forwarding está desactivado, el paquete IP se descarta.
En el caso de que la dirección IP destino no se corresponda con la del dispositivo y el módulo IP forwarding esté activado, se pasa el paquete al módulo IP de salida (IPoutput ), se consulta la tabla de encaminamiento y el paquete se retransmite por la interfaz correspondiente.



Imaginemos el escenario de la imagen. Tenemos uno o varios ordenadores en nuestra red (da igual que sistema operativo sean) y queremos que compartan una IP de salida a internet (o a otra red cualquiera). Lo que haremos es decirles a los equipos locales que su router es la ip del equipo con Linux:

Equipo Linux:
tarjeta de red 1: 10.10.0.1
tarjeta de red 2: DHCP con nuestro proveedor de Internet

IP Local 1:
tarjeta de red 1: 10.10.0.2  (Con router apuntando a 10.10.0.1)

IP Local 2:
tarjeta de red 1: 10.10.0.3  (Con router apuntando a 10.10.0.1)

Al equipo Linux le vamos a decir que todos los paquetes que provengan de la red 10.10.0.x (que recibiremos por su tarjeta de red 1) nos los encamine a otra red, internet o la que sea, sacando los paquetes por su tarjeta de red 2. Para ello lo haremos de la siguiente manera:


Modificamos el valor booleano de /proc/sys/net/ipv4/ip_forward

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward


Descomentamos, modificamos o añadimos la siguiente linea en /etc/sysctl.conf

net.ipv4.ip_forward=1


Aplicamos los cambios con

sysctl -p


Y ahora enrutamos los paquetes segun nuestras redes:

iptables -F
iptables -F -t nat
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Para listar las normas introducidas (y comprobar que estan bien aplicadas);

iptables -L
iptables -L -t nat


Con esto ya queda funcionando nuestro Linux (Ubuntu,Fedora,Debian) en modo router.

No hay comentarios:

Publicar un comentario