加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 02:30:30 所属栏目:Linux 来源:网络整理
导读:在我的办公室网络上,我有两个互联网连接和一个运行网站的CentOS服务器(端口443上的HTTPS). 该网站应通过第一个互联网连接(ISP-1)的公共IP公开访问. 另一个互联网连接ISP-2是网络上的默认网关.两个互联网连接都有路由器(家用型),带有NAT,SPI防火墙等.ISP-2上
在我的办公室网络上,我有两个互联网连接和一个运行网站的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的系统上实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读