元の回答を削除しました。それが正しいと確信が持てなかったからです。その後、問題のネットワークをシミュレートするために、VMの小さな仮想ネットワークをセットアップする時間がありました。ここに私のために働いたファイアウォールルールのセットがあります(iptables-save形式natのみ、表のみ):
-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE
最初のPOSTROUTINGルールは、インターネット接続をLANと共有する簡単な方法です。完全を期すためにそこに置いた。
PREROUTING規則第二POSTROUTINGのルールは一緒に外部IPアドレスを介してサーバへの接続に関係なく、接続が外部からまたはLAN内から発信するかどうかの、起こることができるように、適切なNATのを確立します。LAN上のクライアントが外部IPアドレスを介してサーバーに接続すると、サーバーはルーターの内部IPアドレス(192.168.2.1)からの接続と見なします。
興味深いことに、2番目のPOSTROUTINGルールにはいくつかのバリエーションがあり、それらも機能することがわかりました。ターゲットがに変更された-j SNAT --to-source 192.168.2.1場合、効果は(驚くことではないが)と同じMASQUERADEです。サーバーは、ローカルLANクライアントからの接続をルーターの内部 IPアドレスから発信されたものと見なします。一方、ターゲットがに変更された-j SNAT --to-source 89.179.245.232場合、NATは引き続き機能しますが、今回はサーバーはローカルLANクライアントからの接続をルーターの外部 IPアドレス(89.179.245.232)から発信されたものと見なします。
最後に、元のPREROUTING/ DNATルールは-i ppp0機能しないことに注意してください。ルールはLANクライアントからのパケットとは決して一致しないためです(これらはppp0インターフェース経由でルーターに入らないため)。PREROUTING内部LANクライアント専用の2番目のルールを追加することで機能させることができますが、それはエレガントではなく(IMO)、外部IPアドレスを明示的に参照する必要があります。
今、「ヘアピンNAT」(または「NATループバック」、「NATリフレクション」、またはそれを呼び出すことを好むもの)ソリューションを完全に詳細にレイアウトした後でも、スプリットホライズンDNSソリューションはまだ信じています。 -外部IPに解決する外部クライアントと内部IPに解決する内部クライアントで---より適切なルートを選択します。どうして?なぜなら、NATの仕組みを理解するよりもDNSの仕組みを理解する人の方が多く、優れたシステムを構築する上で重要なのは、保守可能な部品を使用することです。DNSの設定は、難解なNATの設定(もちろん、IMO)よりも理解される可能性が高いため、正しく維持される可能性が高くなります。