iptablesはlocalhostにリダイレクトしますか?


13

ネットワーク内からインターネットへのすべての接続をルーティングするサーバーを備えたネットワークがあるとします。インターネットへの着信接続をルーティングする代わりに、ローカルホストポート8080にルーティングするようにiptablesを設定するにはどうすればよいですか。すべての助けを歓迎します。


問題は、単純なリダイレクト(宛先IPアドレスNAT)では、元の宛先IPアドレスが失われることです。透過的なHTTPプロキシをセットアップしますか、それともHTTP以外のプロトコルも処理する必要がありますか?
パブーク

透明かどうかは関係ありません
-DankMemes

すべてのトラフィックをプロキシにリダイレクトすること、透過プロキシの基本です:)
pabouk

:ここでは本当に私を助けた別の答えだ unix.stackexchange.com/questions/111433/...
レンT.

回答:


6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080

1
太字を使用しないでください

ありがとう!私はまだこれを試していませんが、私が行方不明になっているのはip forwardingコマンドだと思います。そして次回は、太字ではなくコードブロックを使用してください。
DankMemes

@AlexAntonovはコードブロックを使用してください。編集モードでテキストを選択し、角かっこアイコンをクリックします。
DankMemes

@ZoveGames、申し訳ありませんが、修正しました。
アレックスアントノフ

2
私はこれを試しました。ip_forward sysctlは必要ありません。ただし、ここのroute_localnetオプションはそうです。私は今、これがまさにファン・セスペデスの答えが述べていることだと思います。
マットジョイナー

31

これはで実行できますがiptables、3.6以上のカーネルでのみ可能です。

あなたがする必要があります:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardパケットは転送されないため必要ありませんが、sysctlを含めない場合route_localnet(3.6以上のカーネルでのみ機能します)、パケットは「マーティアン」と見なされるため、カーネルによってドロップされます。外部から、127.0.0.1の宛先アドレスを持つ


うん、それは動作します
ニックデギリシャ

route_localnetについて知りませんでした。そのため、古い学校で、ip_forwardが機能しなかった理由を理解できませんでした(必要ではないと思われたが、とにかく試しました)。
-dmourati

1
必ず保存net.ipv4.conf.all.route_localnet=1してください。/etc/sysctl.confそうしないと、永続的でなくなり、リブート後に変数が0に戻り、パケットがドロップされます。それから、なぜ今すべてが機能していないのかを理解するのは非常に難しいでしょう...私に起こりました。;)
すなわち

古い質問をネクロ申し訳ありませんが、IPv6の相当するものがnet.ipv4.conf.all.route_localnetで使用するためにはip6tables
ケビアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.