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

答え2

これを行う最も簡単な方法はおよびをインストールするnetcatことですinetd(Debianのリソースにこれがありますopenbsd-inetd)。

行を追加/etc/inetd.conf:

127.0.0.1:1234 stream tcp nowait root /bin/nc nc ex.ter.nal.ip 1234

1234物理ポート番号とex.ter.nal.ip物理外部IPアドレスに置き換えます。 1分あたり128を超える接続が必要な場合は、.1000オプションにより高い数字を追加する必要があります。nowaitこれは、ランアウェイ接続がシステムを不必要にロードするのを防ぐためです。

-q 4 -w 10私の状況に役立ついくつかのオプションがありますが、ncあなたには必要ないかもしれません。

inetdファイルを修正して再ロードしてくださいinetd.conf

これはリレープロセスncで始まったものを使用し、inetd効果は非常に良いです。

関連情報