我在Linux中配置了两个同时运行的网络接口:
- 无线网络(wlan0)
- LTE 调制解调器(调制解调器 1)
wlan0 接口在路由表中具有更高的优先级(更低的度量)(输出ip route
)
default via 192.168.36.1 dev wlan0 metric 600
default dev modem1 scope link metric 1144
/etc/resolv.conf 将 Google DNS 服务器作为第一个名称服务器(第二个条目是 WiFi 路由器的网关):
nameserver 8.8.8.8
nameserver 192.168.36.1
我通常可以通过两个接口 ping 任何域
ping -I wlan0 google.com # Success
ping -I modem1 google.com # Success
现在回到问题:WiFi连接信号变差,网关192.168.36.1无法访问,但是wlan0接口仍然处于打开状态,并且仍然有 IP 地址。这是输出ip route
- 注意链接断开为了wlan0:
default via 192.168.36.1 dev wlan0 metric 600 linkdown
default dev modem1 scope link metric 1144
在这种情况下ping
使用wlan0不再起作用,但使用调制解调器1可以工作,但是只有当我提供 IP 地址时它才可以工作:
ping -I wlan0 8.8.8.8 # FAIL
ping -I modem1 8.8.8.8 # Success
以下操作(以及任何连接到任何域的尝试)均会失败,并出现“名称解析暂时失败”:
ping -I modem1 google.com # FAIL
如果我设置wlan0接口关闭,名称解析工作正常(请注意,这也会从上面的路由表中删除第一行)。
我认为可能发生的情况是,名称解析不是通过调制解调器1接口,但它只使用路由表,在这种情况下,它最终会到达无法到达的网关wlan0因为这是度量值最低的路由。只有 ping 本身会通过调制解调器1,成功了。
这种假设在某种程度上是正确的吗?如果是,那么如何才能真正通过调制解调器1界面?
答案1
这解决了我的问题: https://unix.stackexchange.com/questions/398810/default-route-with-linkdown
默认情况下,带有链接断开不会被忽略,因此名称解析仍然尝试通过不可达的路由进行。