Shorewall

如何根據使用 Shorewall 訪問的公共 IP 對不同的本地 IP 進行 DNAT?

  • June 17, 2020

我的伺服器有幾個公共 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 網路地址:172.17.20.25 tcp 80 0.0.0.0
DNAT 網路地址:172.17.20.47 tcp 80 200.xyz

如果你想在埠 80 上訪問 172.17.20.47,你總是會在 172.17.20.25 結束,因為目標地址是預設的 0.0.0.0。

所以如果你想通過公共IP地址200.xyz到達172.17.20.47,你應該修改規則的順序:

DNAT 網路地址:172.17.20.47 tcp 80 200.xyz
DNAT 網路地址:172.17.20.25 tcp 80 0.0.0.0

或者修改第一條規則的預設地址。

我希望它有幫助!

引用自:https://serverfault.com/questions/403626