我对 Linux 中基于策略的路由的理解是,有三个主要组件,路由表、路由和规则。我遵循了许多指南,在每个指南中,这似乎都是正确的,因此我创建了一个路由表,向其中添加了一条路由,然后添加了一个规则,以使用该表来限定流量。
这对我来说似乎合乎逻辑,有一个规则列表,如果流量与规则匹配,它会查找路由表并告诉它如何到达目的地,但这似乎对我不起作用,我现在来了在许多其他文章中,在设置路由表后,主题然后将相同的路由添加到主路由表,我不确定为什么需要这样做,除非我对它的工作原理的理解是错误的,或者它不起作用。
这是来自Linux Advanced Routing & Traffic Control HOWTO的一个很好的例子,它有以下摘录(以防链接消失):
一个创建两个额外的路由表,比如 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
Run Code Online (Sandbox Code Playgroud)
没什么特别的,只需构建到网关的路由并通过该网关构建默认路由,就像在单个上游提供商的情况下所做的那样,但将每个提供商的路由放在单独的表中。请注意,网络路由就足够了,因为它告诉您如何查找该网络中的任何主机,其中包括上面指定的网关。
接下来设置主路由表。通过连接到该邻居的接口将事物路由到直接邻居是一个好主意。请注意“src”参数,它们确保选择了正确的传出 IP 地址。
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
Run Code Online (Sandbox Code Playgroud)
然后,您对默认路由的偏好:
ip route add …
Run Code Online (Sandbox Code Playgroud)