我有两台 Ubuntu 12.04 服务器。服务器 1 使用 IP 表充当防火墙并托管代理服务器。服务器 2 托管 Web 服务器。
我有一个终止于服务器 1 上的 eth1 的外部 IP 地址。IPtables 成功将端口 443 和 80 从 eth1 转发到服务器 2 上的 eth 0。Web 服务器可供外部访问。
我已获得另一个外部 IP 地址,该地址也将终止于 eth1:1 - 我已经设置网络以接受该地址。我想在第二个 IP 地址 (eth1:1) 上接受端口 443 和 80 上的流量,并使用另一个内部 IP 地址将该流量转发到另一台 Web 服务器。
我不确定如何配置 IPtables 将来自 IP 地址 2:443 或 80 的流量转发到另一个 Web 服务器。
内部 IP 地址包括:
服务器 1 - 192.168.1.123 服务器 2 - 192.168.1.120
我已经配置了 eth1 和 eth1:1,并且可以通过两个 IP 地址访问现有的 Web 服务器。
答案1
在这里找到答案:
使用虚拟接口时只需使用选项 -d(目标),忽略选项 -i(接口)
而不是:iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT --to-destination 172.16.2.1
使用:iptables -t nat -A PREROUTING -d 25.25.25.26 -j DNAT --to-destination
诀窍是在 PREROUTING 链中使用 -d 参数。因此,在本例中,我使用了 -d xxx.xx.xx.18,对于端口 443 - 将其定向到端口 4431。我设置了其他服务器的防火墙以接受 4431,并将 nginx 站点设置为在 4431 上接受 https。
-A PREROUTING -p tcp -m tcp -d xxx.xx.xx.17 --dport 80 -j DNAT --to-destination 191.168.1.120:80
-A PREROUTING -p tcp -m tcp -d xxx.xx.xx.17 --dport 443 -j DNAT --to-destination 191.168.1.120:443
-A PREROUTING -p tcp -m tcp -d xx.xx.xx.18 --dport 80 -j DNAT --to-destination 191.168.1.120:801
-A PREROUTING -p tcp -m tcp -d xxx.xx.xx.18 --dport 443 -j DNAT --to-destination 191.168.1.120:4431