我有一个带有 1 个网络接口(eth0,公共 ip)和 eth0:0 别名的路由器,本地 ip 192.168.1.1。
我想将所有传入的 https (443) 流量重定向到另一台服务器。我尝试过
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
并且成功了。所有进入我公共 IP 的 SSL 端口的流量都被重定向到 192.168.1.2。
但主要问题是这样的;现在从我的本地局域网到互联网的所有 https 流量也被重定向到该本地 IP,例如。https://facebook.com和 192.168.1.2 答案。我应该如何修复我的配置才能使其正常工作?
答案1
只需根据目标地址进行过滤:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d $PUBLIC_IP -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
如果公有 IP 是动态的,则需要向 DHCP 客户端脚本添加钩子,以便在 IP 地址更改时更新此规则。您也可以使用 IP 集来更改要检查的 IP 地址,而无需更改规则。
另一个不太完美的解决方案是使用addrtype
模块。该模块检查路由表以确定地址具有哪种类型的路由条目。可以使用 LOCAL 类型来检查此 IP 是否是主机的。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m addrtype --dst-type LOCAL -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
请注意,此解决方案还会将连接重定向到192.168.1.1
您的主机所拥有的任何 IP 地址。您可以通过向规则127.0.0.1
添加简单匹配来排除目标地址。! -d 192.168.1.1