linux – 根据服务将返回流量路由到正确的网关

在我的办公室网络上,我有两个互联网连接和一个运行网站的CentOS服务器(端口443上的HTTPS).
该网站应通过第一个互联网连接(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的系统上实现.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...