web-dev-qa-db-ja.com

ShorewallでアクセスされたパブリックIPに基づいて異なるローカルIPにDNATする方法は?

私のサーバーにはいくつかのパブリック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

誰かが私を正しい方向に向けることができますか?

1
mikl

あなたの最初のルールは正しいです:

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
2
mgorven

前の回答への追加コメントとして、ルールを配置する順序を確認してください。

例:

次のようにルールを構成したとします。

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

または、最初のルールのデフォルトアドレスを変更します。

お役に立てば幸いです。

1
Jorge Salinas