iptables nat テーブルは PREROUTING で宛先 IP を変更しませんか?

iptables nat テーブルは PREROUTING で宛先 IP を変更しませんか?

さて、Ubuntu 14.04.2 の標準インストールでは、次のコマンドを実行します。

sudo bash -c 'echo 1 > "/proc/sys/net/ipv4/ip_forward"'
sudo iptables -t nat -A PREROUTING -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230
sudo tcpdump -i wlan0 icmp and icmp[icmptype]=icmp-echo -n

​ 次に192.168.100.1別の端末から ping を実行します。 しかし、tcpdump次のように表示されます:

01:46:37.536354 IP 10.196.100.76 > 192.168.100.1: ICMP echo request, id 6635, seq 1, length 64

しかし、NATテーブルをフラッシュして実行するとこのコマンドその代わり:

sudo iptables -t nat -A OUTPUT -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230

次に、tcpdumpこれを示します。

01:46:53.168639 IP 10.196.100.76 > 10.196.106.230: ICMP echo request, id 6638, seq 1, length 64

(ping は成功し、他のマシンから pong が返されます。)

から多数のチュートリアルオンラインでは、PREROUTING チェーンでも宛先 IP が変更されるはずですよね? それとも何か見落としているのでしょうか?

答え1

PREROUTING チェーンは、ローカル プロセスによって生成されたパケットでは評価されません。

最初のルールは、ネットワーク インターフェイスから入ってくるパケットに対して機能します (別のコンピューターから ping を試してください)。

次の図は、パケットのフローがどのように検査されるかを明確に示しているかもしれません。iptables でのパケットフィルタリング

ソース:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/セキュリティガイド/sect-セキュリティガイド-IPTables.html

関連情報