Shorewall
如何根據使用 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
誰能指出我正確的方向?
您的第一條規則是正確的:
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
或者修改第一條規則的預設地址。
我希望它有幫助!