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.
A máquina Ubuntu está configurada para rotear o tráfego destinado a 10.0.40.0/24 via 10.0.40.1.
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-legacy
conjunto 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 eno1
para enp2s0f0
, apenas encaminhar de/para uma interface de ponte...
É sempre uma péssima ideia misturar iptables diferentes, você deve decidir se deseja usar iptables
ou 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