在我的办公室网络上,我有两个互联网连接和一个运行网站的CentOS服务器(端口443上的HTTPS).
该网站应通过第一个互联网连接(ISP-1)的公共IP公开访问.
另一个互联网连接ISP-2是网络上的默认网关.两个互联网连接都有路由器(家用型),带有NAT,SPI防火墙等.ISP-2上的路由器是Netgear WNDR3700(又名N600),带有原始固件.
该网站应通过第一个互联网连接(ISP-1)的公共IP公开访问.
另一个互联网连接ISP-2是网络上的默认网关.两个互联网连接都有路由器(家用型),带有NAT,SPI防火墙等.ISP-2上的路由器是Netgear WNDR3700(又名N600),带有原始固件.
问题是该网站无法访问.看起来ISP-1上的传入流量将到达服务器,但返回的流量通过ISP-2路由,从而有效地使站点无法访问.据我所知,我无法在WNDR3700上进行基于端口的路由.
我有什么选择让这项工作成功?我一直在寻找在服务器本身上实现基于iptables /路由的解决方案,但一直无法做到这一点.
更新:请注意,服务器有一个网络接口,将其连接到两个路由器.
解决方法
如果我正确理解您的意图,您希望您的网络服务器通常使用ISP-2作为传出流量的默认网关,但对外部Web请求的响应除外,这些请求必须通过ISP-1传输.以下是使用策略路由的解决方案草图:
echo "101 webtraffic" >> /etc/iproute2/rt_tables ip route add default table webtraffic via $ISP1_GW_LAN_IP ip rule add fwmark 1 table webtraffic iptables -t mangle -A OUTPUT -d \! $LAN_NET_PREFIX \ -p tcp -m tcp --sport 443 \ -j MARK --set-mark 1
哪里:
> LAN_NET_PREFIX是您的LAN的网络前缀(例如192.168.100.0/24),和
> ISP1_GW_LAN_IP是ISP-1网关的LAN IP地址(例如192.168.100.100).
第一个ip命令将webtraffic表上的默认路由设置为ISP-1网关,第二个ip命令确保使用webtraffic表路由标记为1的数据包.最后,iptables规则标记适当的传出数据包,确保它们的下一跳将转向ISP-1.
这是一个使用实验性iptables模块的替代解决方案,即ROUTE目标:
iptables -t mangle -A POSTROUTING -d \! $LAN_NET_PREFIX \ -p tcp -m tcp --sport 443 \ -j ROUTE --gw $ISP1_GW_LAN_IP
此规则将覆盖传出Web响应数据包的路由决策,将其发送到ISP-1网关,而不是默认的ISP-2.所有其他流量(包括对LAN上客户端的Web响应)都不会受到影响.正如评论中指出的那样,ROUTE目标很可能不会在任何未将其明确修补到内核since it is experimental的系统上实现.