Estou usando iptables
em conjunto com net-filter
queue para alterar os pacotes programaticamente.
Estou usando as regras de iptables
no ubuntu lab com 2 NICs eth0 para a internet e eth1 para a LAN Eu usei as conhecidas regras 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
Estas 4 regras são usadas para me ajudar a capturar pacotes dentro do meu programa e modificar pacotes ou descartar o que eu quero usando nfq_set_verdict
.
Na verdade, tudo está indo como estou esperando, ou seja, os três tipos de protocolo icmp
, tcp
e udp
pacotes são modificados e reinjetados. Na fila, em seguida, sai eth0 para a Internet, tendo o endereço IP eth0 como endereço de origem (efeito de usar a regra NAT de MASQUERADE).
Isso é válido para todos os pacotes, EXCEPTO: ICMP ping resposta ou pacotes TCP ACK .
Eles saem para a internet levando o ip privado do dispositivo lan - 192.168.x.x na eth1 e chega ao outro lado com esse endereço IP de origem privada.
Qualquer ideia. Thx.