基于策略的路由表如何实际工作?

我对Linux中基于策略的路由的理解是有三个主要组件,路由表,路由和规则。 我遵循了许多指南,在他们每一个这似乎是正确的,所以我创build一个路由表,我添加一个路由,然后我添加一个合格的stream量使用此表的规则。

这对我来说似乎是合乎逻辑的,有一个规则列表,如果stream量符合规则,它会查找路由表,并告诉它如何到达目的地,但这似乎不适用于我,我现在来在设置路由表之后,在其他一些文章中,主题然后将相同的路由添加到主路由表,我不知道为什么这是必需的,除非我理解它是如何工作的是错误的,或者它不工作。

这是Linux高级路由和stream量控制HOWTO的一个很好的例子,它有以下摘录(万一链路消失):

一个创build两个额外的路由表,比如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 

没有什么特别的,只要build立一个到网关的路由并通过这个网关build立一个默认路由,就像在单个上游提供者的情况下那样,但是把路由放在每个提供者的一个单独的表中。 请注意,networking路由就足够了,因为它告诉您如何在上面指定的networking中find包含网关的任何主机。

接下来你设置主路由表。 通过连接到该邻居的接口将事物路由到直接邻居是一个好主意。 请注意`src'参数,它们确保select正确的传出IP地址。

 ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2 

然后,您的默认路由的偏好:

 ip route add default via $P1 

接下来,您将设置路由规则。 这些实际上select什么路由表路由。 如果您已经拥有相应的源地址,您需要确保您路由给定的接口:

 ip rule add from $IP1 table T1 ip rule add from $IP2 table T2 

这组命令可以确保来自特定接口的stream量的所有答案都可以从该接口得到回答。

好的,所以我完全不明白为什么添加路由到专门创build的新路由表后,你去把它们添加到主路由表中,那么有什么要说的吗?

其实我觉得这个混淆来自这样一个事实,那就是这些指令混合了两个主题:

  • 处理策略路由
  • 以最佳实践的方式设置您的标准路由表

这三条线

  ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 

是否有处理由于任何原因而无法与您的策略路由匹配的stream量(例如,在路由器上添加回环,并将其用于pipe理)。 对于PBR来说,它们并不是绝对必要的,但最好让它们在这里一致。