Iptables パケットの送信元 IP は、ICMP 応答および TCP ACK の場合に NAT されません。

Iptables パケットの送信元 IP は、ICMP 応答および TCP ACK の場合に NAT されません。

プログラムでパケットを変更するために、キューiptablesと組み合わせて使用​​しています。net-filter

iptables私は、インターネットへの eth0 と LAN への eth1 の 2 つの NIC を備えた Ubuntu ラボでルールを使用しています。eth0 でマスカレードを使用して NAT を行うために、よく知られている iptables ルールを使用しました。

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

これら 4 つのルールは、プログラム内でパケットをキャプチャし、 を使用してパケットを変更したり、必要なものをドロップしたりするのに役立ちますnfq_set_verdict

実際、すべてが予想どおりに進んでいます。つまり、3 つのプロトコル タイプがあり、icmpパケットが変更されて再挿入されます。キューでは、eth0 の IP アドレスを送信元アドレスとしてインターネットに出力します (MASQUERADE NAT ルールを使用した効果)。 これは、ICMP ping を除くすべてのパケットに当てはまります。tcpudp
返事またはTCP確認パケットは、
LAN デバイスのプライベート IP (eth1 の 192.168.xx) を使用してインターネットに出て、このプライベート ソース IP アドレスで反対側に到達します。

何かアイデアがあれば教えてください。ありがとうございます。

関連情報