次のような状況でDNATのメカニズムを理解しようとすると混乱しています。
私の理解:
DNAT =宛先ネットワークアドレス変換(Destination Network Address Translation):着信パケットの宛先アドレスを宛先xに変換する機能。
DNAT修復経路の理解に問題がある。
例: IP アドレス x1 を持つコンピューター (A) が存在し、このコンピューター (宛先 y1) に到着するすべての接続/パケットが、IP アドレス z1 を持つ別のコンピューター (B) に再ルーティングされるようにします。
そのため、次のような新しいNATルールを追加しました。
iptables -t nat -A PREROUTING -s x1 -d y1 -j DNAT --to-destination z1.
マシンAでテスト:ping -I x1 y1
マシンAで実行すると、tcpdump -i eth6 icmp
z1の代わりにIP y1から応答を受け取りますか?それともサブネットマスクに基づくNATではありませんか?
監視中にtcpdump -i eth6 host z1
着信ピングやパケットはありません。誰かがこの状況と私の理解を明確にすることができますか?
また、パケットがローカルに変換されている場合は、このtcpdumpを作成できますか?
答え1
配信のため平らな要求するときは、次のようにICMPプロトコルを明示的に指定する必要があります。
iptables -t nat -I PREROUTING -d <ip y1> -p icmp -j DNAT --to-destination <ip z1>
ただし、PREROUTING
マシン自体では実行されません。操作するには、マシンAがpingするマシンBとユーザーの間にいる必要があります。
YOU(ip x1) <---internet---> (ip y1) Machine A(ip z0) <---NATed LAN---> (ip z1)Machine B
これは魅力のように動作します。
マイコンピュータ()でy1をpingするときに、IPアドレスy1()とz0()を使用して10.0.0.1
コンピュータAに表示される様子は次のとおりです。マシンB(z1)のIPアドレス:10.10.0.73
10.0.0.32
10.10.0.1
16:23:54.181828 IP 10.0.0.32 > 10.0.0.1: ICMP echo request, id 25492, seq 0, length 64
16:23:54.181860 IP 10.10.0.73 > 10.10.0.1: ICMP echo request, id 25492, seq 0, length 64
16:23:54.182788 IP 10.10.0.1 > 10.10.0.73: ICMP echo reply, id 25492, seq 0, length 64
16:23:54.182806 IP 10.0.0.1 > 10.0.0.32: ICMP echo reply, id 25492, seq 0, length 64
答え2
あなたの間違いは、それを意味するようにするために3つのシステムが必要であるということです。
A -----> B
と交換する必要があります
A -----> B -----> C
この場合、パケットは外部からシステムに転送されるため、PREROUTING
チェーンを開く必要があります。B
ただし、パケットが生成されたのと同じシステムで使用されている場合、そのパケットはローカルで生成されたパケットであるため、iptables
まったく通過しません。PREROUTING
両方のシステムを使用して、次のことができます。
A -----> B
と交換する必要があります
A -----> C
(C
テストDNATに応答が必要ない場合は存在する必要はありません。)
この場合、次の規則が必要です。
iptables -t nat -A OUTPUT -d y1 -j DNAT --to-destination z1
ただし、宛先アドレスを自分のアドレスに変更すると、パケットはeth6
まったく到着しません。あなたはそれを見る必要がありますtcpdump -i lo -n
。