如何在具有双ISP链路的Linux路由器上设置默认路由?

所以,这是情况。

我有双ISP链接当前活跃和工作路由来自我的networking的stream量,一个非常类似的iptables设置到接受的答案在负载平衡和NAT在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 

问题是,如果我离开系统范围内的默认路由(如ip route list中没有table参数)的任何ISP的地方,似乎这覆盖了客户机的iptables路由 – 没有数据包超过非默认连接, watch -n 1 ifconfig [interface] 。 如果我删除系统范围内的默认路由,那么对于我的所有客户端计算机来说,路由工作的效果很好,33%的数据包通过CenturyLink线路传输,其余的则通过Comcast线路传输。 这太棒了!

但是,没有默认路由会破坏路由器本身需要互联网连接的所有内容。 例如,我不能在路由器上运行apt-get update 。 那么,我该如何为系统设置一个默认路由,而不会覆盖iptables路由设置呢? 我试图根据LARTC网站的指示设置多path路由,如下所示:

 ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop dev $IF2 weight 1 

(我必须从LARTC指南稍作修改,因为CenturyLink连接的默认路由没有网关IP,只是dev ppp0 ,它适用于该表的默认网关。)

但是,多path路由会破坏服务器上的所有内容以及路由的客户端。 帮帮我?

我能够自己解决这个问题。

解决scheme,以防其他人遇到类似的情况,是改变fwmark的ip rule条目的优先级。 我没有仔细阅读lbt对相关问题的回答 。 他特别指出,将优先级设置为33000将使这些规则发生 default表查找之后,这与我想要的相反。 所以,我改变了规则,看起来像这样:

 100: from all fwmark 0x1 lookup COMCAST 100: from all fwmark 0x2 lookup CENTURYLINK 

而现在,拥有默认路由并不会破坏基于防火墙的路由,而且我可以运行apt-get和我所有其他程序,而不会出现任何问题。 万岁!