Use NAT com iptables e uma bridge

1

Estou com dificuldades para configurar o NAT com o iptables no meu firewall.

Minha configuração de firewall é a seguinte:

  • é um firewall transparente de camada 2, entre meu gateway e o gateway do meu provedor
  • eu conectei duas interfaces como br0. As duas interfaces são eno0 no meu lado ISP e eno1 no lado da minha rede local
  • Eu configurei basicamente nenhuma regra de iptables exceto uma para NAT

Aqui estão minhas regras:

root@firewall:~# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
root@firewall:~# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 10.50.1.0/24 -j SNAT --to-source xxx.195.142.205
root@firewall:~# iptables -t mangle -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT

O problema é que, em suma, a tradução de endereços funciona para o tráfego de saída, mas não para as respostas. Veja um exemplo de teste:

  • Eu conectei um laptop com o IP 10.50.1.7 na minha LAN e usei para fazer ping 8.8.8.8
  • no firewall, com tcpdump -i eno1 , vejo solicitações ICMP de 10.50.1.7 a 8.8.8.8, mas sem respostas
  • no firewall, com tcpdump -i eno0 , vejo solicitações ICMP de xxx.195.142.205 a 8.8.8.8 e as respostas ICMP de 8.8.8.8 a xxx.195.142.205
  • Obviamente, no laptop, eu não recebo as respostas do ICMP

As respostas não são traduzidas de volta para o IP local. O que estou perdendo?

Obrigado pela sua ajuda!

(NB: ao remover a regra NAT e usar o IP público xxx.195.142.205 no laptop, tenho acesso total à internet)

    
por oxley 09.09.2017 / 01:45

1 resposta

1

Como sugerido por @dirkt, parece que conntrack não funciona bem com uma bridge. Portanto, as regras do iptables que não requerem parecem funcionar em uma ponte, mas não na NAT.

Problema resolvido assim que configurei meu firewall como um firewall de camada 3.

No caso de outros se interessarem: Pesquisei bastante na Web se era possível usar um firewall transparente de camada 2 com NAT, mas nunca recebi uma resposta direta.

site ebtables sugerimos que é possível:

bridge-nf code makes iptables see the bridged IP packets and enables transparent IP NAT.

Eu nunca descobri que comando ebtables faria isso funcionar.

    
por 11.09.2017 / 23:11