Estou usando iptables
em conjunto com net-filter
queue para alterar pacotes programaticamente.
Estou usando iptables
regras no laboratório do Ubuntu com 2 NICs eth0 para a internet e eth1 para a LAN. Usei as conhecidas regras de iptables para NAT com mascaramento em eth0.
sudo iptables --table nat --append POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -append FORWARD -i eth1 -j ACCEPT.
sudo iptables -t mangle -A PREROUTING -j NFQUEUE --queue-num 0
sudo iptables -t mangle -A OUTPUT -j NFQUEUE
Essas 4 regras são usadas para me ajudar a capturar pacotes dentro do meu programa e modificar pacotes ou descartar o que eu quero usar nfq_set_verdict
.
Na verdade tudo está indo como eu esperava, ou seja, os três tipos de protocolo icmp
, tcp
e udp
os pacotes são modificados e reinjetados. Na fila, a eth0 sai para a internet tomando o endereço IP da eth0 como endereço de origem (efeito do uso da regra MASQUERADE NAT).
Isso é verdade para todos os pacotes, EXCETO: ping ICMPresponderou TCPCONFIRMARpacotes.
Eles saem para a internet pegando o ip privado do dispositivo lan - 192.168.xx na eth1 e chegam ao outro lado com esse endereço IP de origem privada.
Alguma ideia. THX.