トラフィックが到着したものとは異なるインターフェイスを離れるときにDNATを処理する適切な方法は何ですか?これが発生した場合、応答には、到着したのと同じインターフェイスから送信される場合のように、送信元アドレスが自動的に置き換えられていないようです。
編集-SNATが機能していません:
Chain PREROUTING (policy ACCEPT 386 packets, 23372 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT all -- * * 0.0.0.0/0 12.12.12.5 to:10.7.0.5
Chain POSTROUTING (policy ACCEPT 288 packets, 18672 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * eth0 10.7.0.5 0.0.0.0/0 to:12.12.12.5
0 0 SNAT all -- * eth3 10.7.0.5 0.0.0.0/0 to:12.12.12.5
8 550 MASQUERADE all -- * eth0 172.16.14.0/30 0.0.0.0/0
0 0 MASQUERADE all -- * eth0 10.7.0.0/24 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 23 packets, 1572 bytes)
pkts bytes target prot opt in out source destination
したがって、上記では、両方のルーターが同じテーブルと同じインターフェイスレイアウトを持っています。両方のルーターのeth0はインターネット接続であり、各ルーターのeth1は同じLAN(10.7.0/24)に接続します。 eth3は、2つのルーターを相互に接続します。
何が起こっているのかは、インターネット上の場所から12.12.12.5アドレスにpingを実行しています。応答は、eth0を介してルーターBに送信され、宛先NATが正常に機能している状態でeth1から送信されます。応答はルーターAでeth1に入り、ルーターAでeth0を介してインターネットを出ます。ただし、送信元アドレスは上書きされず、応答は10.7.0.5アドレス*でpingを送信するデバイスに戻ります。
*はい、実際にはプライベートソースIPを使用して20ホップを超えて到達し、どこにも押しつぶされることはありません-ちょっと驚くべきことです)。
さらに編集:
わかりました。どうやらSNAT(少なくともiptablesのマニュアルからはそうです)は、ステートフルである場合にのみ一致します。だから私はステートレスなnatが必要です。これはiproute2で実行できますが、 http://linux-ip.net/html/nat-dnat.html#ex-nat-dnat-full によると、-を使用してシミュレートすることもできます。 -iptablesのSNATを使用した宛先。しかし、私のubuntu10.04は不明なオプション--to-destination
.。
私の知る限り、あなたが説明しているアドレス書き換え動作は、発信応答パケットが着信要求をルーティング/ DNATしたのと同じルーターによってルーティングされている限り、発生します。ただし、高可用性ルータープール内の他のN + 1ルーターがアウトバウンド応答パケットを処理している場合、それらはNetfilter状態データベースでその接続を「認識」しません。
NATステートマシン情報 を共有する高可用性Netfilterルーター)が必要なようです。そのペーパーで言及されているct_syncツールはほとんど放棄されていますが、 conntrackd conntrack-toolsのツールは、ct_syncと同じことのいくつかを実行するために開発されました。
ステートフルパケットフィルタリング(または実際にはステートフルパケットフィルタリングのスーパーセットであるNAT)を実行することを計画している場合は、ステートデータベースを配布する方法が必要になります(または、ステートレスフィルタリングを使用することもできます。ネットワークを構築し、各ホストでステートフルフィルタリングを実行します)。
Webトラフィックでは、これがより一般的になっています。あなたが懸念している特定のシナリオはありますか? SNATにすべてのDNATが反映されているわけではありません。
私が気にするシナリオ..
私が理解していることから、経験則は、合理的に可能な場合はそれを避けることです。しかし、最新の実装と動的ルーティングにより、この視点はますます時代遅れになっていると思います。