如何根据使用 Shorewall 访问的公共 IP 将 DNAT 到不同的本地 IP?

如何根据使用 Shorewall 访问的公共 IP 将 DNAT 到不同的本地 IP?

我的服务器有几个公共 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

你的第一条规则是正确的:

DNAT    net loc:192.168.122.12  tcp 80,443,8080 -   232.21.23.23

所以问题肯定出在其他地方。你可以用以下命令查看创建的底层 iptables 规则:

iptables -t nat -nvL net_dnat

NAT 数据包仍需要穿过 FORWARD 链并被接受。尝试添加以下规则以接受这些端口上的虚拟机流量:

ACCEPT  net loc:192.168.122.12  tcp 80,443,8080

答案2

作为对前面答案的补充评论,请确保放置规则的顺序。

例子:

假设你这样配置了规则:

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

或者修改第一条规则的默认地址。

我希望它有帮助!

相关内容