localhost:portを外部IP:新しいポートに転送する

localhost:portを外部IP:新しいポートに転送する

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に感謝します。アドバイスが非常に役立ちます。

おすすめ記事