iptables / bridge / configuração NAT

1

Entre nosso gateway e nossa LAN, temos um firewall de ponte executando o iptables. Eu quero adicionar uma placa de rede adicional no firewall e configurar uma sub-rede privada nele. O tráfego dessa sub-rede destinada a endereços externos será editado para NAT, originado do endereço IP configurado na ponte.

Eu quero que o firewall rotear pacotes entre nossa LAN e a sub-rede privada sem o NAT. Como posso dizer ao iptables que, se um pacote da LAN passa pela bridge e é destinado a um IP privado, ele deve enviar este pacote para fora da interface adicional sem ponte?

    
por Gaspode 13.01.2012 / 17:10

3 respostas

2

Nós fazemos algo bem parecido aqui. 3 sub-redes atrás de um "roteador" do CentOS5. Basicamente, apenas temos o iptables definido como a regra de tabela 'nat' a seguir:

iptables -t nat -A POSTROUTING -o <external NIC device> -j SNAT --to-source <external interface IP>

No nosso caso, o dispositivo é eth1 e o IP é 10.0.0.2 para diferenciar das sub-redes de Classe C IP4 que ainda estamos usando aqui.

O trabalho real é feito pela tabela de roteamento. Se suas NICs estiverem configuradas corretamente, as entradas da tabela de roteamento já deverão existir.

Por exemplo, temos essas duas sub-redes na tabela de roteamento:

192.168.16.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.13.0        0.0.0.0         255.255.255.0   U     0      0        0 eth2

Mas o tráfego externo é tratado pela linha do gateway padrão:

0.0.0.0         10.0.0.10       0.0.0.0         UG    0      0        0 eth1

E o tráfego que retorna através do NAT é rastreado pelo módulo netfilter no kernel e enviado ao IP de origem pela linha 'State RELATED, ESTABLISHED' na cadeia regular FORWARD no iptables:

 158M  168G ACCEPT     all  --  eth1   eth0    0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
  8M   11G ACCEPT     all  --  eth1   eth0    0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 

(Nota: Qualquer neckbeard quer corrigir erros, por favor, insira um comentário. Eu adoraria ouvir uma crítica.)

    
por 13.01.2012 / 18:19
1

Eu não acho que você estará usando o iptables para o roteamento, já que não é o que cuida do roteamento. O Iptables é para qualquer coisa relacionada à verificação ou alteração de pacotes IP; as tabelas de roteamento são um pouco "cegas" a esse respeito, elas apenas enviam coisas onde suas entradas lhes dizem.

O que eu tentaria fazer aqui é adicionar entradas de roteamento no firewall que avisam para usar a NIC adicional se a nova sub-rede por trás da nova NIC for endereçada; que deve cuidar de enviar coisas para e de lá. Então você pode querer adicionar algumas entradas no iptables para ter certeza de que apenas os pacotes originários da sua LAN são passados para a sua LAN ou qualquer política que você queira impor.

Em relação a não ter seu tráfego NAT de firewall que está apenas passando de uma parte da LAN para outra, você pode apenas usar a regra de NAT que @AdrianK deu e que você provavelmente já está usando:

iptables -t nat -A POSTROUTING -o < external NIC device > -j SNAT --to-source < external interface IP >

Se você não está usando um endereço IP estático para a interface "externa" do firewall, você pode mudar "SNAT" para "MASQUERADE" (mas provavelmente você está ciente disso, apenas por causa da integralidade).

    
por 17.01.2012 / 15:02
1

Eu duvido que alguém tenha o mesmo problema que eu, mas aqui está a melhor solução que encontrei (obviamente, remover a ponte seria melhor, mas não era possível)

Eu instalei o ebtables e usei este comando:

ebtables -t broute -A BROUTING -p IPv4 --in-if eth1 --ip-dst 10.0.0.0/8 -j redirect --redirect-target ACCEPT

.. isso impede que os pacotes correspondentes sejam vinculados e significa que eles são roteados.

A inspiração foi encontrada aqui :

    
por 17.01.2012 / 17:40