答案1
linkdown
是将显示在表中并配置为通过处于该状态的接口发出的路由的状态DOWN
。您可以通过运行看到这一点:
ip a
并查找接口的状态。在我的笔记本电脑上,我打开了 WiFi,并且拔掉了以太网适配器,因此显示:
wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
在我的路由表中,我有很多路由,但我可以添加一些垃圾路由:
sudo ip route add 192.168.123.0/24 dev enp0s25
sudo ip route add 192.168.124.0/24 dev wlp3s0
然后我的表格将显示linkdown
以太网路由:
192.168.123.0/24 dev enp0s25 scope link linkdown
192.168.124.0/24 dev wlp3s0 scope link
onlink
意味着路由应该“假装下一跳直接连接到此链路,即使它不匹配任何接口前缀”。所以我们也可以制作一个假的表中的一个:
sudo ip route add 192.168.125.0/24 via 192.168.123.111 dev wlp3s0 onlink
现在将显示在路由表中:
192.168.123.0/24 dev enp0s25 scope link linkdown
192.168.124.0/24 dev wlp3s0 scope link
192.168.125.0/24 via 192.168.123.111 dev wlp3s0 onlink
如果您链接到下行接口,您甚至可以花哨并同时拥有两者:
192.168.126.0/24 via 192.168.123.111 dev enp0s25 onlink linkdown
答案2
linkdown
是将显示在表中并配置为通过处于该状态的接口发出的路由的状态DOWN
。
我将尝试举一个例子来看看该onlink
选项的真正作用:
您已eth0
(在您的计算机上)配置了 IP 地址/掩码:192.168.0.1/24
由于某种原因,您想要使用物理 LAN 上eth0
配置不一致的网关。假设它的地址为 10.0.10.1/24,该地址与您为自己的计算机提供的 192.168.0.1/24 配置不匹配。
如果你说:
ip route add default dev eth0 via 10.0.10.1
然后你会得到一个错误响应(网络无法访问或其他)。
为什么?因为(严格来说)LAN 上有一台机器 10.0.10.1 是没有意义的eth0
,因为你告诉你的计算机这个 LAN 的网络地址是 192.168.0.0/24。
但它来了:如果您添加onlink
到命令中,如下所示:
ip route add default dev eth0 via 10.0.10.1 onlink
然后该路线被接受。
但现在我们遇到另一个问题:如果数据包必须路由到该onlink
网关,内核会做什么?
我检查(通过实验),结果是这样的:内核在 LAN 上发送 arp 请求,eth0
询问“who-has 10.0.10.1”,这是onlink
您配置的网关。当它收到响应时,内核有一个MAC地址它可以将其数据包发送到其中并执行路由。
这意味着:当网关的地址与计算机上的 LAN 配置不匹配时 ( ),您可以通过添加到语句来eth0
强制内核使用此网关。onlink
我想在极少数情况下您必须使用此功能。需要 onlink 选项的情况大多是网络设计不佳的情况。我认为一般的隧道设置onlink
也不需要。
答案取自这里