Comecei recentemente a jogar um pouco com iptables e roteamento e me deparei com o seguinte problema:
Eu tenho quatro servidores A, B, C, D com ip_forwarding habilitado e meu objetivo é simplesmente rotear as solicitações de eco icmp através da cadeia, mantendo o IP original. infelizmente, o encaminhamento não está funcionando corretamente.
(A = 192.168.0.1 = eth0) < --- > (B = 192.168.0.2 = eth0, 192.168.1.2 = eth1) < --- > (B = 192.168.1.3 = eth0, 192.168.2.3 = eth1) < --- > (D = 192.168.2.4 = eth0)
Além disso, tenho as seguintes rotas:
- A: 192.168.2.4 através de 192.168.0.2
- B: 192.168.2.4 através de 192.168.1.3
- C: -
- D: -
então minha intenção por trás desse exemplo de brinquedo era que as solicitações fossem roteadas pela cadeia de acordo com as rotas estáticas. Claro que eu sei que o ping não terá sucesso, porque o D & C não tem rotas para A. Mas minha intenção era simplesmente detectar o tráfego com o tcpdump.
Em geral, achei que os pacotes seriam simplesmente encaminhados pesquisando rotas na tabela de roteamento e depois enviados para o respectivo destino ou gateway. No entanto, sem usar o NAT, isso não parece funcionar. as solicitações icmp são recebidas por C em eth0, no entanto, C não as encaminha para D.
Claro que eu poderia usar algum masquerade / snat em B e (eu não testei isso), mas tenho certeza que D irá receber o pedido de B ("instead" of A).
Em geral, é possível executar o roteamento "multi-hop" sem usar o NAT?
Ou há apenas algumas regras FORWARD do iptables em falta que me permitiriam fazer isso?
Existe alguma possibilidade de depurar / procurar o que o iptables faz com os pacotes? Atualmente, eu só encontrei o alvo LOG, mas para ser honesto, criar todas as regras duas vezes é realmente irritante ..