所以,这是情况。
我有双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
和我所有其他程序,而不会出现任何问题。 万岁!