有人可以澄清一下 Centos 8 在以下情况下如何设置路由指标。
我在系统上有两个 vlan,每个 vlan 在 /etc/sysconfig/network-scripts/route-vlanXX 中定义了一个匹配的路由前缀。ip route show 给出以下内容:
[user@hostname ~]$ ip r show to match 192.168.56.252
default via 10.210.104.1 dev net proto dhcp metric 350
192.168.56.0/24 via 192.168.1.1 dev vlan23 proto static metric 416
192.168.56.0/24 via 192.168.1.33 dev vlan24 proto static metric 417
值 416 和 417 是如何得出的?它不是我明确设置的。
proto static metric
似乎与metric
设定明显不同。除了一个是自动生成的,另一个是明确设置的之外,还有其他区别吗?
在 CentOS8 中,NetworkManager 或多或少是强制性的,它是接口的实际管理器,将配置转换为它自己的本机配置。
那里或多或少解决了您的问题的文档(来自 RHEL8 的文档,今天仍然是 CentOS8 的上游):
20.8。NetworkManager 如何管理多个默认网关
虽然本文档仅描述了多个网关(即多个默认路由又名 0.0.0.0/0 路由),但 NetworkManager 在内部为其配置的每个接口分配了一个指标。然后将此度量应用于具有此接口的路由。
理由是你不能在同一个路由表(通常是main)中添加两个相同的路由,如果像度量这样的东西不能区分它们(即使内核添加的自动 LAN 路由可以像这样存在,它们也不会工作反正)。如果手动配置两次到 192.168.56.0/24 的路由,这可以防止出现错误。度量标准必须不同(否则必须使用策略路由和多个路由表)。
因此,当没有明确设置时,NetworManager 会为用于接口的指标做出一些选择和假设。虽然这个度量是 NM 内部每个接口的,但没有实际的接口度量,只有路由度量(和用于路由的地址
proto kernel
度量)。没有明确配置指标。VLAN 接口的基本度量值为 400
已经有一个指标为 400 的先前接口。选择下一个:401
冲洗,重复。直到达到 vlan23 和 vlan24 的指标 416 和 417
仅通过它的度量,我可以得出接口
net
是一个团队接口。所以最后,这个设置在
/etc/sysconfig/network-scripts/route-vlan23
:不是简单地用类似的东西解释:
这不会得到任何指标,但正在通过 NetworkManager 为接口添加先前确定的指标。
否则,以相同方式手动添加的第二条没有度量标准的路由将失败:
至于
proto
它是定义在 0 和 255 之间的任何值/etc/iproute2/rt_protos
或其等效符号。内核使用设置的 LAN 路由proto kernel
。工具通常static
在设置值时选择(显然 DHCP 选择dhcp
)。我可以想象一个路由守护进程会更容易地跟踪哪些动态路由由它自己(和相关协议)处理并且不会触及
static
路由。例如: