Linux: NAT de lan para uma ponte resulta em nat incorreto entre componentes de ponte. Como consertar?

1

Considere uma máquina com 3 placas de rede. Duas pontes estão ativas; da eth1 para uma vlan na eth0 e da eth3 para outra vlan na eth0.

Interfaces:

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto eth0.4
allow-hotplug eth0.4
iface eth0.4 inet manual
     vlan-raw-device eth0

auto eth0.100
allow-hotplug eth0.100
iface eth0.100 inet manual
     vlan-raw-device eth0

auto eth1
allow-hotplug eth1
iface eth1 inet manual

auto eth3
allow-hotplug eth3
iface eth3 inet manual

auto bri4
iface bri4 inet static
     bridge_ports eth0.4 eth1
     address 192.168.4.1
     network 192.168.4.0
     netmask 255.255.255.0

auto bri100
iface bri100 inet static
     bridge_ports eth0.100 eth3
     address 192.168.100.4
     network 192.168.100.0
     netmask 255.255.255.0
     gateway 192.168.100.3
     dns-nameservers 192.168.100.3

Tudo isso funciona 100%. Agora desejo ao NAT todo o tráfego da rede no bri4 para o bri100. (Porque é onde estão os gateways).

Eu faço isso por:

iptables -t nat -A POSTROUTING -o bri100 -j MASQUERADE

Isso também funciona 100% para o tráfego bri4, MAS o NAT começa a acontecer no tráfego que está sendo vinculado de eth3 para eth0.100 (ou seja, os dois componentes bri100). Isso é completamente indesejável e está causando caos em meus servidores VoIP. Claramente, o iptables está interpretando o -o bri100 para TAMBÉM incluir o tráfego em ponte dentro dos membros do bri100.

Como eu faço o disfarce APENAS do bri4 para o bri100 e não entre os componentes do bri100? Não há opção -i disponível em POSTROUTING.

    
por Michael 07.01.2016 / 08:45

2 respostas

2

Em POSTROUTING você pode usar -s para corresponder ao intervalo de endereços IP que você usa interna ou externamente para decidir se deseja executar SNAT / MASQUERADE . Isso é útil se sua LAN tiver uma mistura de hosts com endereços IP públicos e hosts com apenas endereços particulares.

No seu caso específico, não faz muito sentido, pois parece que ambos os intervalos são privados. Se o tráfego estiver saindo da sua rede, o NAT será necessário para ambos os intervalos. Se não sair da sua rede, então NAT não é necessário.

    
por 07.01.2016 / 09:19
0

Por padrão, o linux passa tráfego de ponte através do iptables (ou ip6tables para o tráfego ipv6). Há casos válidos para isso, mas na maioria das vezes é mais um PITA do que uma ajuda.

Você pode desativar esse recurso através de sysctls

sysctl -w net.bridge.bridge-nf-chamada-iptables = 0 sysctl -w net.bridge.bridge-nf-chamada-ip6tables = 0

    
por 06.08.2016 / 04:17