所以,情况就是这样。
我有双 ISP 链接当前处于活动状态,并且正在从我的网络路由流量,其 iptables 设置与负载平衡和 NAT-ing Linux 上的多个 ISP 连接中接受的答案非常相似
我有两行/etc/iproute2/rt_tables
看起来像:
...
10 COMCAST
20 CENTURYLINK
...
我使用正确的默认网关在每个表中设置路由,并设置如下规则:
ip rule add fwmark 1 table COMCAST prio 33000
ip rule add fwmark 2 table CENTURYLINK prio 33000
然后我设置了基于 iptables 的数据包标记和路由:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
CONNMARK all -- anywhere anywhere CONNMARK restore
ACCEPT all -- anywhere anywhere mark match ! 0x0
MARK all -- anywhere anywhere MARK set 0x1
MARK all -- anywhere anywhere statistic mode random probability 0.33300000010 MARK set 0x2
CONNMARK all -- anywhere anywhere CONNMARK save
问题是,如果我为任一 ISP 保留系统范围的默认路由(如ip route list
不带table
参数),似乎这会覆盖iptables
客户端计算机的路由 - 根据watch -n 1 ifconfig [interface]
. 如果我删除系统范围的默认路由,路由对我的所有客户端机器都非常有效,其中 33% 的数据包通过 CenturyLink 线路,其余的通过 Comcast 线路。这太棒了!
但是,没有默认路由会破坏路由器本身需要互联网连接的所有内容。例如,我无法apt-get update
在路由器上运行。那么,如何为系统设置一个不会覆盖iptables
路由设置的默认路由呢?我尝试根据 LARTC 站点的说明设置多路径路由,如下所示:
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop dev $IF2 weight 1
(我不得不对 LARTC 指南稍作修改,因为 CenturyLink 连接的默认路由没有网关 IP,只是dev ppp0
,它适用于该表的默认网关。)
但是多路径路由会破坏服务器上的所有内容以及它为其路由的客户端。帮助?