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
効果は非常に良いです。