我的服务器有几个公共 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
谁能指出我正确的方向?
你的第一条规则是正确的:
所以问题一定出在别处。你可以看到用这个创建的底层 iptables 规则:
NATed 数据包仍然需要遍历 FORWARD 链并被接受。尝试添加以下规则以接受这些端口上的 VM 的流量:
作为对先前答案的补充评论,请确保放置规则的顺序。
例子:
假设您这样配置规则:
如果您想通过端口 80 访问 172.17.20.47,您将始终以 172.17.20.25 结束,因为目标地址默认为 0.0.0.0。
所以如果你想通过公共 IP 地址 200.xyz 到达 172.17.20.47,你应该修改规则的顺序:
或者修改第一条规则的默认地址。
我希望它有所帮助!