我自己找到了解决方案: 路由多个上行链路/提供商
常见配置如下,其中有两个提供商将本地网络(或甚至单个机器)连接到大型Internet。
________
+------------+ /
| | |
+-------------+ Provider 1 +-------
__ | | | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | if1 | /
/ \ | | |
| Local network -----+ Linux router | | Internet
\_ __/ | | |
\__ __/ | if2 | \
\___/ +------+-------+ +------------+ |
| | | \
+-------------+ Provider 2 +-------
| | |
+------------+ \________
如何通过特定提供商(例如,提供商1)对来自同一提供商的数据包的路由应答。
我们先设置一些符号名称。设$ IF1是第一个接口的名称(上图中的if1),$ IF2是第二个接口的名称。然后让$ IP1成为与$ IF1相关联的IP地址,将$ IP2作为与$ IF2相关联的IP地址。接下来,让$ P1为提供商1处网关的IP地址,将$ P2作为提供商2处网关的IP地址。最后,让$ P1_NET为$ P1所在的IP网络,$ P2_NET为IP网络$ P2在。
一个创建两个额外的路由表,比如T1和T2。这些都添加在/ etc / iproute2 / rt_tables中。然后在这些表中设置路由,如下所示:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
没有什么了不起的,只需构建到网关的路由并通过该网关构建默认路由,就像在单个上游提供者的情况下那样,但是将路由放在每个提供者的单独表中。请注意,网络路由就足够了,因为它告诉您如何在该网络中查找包含网关的任何主机,如上所述。
接下来,设置主路由表。通过连接到该邻居的接口将事物路由到直接邻居是个好主意。注意`src'参数,它们确保选择正确的传出IP地址。
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
然后,您对默认路由的偏好:
ip route通过$ P1添加默认值
接下来,设置路由规则。这些实际上选择了要路由的路由表。如果已有相应的源地址,则需要确保路由出给定的接口:
ip规则从$ IP1表T1添加
ip规则从$ IP2表T2添加