Linuxサーバーで実行されているアプリケーションがあります。アプリケーションが localhost(127.0.0.1):localport にアクセスしようとすると、外部 IP に渡す必要があります。ユーザーは特定のポートのlocalhostにのみアクセスしようとします。これは自動的に転送されます。 iptables natテーブルを読み込んだが正しい場合は、ネットワークインタフェースにまったく触れないlocalhost自体からlocalhostのポートにアクセスするため、PREROUTINGとPOSTROUTINGは適用されません。出力テーブルが機能しているかどうか疑問に思いますが、いくつかの組み合わせを試しても機能しません。私は正しいものを使っているのでしょうか、それともこれが単に不可能なのでしょうか?
誰もが正しい方向に私を指すことができますか?
ベストアンサー1
私はこれを直接したいです。
これを達成するには、2つのルールとフラグを設定する必要があります。
ここで使用される例は、telnet localhost XXXX
パケットがに転送される必要があることですExt.er.nal.IP:YYYY
。
sysctl -w net.ipv4.conf.all.route_localnet=1
残念ながら、このフラグは最新のLinuxカーネルにのみ存在し、古いカーネルでは使用できません(以前のカーネルには代替フラグもありません)。利用可能なフラグが正確にどのコアなのかわかりません。カーネルバージョン3.XXで動作すると思います。
このフラグは、ループバックアドレスを正しいソースまたは宛先アドレスとして扱います。
源泉ip sysctl コマンドの場合。
iptables -t nat -A OUTPUT -p tcp --dport XXXX -j DNAT --to-destination Ext.er.nal.IP:YYYY
上記のコマンドは、localhost:XXXX
宛先IPのパケットを次に変更します。Ext.er.nal.IP:YYYY
iptables -t nat -A POSTROUTING -j MASQUERADE
このコマンドは、送信元IPをコンピュータのパブリックIPに変更します。
-s
とを使用して-d
適切な送信元 IP と宛先 IP とインターフェイスを追加すると、ルールを-i
より厳密にすることができます-o
。望むよりman iptables
。
John WH SmithとVotelに感謝します。アドバイスが非常に役立ちます。