Enrutamiento entre dos tarjetas de red

Enrutamiento entre dos tarjetas de red

Estoy intentando enrutar el tráfico entre diferentes redes y he seguido una guía que encontré aquí: https://devconnected.com/how-to-add-route-on-linux/

Aquí hay un diagrama que espero que represente adecuadamente el arreglo con el que estoy trabajando:

Windows 10              Ubuntu                            Linux
172.31.0.X <----------> 172.31.0.33 (eno1)
                        10.0.40.1 (enp2s0f0) <----------> 10.0.40.10

Tengo una ruta persistente configurada en la PC con Windows para enrutar cualquier tráfico para 10.0.40.0/24 a través de 172.31.0.33.

Salida de impresión de ruta

La máquina Ubuntu está configurada para enrutar el tráfico destinado a 10.0.40.0/24 a través de 10.0.40.1.

salida ip r

Hacer ping a 10.0.40.10 desde la máquina Ubuntu funciona como se esperaba.

Si hago ping a 10.0.40.10 desde la PC con Windows, puedo ver que los mensajes ICMP llegan a la interfaz 172.31.0.33 en la máquina Ubuntu usando tcpdump. No veo ningún tráfico en la interfaz 10.0.40.1 de esa máquina. Parece que la máquina Ubuntu no está enrutando el tráfico como era de esperar. ¿Alguien puede arrojar alguna luz sobre lo que me he perdido?

Añadiendo salida de:

iptables -S

para máquina Ubuntu:

sudo iptables -S
# Warning: iptables-legacy tables present, use iptables-legacy to see them
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eno1 -j ACCEPT
-A FORWARD -i enp2s0f0 -j ACCEPT
adi@LabBuildServer:~$ sudo iptables-legacy -S
[sudo] password for adi:
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-e925d11be2da -m conntrack --ctstate RELATED,ESTABLISHED -j ACCE                         PT
-A FORWARD -o br-e925d11be2da -j DOCKER
-A FORWARD -i br-e925d11be2da ! -o br-e925d11be2da -j ACCEPT
-A FORWARD -i br-e925d11be2da -o br-e925d11be2da -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-e925d11be2da ! -o br-e925d11be2da -j DOCKER-IS                         OLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-e925d11be2da -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

Salida de:

ip route

en el host Linux:

ip route
default via 10.0.40.1 dev br-POE  proto static
10.0.40.0/24 dev br-POE  proto kernel  scope link  src 10.0.40.10

Máquina Ubuntu:

adi@LabBuildServer:~$ sudo iptables -t nat -L
[sudo] password for adi:
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
MASQUERADE  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Respuesta1

La solución está ahí:

-P FORWARD DROP

En su iptables-legacyconjunto de reglas, la política predeterminada para reenviar paquetes está establecida en DROP, y no hay ninguna regla en ese conjunto de reglas que permita reenviar paquetes desde eno1a enp2s0f0, solo reenviar desde/hacia una interfaz puente...

Siempre es una muy mala idea mezclar diferentes iptables; usted mismo debe decidir si quiere usar iptableso iptables-legacy- cada paquete de red pasará por ambos conjuntos de reglas, lo que causará mucha confusión.

actualizar:
Mi respuesta no debería significar que deba instalar la política predeterminada como aceptar, solo estaba señalando el motivo. Por supuesto, puede agregar reglas para permitir el reenvío de tráfico solo a estas IP específicas, por ejemplo así:

-A FORWARD -i eno1 -s 172.31.0.0/24 -o enp2s0f0 -d 10.0.40.0/24 -j ACCEPT
-A FORWARD -i enp2s0f0 -s 10.0.40.0/24 -o eno1 -d 172.31.0.0/24 -j ACCEPT

información relacionada