私のサーバーにはいくつかのパブリックIPがあり、プライベートIPアドレスを持つ多数の仮想マシンを実行しています。
例として、232.21.23.23(パブリック)のポート80、443、および8080を192.168.122.12(プライベート)にマップします。いくつかの異なるNATマッピングを試しましたが、どれも機能していないようです。
# This doesn't work.
DNAT net loc:192.168.122.12 tcp 80,443,8080 - 232.21.23.23
# Neither does this.
DNAT $FW loc:192.168.122.12 tcp 80,443,8080 - 232.21.23.23
# Nor this.
DNAT net:232.21.23.23 loc:192.168.122.12 tcp 80,443,8080
# I have no idea what I'm doing.
DNAT $FW:232.21.23.23 loc:192.168.122.12 tcp 80,443,8080
誰かが私を正しい方向に向けることができますか?
あなたの最初のルールは正しいです:
DNAT net loc:192.168.122.12 tcp 80,443,8080 - 232.21.23.23
したがって、問題は他の場所にあるに違いありません。これで作成された基本的なiptablesルールを確認できます。
iptables -t nat -nvL net_dnat
NATパケットは、引き続きFORWARDチェーンを通過して受け入れられる必要があります。次のルールを追加して、これらのポートのVMへのトラフィックを受け入れてみてください。
ACCEPT net loc:192.168.122.12 tcp 80,443,8080
前の回答への追加コメントとして、ルールを配置する順序を確認してください。
例:
次のようにルールを構成したとします。
DNATネットloc:172.17.20.25 tcp 80 0.0.0.0 DNATネットloc:172.17.20.47 tcp 80 200.x.y.z
ポート80で172.17.20.47に到達したい場合、宛先アドレスはデフォルトの0.0.0.0であるため、常に172.17.20.25になります。
したがって、パブリックIPアドレス200.x.y.zを介して172.17.20.47に到達する場合は、ルールの順序を変更する必要があります。
DNATネットloc:172.17.20.47 tcp 80 200.x.y.z DNATネットloc:172.17.20.25 tcp 80 0.0.0.0
または、最初のルールのデフォルトアドレスを変更します。
お役に立てば幸いです。