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

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

我对 Linux 中基于策略的路由的理解是,它有三个主要组件:路由表、路由和规则。我遵循了许多指南,每个指南中这似乎都是正确的,因此我创建了一个路由表,向其中添加了一条路由,然后添加了一条规则以使符合条件的流量使用该表。

对我来说这似乎合乎逻辑,有一个规则列表,如果流量与规则匹配,它会查找路由表并告诉它如何到达目的地,但这似乎对我来说不起作用,现在我遇到了许多其他文章,在设置路由表后,主题然后将相同的路由添加到主路由表,我不确定为什么需要这样做,除非我对其工作原理的理解是错误的,或者它不起作用。

以下是来自Linux 高级路由和流量控制指南它有以下摘录(以防链接消失):

可以创建两个附加路由表,例如 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 add default via $P1

接下来,设置路由规则。这些规则实际上选择使用哪个路由表进行路由。如果您已经有相应的源地址,您需要确保路由出给定的接口:

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

这组命令确保所有针对特定接口传入的流量的答案都从该接口得到答复。

好的,所以我完全不明白为什么在将路由添加到专门创建的新路由表后,还要将它们添加到主路由表,这样做有什么意义,有人可以解释一下吗?

答案1

实际上,我认为混淆来自于这些说明混淆了两个主题:

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

这三行

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

用于处理由于某种原因(例如,您在路由器上添加环回,并将其用于管理)而未与您的策略路由匹配的流量。它们对于 PBR 的工作并非绝对必要,但最好还是将它们放在那儿。

相关内容