ポートから入ってくるすべてのトラフィックを特定のIPにリダイレクトする

ポートから入ってくるすべてのトラフィックを特定のIPにリダイレクトする

ポートのドッカーコンテナ内でノードサーバーを実行している(コンテナIP)を介してアクセス8080できるようになりました。172.17.0.2:8080localhost:9099

localhost:9099このトラフィックをリダイレクトするためにiptablesを試してみましたが、172.17.0.2:8080すべての努力は無駄です。

これが私が使用するコマンドです。私が間違った部分を修正してください。よろしくお願いします。

sudo iptables -t nat -A PREROUTING -p tcp --dport 9099 -j DNAT --to-destination 172.17.0.2:8080

私は助けられましたこれ答えたけど役に立たなかった。

ベストアンサー1

試みにいくつかの問題があります。

  • 使用は、localhost接続がホストで開始され、他のホストからルーティングされないことを示します。したがって、最初はルーティングは含まれていないため、チェーンではOUTPUTなくチェーンが必要です。PREROUTING
  • 送信元IPは、127.0.0.1宛先が変更されると送信元IPも変更する必要があります。これには追加のPOSTROUTINGルールが必要です。-m conntrack --ctstate DNATオプションの一致は、最初の一致が最初に一致したことを確認しますが、OUTPUTこれは一種のなりすましの試みではありません。
  • 少なくともLinuxでは、127.0.0.0/8これはルーティングスタックで特別に処理され、POSTROUTINGルールが実行される前にパケットが破棄されます。特別な処理を排除し、ブロック「外部」ルーティングを許可するには、127.0.0.0/8リダイレクトが発生するインターフェイスにフラグが必要です。route_localnet1に設定してください。それ以外の場合、上記のいずれも十分ではありません。

質問でインターフェイスがわからないので、パスからインターフェイス名を検索して変数に入れます。必要に応じて調整してください。all擬似インターフェイスを使用して設定することもできます。バナー世界的な。

結局、これは(ルートまたは使用sudo)に帰結します。

iptables -t nat -A OUTPUT -p tcp --dport 9099 -j DNAT --to-destination 172.17.0.2:8080
iptables -t nat -A POSTROUTING -s 127.0.0.0/8 -d 172.17.0.2 -m conntrack --ctstate DNAT -j MASQUERADE
interface=$(ip -o route get 172.17.0.2 | grep -o 'dev [^ ][^ ]*'|sed 's/^dev //')
echo 1 > /proc/sys/net/ipv4/conf/$(interface)/route_localnet

つまり、127.0.0.0/8まだホストにローカルな非アドレスを試してみる必要があります。これは作業を簡素化し、追加の規則を必要としませんroute_localnet(時には必要ないかもしれません)POSTROUTING

おすすめ記事