如果我正确理解您的意图,您希望您的网络服务器通常使用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的系统上实现.