web-dev-qa-db-ja.com

iptables nat tableはPREROUTINGで宛先IPを変更していませんか?

OK、Vanilla 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

次に、ping 192.168.100.1別の端末から。しかし、私は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は成功し、他のマシンからポンが戻ってきます。)

多数のチュートリアル オンラインから、PREROUTINGチェーンでも宛先IPが変更されると思いますよね?または私は何かが欠けていますか?

3
garyF

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

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

たぶん、この写真はパケットの流れがどのように調べられるかを明らかにすることができます: Packet filtering in iptables

ソース: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-IPTables.html

2
nrc