当使用 RTLINK 从(网络命名空间的)Linux 内核查询可用的 IP 路由时,我注意到在一个测试系统上 RTLINK 返回一个没有RTA_OIF
属性的路由,也就是说,没有指定传出网络接口。
不幸的是,我不知道如何使用该ip route add
命令重现这种情况(用于测试),并且到目前为止,我所接触的任何人都无法解释最初创建此路由的“什么”,而没有任何传出网络接口的指示。通过查看 Linux 内核源代码,我注意到传出网络接口属性实际上是可选的。但是,我的尝试ip route add
总是以内核自动添加的传出网络接口或无法访问而告终:
ip route add 1.1.1.1/32 via 1.1.1.2
给RTNETLINK answers: Network is unreachable
.
下一次(失败)尝试:
ip addr add 1.1.1.2/32 dev ens33
ip route add 1.1.1.1/32 via 1.1.1.2
ip route show
...然后给出1.1.1.1 via 1.1.1.2 dev ens33
,内核自动插入了一个合适的传出网络接口(因此RTA_OIF
存在,即使我一开始没有指定它)。
搜索“没有传出接口的 linux ip route”或类似的东西不会给我任何可用的结果——除非我在这里忽略了一些重要的东西。
那么,如何创建一个(测试)案例,其中我有一个没有传出网络接口的 IP 路由?我在这里俯瞰什么?
事实证明,没有传出网络接口的路由(不是:与路由相关的规则)至少用于以下三个用例:
这些路线可以很容易地创建如下:
ip route show
然后确认这些路由没有传出网络接口: