プログラムでパケットを変更するために、キュー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 を除くすべてのパケットに当てはまります。tcp
udp
返事またはTCP確認パケットは、
LAN デバイスのプライベート IP (eth1 の 192.168.xx) を使用してインターネットに出て、このプライベート ソース IP アドレスで反対側に到達します。
何かアイデアがあれば教えてください。ありがとうございます。