libnetfilter を使用した Iptables の NAT 問題

libnetfilter を使用した Iptables の NAT 問題

プログラムによってパケットを変更するために、IP テーブルをネット フィルター キューと組み合わせて使用​​しています。

私は、インターネットへの eth0 と LAN への eth1 の 2 つの NIC を備えた Ubuntu ラボで iptables ルールを使用しています。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、tcp、udp) のパケットが変更され、キューに再挿入され、eth0 の IP アドレスを送信元アドレスとして取得して、eth0 からインターネットに送信されます (MASQUERADE NAT ルールを使用した効果)。これは、icmp ping 応答パケットまたは tcp ack パケットを除くすべてのパケットに当てはまります。これらのパケットは、LAN デバイスのプライベート IP (192.168.xx) を取得してインターネットに送信され、このプライベート送信元 IP アドレスで反対側に到達します。何かアイデアはありますか。ありがとうございます。

答え1

私は、インターネットへの eth0 と LAN への eth1 の 2 つの NIC を備えた Ubuntu ラボで iptables ルールを使用しています。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、tcp、udp) のパケットが変更され、キューに再挿入され、eth0 の IP アドレスを送信元アドレスとして取得して、eth0 からインターネットに送信されます (MASQUERADE NAT ルールを使用した効果)。これは、icmp ping 応答パケットまたは tcp ack パケットを除くすべてのパケットに当てはまります。これらのパケットは、LAN デバイスのプライベート IP (192.168.xx) を取得してインターネットに送信され、このプライベート送信元 IP アドレスで反対側に到達します。何かアイデアはありますか。ありがとうございます。

関連情報