¿Cómo puedo configurar mi Linux Box como un enrutador para reenviar paquetes IP?

25

Estoy haciendo un experimento de red sobre el reenvío de paquetes ip, pero no sé por qué funciona.

Tengo una máquina Linux con dos interfaces de red, eth0 y eth1, ambas con dirección IP estática (eth0: 192.168.100.1, eth1: 192.168.101.2).

Mi objetivo es simple, solo quiero reenviar paquetes ip desde eth1 con destino en la subred 192.168.100.0/24 a eth0, y reenviar paquetes ip desde eth0 con destino en la subred 192.168.101.0/24 a eth1.

Encendí el reenvío de ip con:

sysctl -w net.ipv4.ip_forward=1

mi tabla de enrutamiento es así:

# route -n
Kernel IP routing table
Destination     Gateway     Genmask        Flags Metric Ref   Use  Iface
192.168.100.0   0.0.0.0     255.255.255.0  U     0      0       0  eth0
192.168.101.0   0.0.0.0     255.255.255.0  U     0      0       0  eth1

Pero, cuando trato de hacer ping desde 192.168.100.25 a 192.168.101.47, no funciona.

Colmillo Yishu
fuente

Respuestas:

23

Debe agregar una regla de reenvío utilizando el iptablescomando, algo como esto:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT

consulte man iptablespara obtener más detalles, o busque en Internet artículos sobre procedimientos, por ejemplo, Cómo configurar un enrutador NAT en una computadora con Linux

Aquí está el COMO de enmascaramiento de IP de Linux que trata el tema en detalle.

También debe asegurarse de no tener otras reglas (por ejemplo, en la FORWARDcadena) que anulen la ACCEPTregla anterior . Si los hay, probablemente quieras eliminarlos.

Sergey
fuente
No sé por qué, pero todavía no funciona. He agregado ambos iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTy iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTa mis tablas. Y mi política INPUT, OUTPUT y FORWARD son todos ACCEPT.
Yishu Fang
Hay muchas cosas que se pueden configurar mal. Por ejemplo, la IP de su host debe especificarse como "IP de puerta de enlace" en los hosts de la red "interna", de modo que sepan que si una IP no está en el rango de su red "local", los paquetes deben enviarse a su máquina de puerta de enlace. Esto es similar a la configuración habitual donde router ADSL está registrada como puerta de entrada para los hosts en la LAN
Sergey
Cuando lo uso tracerouteen mi host, muestra que el paquete va al "enrutador" (192.168.100.1), pero no va más allá.
Yishu Fang
1
@UniMouS: Parece que me olvidé de lo de MASQUERADE: edité mi respuesta y agregué nuevos enlaces a los artículos.
Sergey
2

Debe agregar una ruta a 192.168.100.25 y 192.168.101.47.

Si su servidor de reenvío tiene IP 192.168.100.1 y 192.168.101.1, agregaría el cliente 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

y en el cliente 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Esto funciona con solo el reenvío habilitado, sin iptables).

V. Campos
fuente