「サーバーA」では、ポート1445でサービスを実行しています。「サーバーB」は、次のルールを介してポート445で「サーバーA」に接続できます。
iptables -t nat -A PREROUTING -d www.kunde.de -p tcp -m tcp --dport 445 -j REDIRECT --to-ports 1445
これは、「サーバーA」で開始された接続、つまりローカル接続では機能しません。私に何ができる?
iptables -t nat -A OUTPUT -d www.kunde.de -p tcp -m tcp --dport 445 -j REDIRECT --to-ports 1445
ローカルで発信されたパケットは、PREROUTINGではなくOUTPUTを通過するためです。
いくつかのマニュアルとドキュメントをよく読んでください。
とにかく簡単なチェーンの説明:
* “PREROUTING”: Packets will enter this chain before a routing decision is made.
* “INPUT”: Packet is going to be locally delivered. (N.B.: It does not have anything to do with processes having a socket open. Local delivery is controlled by the “local-delivery” routing table: `ip route show table local`.)
* “FORWARD”: All packets that have been routed and were not for local delivery will traverse this chain.
* “OUTPUT”: Packets sent from the machine itself will be visiting this chain.
* “POSTROUTING”: Routing decision has been made. Packets enter this chain just before handing them off to the hardware.
そしてここを見てください:
lxcまたはその他の仮想化テクノロジーを使用している場合は、すべてのトラフィックをポート445からコンテナーの1455にリダイレクトします。
サーバーAのローカルリクエストはPREROUTING
を渡しません。その理由は以前に取り上げられました。ローカルトラフィックはnat table
にアクセスしませんが、以前にDNATを使用した場合、サーバーAへの外部トラフィックに対してのみ機能します。REDIRECT
はポートフォワードに対してのみ機能し、DNAT