Roteamento entre duas placas de rede

Roteamento entre duas placas de rede

Estou tentando rotear o tráfego entre redes diferentes e segui um guia que encontrei aqui: https://devconnected.com/how-to-add-route-on-linux/

Aqui está um diagrama que espero que represente adequadamente o arranjo com o qual estou trabalhando:

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

Eu tenho uma rota persistente definida no PC com Windows para rotear qualquer tráfego para 10.0.40.0/24 via 172.31.0.33.

Saída de impressão de rota

A máquina Ubuntu está configurada para rotear o tráfego destinado a 10.0.40.0/24 via 10.0.40.1.

saída ipr

O ping 10.0.40.10 da máquina Ubuntu funciona conforme o esperado.

Se eu executar ping em 10.0.40.10 no PC com Windows, posso ver as mensagens ICMP chegando à interface 172.31.0.33 na máquina Ubuntu usando tcpdump. Não vejo nenhum tráfego na interface 10.0.40.1 dessa máquina. Parece que a máquina Ubuntu não está roteando o tráfego como eu esperava. Alguém pode lançar alguma luz sobre o que perdi?

Adicionando saída 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

Saída de:

ip route

no 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

Responder1

A solução está aí:

-P FORWARD DROP

No seu iptables-legacyconjunto de regras, a política padrão para encaminhamento de pacotes é definida como DROP, e não há regra nesse conjunto de regras que permita encaminhar pacotes de eno1para enp2s0f0, apenas encaminhar de/para uma interface de ponte...

É sempre uma péssima ideia misturar iptables diferentes, você deve decidir se deseja usar iptablesou iptables-legacy- cada pacote de rede passará por ambos os conjuntos de regras, causando muita confusão.

atualizar:
Minha resposta não deveria significar que você precisa instalar a política padrão como aceita, eu estava apenas apontando o motivo. É claro que você pode adicionar regras para permitir o encaminhamento de tráfego apenas para esses IPs específicos, por exemplo:

-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

informação relacionada