当使用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路由而没有一个传出的网络接口?我在看什么?
发布于 2018-11-28 12:01:10
事实证明,没有传出网络接口的路由(不是:与路由相关的规则)至少用于这三种用例:
这些路线可以很容易地创建如下:
# ip route add blackhole 1.2.3.4
# ip route add unreachable 1.2.3.5
# ip route add prohibit 1.2.3.6然后,ip route show确认这些路由没有传出网络接口:
$ ip route show
...
blackhole 1.2.3.4
unreachable 1.2.3.5
prohibit 1.2.3.6https://unix.stackexchange.com/questions/484453
复制相似问题