首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是没有传出网络接口的Linux路由(缺少`RTA_OIF`的RTLINK回答),以及如何创建一个用于测试的路由?

什么是没有传出网络接口的Linux路由(缺少`RTA_OIF`的RTLINK回答),以及如何创建一个用于测试的路由?
EN

Unix & Linux用户
提问于 2018-11-27 14:17:05
回答 1查看 433关注 0票数 1

当使用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

下一个尝试(失败):

代码语言:javascript
复制
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路由而没有一个传出的网络接口?我在看什么?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-11-28 12:01:10

事实证明,没有传出网络接口的路由(不是:与路由相关的规则)至少用于这三种用例:

  1. 所谓黑洞路由,其中IP堆栈静默地丢弃所有与路由匹配的流量.
  2. 不可访问的路由,其中IP堆栈删除了发送到这些路由的所有通信量,并另外触发ICMP(v6)不可访问的响应。
  3. 禁止路由( IP堆栈再次丢弃所有通信量)也发送ICMP(v6)响应,但这是“禁止的”,而不是“不可访问的”。

这些路线可以很容易地创建如下:

代码语言:javascript
复制
# 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确认这些路由没有传出网络接口:

代码语言:javascript
复制
$ ip route show
...
blackhole 1.2.3.4
unreachable 1.2.3.5
prohibit 1.2.3.6
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/484453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档