我有几个交换机具有相同的出厂设置静态地址,每个交换机都连接到具有两个接口的服务器,每个交换机连接一个服务器。服务器的主接口连接到本地家庭网络,其辅助接口连接到包含交换机地址的子网。我希望能够为每个交换机分配一个名称,将名称解析为关联服务器上的内部网络地址,并将每个服务器配置为透明地将发送到该地址的流量转发到交换机,并将流量从交换机转发回原始房屋网络地址。看起来 iptables NAT 应该能够做到这一点。所以我在 iptables 中有以下规则。
*nat
-A POSTROUTING -p all -s switch -j SNAT --to house
-A PREROUTING -p all -d house -j DNAT --to switch
其中“switch”是交换机的静态地址,“house”是我分配给交换机的家庭网络地址。 (两者都是按数字输入的。)当然,因为我在这里写,所以这是行不通的。
在启用 iptables 之前,我可以从服务器和家庭网络上的其他设备 ping “家庭”地址,并且可以从服务器 ping “交换机”地址。针对服务器上交换机的静态地址运行 nmap,我看到正确的交换机端口打开,针对家庭网络上另一台设备的“交换机”地址运行 nmap,我看到服务器上打开的端口。启用 iptables 后,尽管我不确定哪个设备正在响应,但 ping 仍然有响应。从服务器到“交换机”地址的 nmap 仍然显示服务器的端口,而不是交换机的端口。来自另一台设备的 nmap 报告所有端口都已被过滤。
为了可靠性,我不会更改交换机的静态地址。如果开关因任何原因重置,我希望事情能够继续工作。
我真正需要做的就是 ping 和端口 80 和 443。必须有更好的解决方案。
答案1
它最终形成了一个较长的评论链:)
因此,我的最后建议是添加一条规则:
iptables -t nat -A POSTROUTING -o $IFSW -j MASQUERADE
其中$IFSW
是每个服务器的交换机接口。
这样,交换机将接收来自其服务器的数据包,从而做出适当的响应,并且服务器将处理映射回响应数据包的原始地址。