Funcionamento interno de regras em cadeia de encaminhamento para NAT

1

Estou tentando entender exatamente como o NAT funciona para resolver outro problema maior, aqui está minha configuração de caixa de linux:

Interface eth0 conectada à internet (endereço IP público)

O eth1 está conectado à rede local e atua como gateway (possui o IP 192.168.1.1) para todos os nós internos que fornecem acesso à Internet.

Seguem as regras de iptable:

1)$iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
2)$iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
3)$iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Agora eu gostaria de entender exatamente o que as regras 1,2 e 3 fazem?

Agora, veja este exemplo:

O PC1 com endereço IP 192.168.1.5 e o endereço MAC MAC1 precisam acessar url www.google.com, ele constrói o pacote assim

O endereço mac do gateway é MAC2

source MAC | destination MAC | source ip | destination ip| payload
   MAC1           MAC2        192.168.1.5   <google ip>     <data>

Agora o gateway (192.168.1.1) recebe este pacote na interface eth1 e altera o ip de origem para o endereço ip da interface eth0 e atualiza alguma tabela com uma entrada para fazer uma pesquisa inversa quando a resposta é recebida.Quais são as regras responsáveis por esta operação regra1 / regra 2?

E quando a resposta é recebida na eth0, ela altera o ip de destino procurando pela entrada da tabela e descarta o pacote na eth1. o que exatamente a regra 3 faz aqui?

Digamos que um aplicativo no gateway precise acessar a Internet e criar pacotes e envios sobre a eth0, quando a resposta é recebida como o pacote é roteado para o aplicativo no gateway em vez de transmitir o pacote pela interface eth1 de acordo com a regra1?

Atualizar

Ao enviar uma regra de pacote3 altera o ip de origem e é chamado NAT soruce, assim quando um pacote de resposta é recebido em eth0, o endereço de destino é alterado, não é NAT de destino? porque não é uma regra para isso?

Suponha que exista outra interface eth2 que também esteja conectada à internet com um ip público e que exista uma rota padrão na tabela de roteamento para rotear o tráfego através deste dispositivo:

$ip route add default via <IP> dev eth2 scope link

As regras de encadeamento iptables da tabela de filtros dizem para sair dos pacotes pela eth0, mas a tabela de roteamento tem a rota padrão através da eth2, neste caso, qual interface é usada para internet?

É possível encaminhar o tráfego que é encaminhado de eth1 (local n / w) para eth0 e o tráfego de dados de aplicativo que se originam no gateway através da interface eth2?

Obrigado!

    
por Suresh 10.03.2011 / 13:08

1 resposta

4

Eu reorganizo e refino as suas regras:

$iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Esta regra permite que o firewall ENCAMINHE (ou seja, atue como roteador) para todos os pacotes que entram eth1 (local) e roteados para sair via eth0 (Internet)

$iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Esta regra executa o Source NAT: Ele substitui o endereço de origem dos pacotes de saída de 192.168.1.xxx para o seu endereço IP público, enquanto ao mesmo tempo registra o detalhes do NAT na tabela conntrack (rastreamento de conexão) do roteador.

Como os detalhes do NAT são registrados, os pacotes de resposta da Internet serão verificados nessa tabela. Se a resposta corresponder a uma entrada conntrack, o pacote experimentará um 'NAT inverso' (meu termo), ou seja, substituindo o endereço de destino (lembre-se, é uma resposta!) Com o endereço do remetente original ( 192.168.1.xxx)

$iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

Esta regra permite que os pacotes que são respostas ao pacote de saída (por exemplo, o SNAT-ed acima) sejam roteados para a rede local.

Now gateway(192.168.1.1) receives this packet on interface eth1 and alters the source ip to ip address of interface eth0 and updates some table with a entry to reverse lookup when the response is received.Which rules is responsible for this operation rule1/rule 2?

É uma combinação das Regras 2 & 3 (no seu post original)

Say an application on gateway needs to access internet and creates packet and sends over eth0, when the response is received how the packet is routed to application on the gateway instead of transmitting the packet over interface eth1 according to rule1?

Se o próprio gateway enviar um pacote de saída, o pacote não corresponderá a nenhuma entrada da tabela conntrack e, portanto, não será 'inverso' NAT-ed '.

When sending a packet rule3 alters the source ip and it is called soruce NAT, simlarly when a reply packet is received on eth0, destination address changed, is it not destination NAT? why isn't a rule for that.?

Tecnicamente , é um DNAT. Mas o netfilter (isto é, a estrutura de filtragem de pacotes / manuseio que é o 'mecanismo' do iptables) é inteligente o suficiente. Sempre que um pacote de entrada é recebido, ele é combinado com a tabela conntrack do netfilter. Se o pacote é uma resposta a uma conexão de saída existente (sinalizador ACK, IP: porta correspondente, número de sequência TCP correspondente, etc), o netfilter automaticamente executa o DNAT. Não há necessidade de regras adicionais.

Suppose say there is another interface eth2 which is also connected to internet with a public ip and a default route exists in the routing table to route the traffic through this device :

$ip route add default via <IP> dev eth2 scope link

iptables forward chain rules of filter table say to exit the packets over eth0 but the routing table has default route through eth2, in this case which interface is used for internet?

iptables não executa o roteamento; ele age contra pacotes após eles são roteados pelo iproute2 (isto é, a estrutura de roteamento do Linux). É por isso que a cadeia da regra é chamada de "POSTROUTING".

Se o cenário é como você explicou, o iproute2 fará com que o kernel Linux envie os pacotes via eth2. Nesse caso, a regra original -t nat -A POSTROUTING -o eth0 -j MASQUERADE não corresponderá mais e MASQUERADE / SNAT não será mais executada.

Is it possible to route the traffic that is forwarded from eth1(local n/w) to eth0 and the application data traffic that originate on gateway over interface eth2?

Sim, mas você precisa da ajuda de iproute2 .

Primeiro, você deve criar duas novas tabelas de roteamento. Vamos chamá-los de 100 e 102:

ip route add default via $DG_eth0 dev eth1 table 100
ip route add default via $DG_eth2 dev eth2 table 102

Em seguida, você cria políticas de roteamento:

# Rule #10: All packets must refer to the 'main' table
ip rule add order 10 from all  lookup main
# Rule #20: Packets entering eth1 must refer to the '100' table
ip rule add order 20 iif  eth1 lookup 100
# Rule #30: Packets from this gateway must refer to the '102' table
ip rule add order 30 iif  lo   lookup 102

Finalmente, você exclui a rota padrão na tabela main:

ip route delete default table main

A tabela main é importante porque contém uma lista de todas as sub-redes em torno do seu gateway; é por isso que ainda deve ser mencionado na Regra 10.

Espero que eu seja claro o suficiente. Sinta-se à vontade para me fazer mais perguntas sobre o iptables.

    
por 10.03.2011 / 14:10