此示例来自netplan 示例
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 9.0.0.9/24
- 10.0.0.10/24
- 11.0.0.11/24
#gateway4: # unset, since we configure routes below
routes:
- to: 0.0.0.0/0
via: 9.0.0.1
metric: 100
- to: 0.0.0.0/0
via: 10.0.0.1
metric: 100
- to: 0.0.0.0/0
via: 11.0.0.1
metric: 100
为什么路由是接口配置的一部分?
路由不是全局的吗?
路由和接口是两个不同的东西。
答案1
路由特定于某个接口的情况并不少见,但是它们通常是全局的。
例如,如果我有一个 VPN 接口,我可能希望通过该链路路由 VPN 另一端的所有子网。这些子网很可能是私有/保留子网,这意味着它们仅在 VPN 处于活动状态时才可用,因此将它们始终放在路由表中是没有意义的,尽管它可能仍然有效。
在您提供的示例中,有多个默认路由,可能是为了冗余。
在路由中,可能要理解的最重要的规则是“最具体路由优先”规则,这意味着,如果您尝试访问10.0.0.1
,它将先遍历的路由,10.0.0.0/25
然后再遍历的路由10.0.0.0/24
,而后者显然会在的之前0.0.0.0/0
。
答案2
路由在 Linux 路由表中确实有一个关联的接口;您可以在系统上的列输出中看到这一点ip route show
。dev
此信息既可以让内核知道需要将流量发送到哪个接口,而无需计算每个数据包的路由依赖性,也可以让内核在给定接口处于“关闭”状态时执行正确的路由操作。
从 netplan 的角度来看,路由和设备之间的关联非常重要,因为设备不会同时出现,并且系统应该只在相应网关的路由可用时尝试将路由添加到内核。