You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双DHCP接口路由冲突导致网络间歇性延迟问题求助

双DHCP接口路由冲突导致网络间歇性延迟问题求助

问题描述

我用LXD和cloud-init配置了一个实例,它有两个通过DHCP分配IP的网络接口:

  • eth0(10.23.44.177/24):连接到主机的lxdbr0网桥,用于访问互联网
  • enp5s0(192.168.100.179):连接到无互联网访问的私有LAN节点

现在遇到的问题是:ping 8.8.8.8或者私有LAN内的IP时,都会出现严重的间歇性延迟——经常10秒左右不通,偶尔才能ping通一次。但只要关掉其中一个接口,另一个就能完全正常工作。我确定是路由配置出了问题。

相关系统信息

路由表输出

$ ip route s
default via 192.168.100.1 dev enp5s0 proto dhcp src 192.168.100.179 metric 100
default via 10.23.44.1 dev eth0 proto dhcp src 10.23.44.177 metric 100
10.23.44.0/24 dev eth0 proto kernel scope link src 10.23.44.177
10.23.44.1 dev eth0 proto dhcp scope link src 10.23.44.177 metric 100
192.168.100.0/24 dev enp5s0 proto kernel scope link src 192.168.100.179
192.168.100.1 dev enp5s0 proto dhcp scope link src 192.168.100.179 metric 100

网络接口输出

$ ifconfig
enp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.100.179  netmask 255.255.255.0  broadcast 192.168.100.255
inet6 fe80::216:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
ether 00:16:3e:xx:xx:xx  txqueuelen 1000  (Ethernet)
RX packets 144  bytes 15102 (15.1 KB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 705  bytes 55690 (55.6 KB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 10.23.44.177  netmask 255.255.255.0  broadcast 10.23.44.255
inet6 fd42:45c6:df12:80cb:216:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x0<global>
inet6 fe80::216:3eff:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
ether 00:16:3e:12:xx:xx  txqueuelen 1000  (Ethernet)
RX packets 15620  bytes 95337338 (95.3 MB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 10186  bytes 740093 (740.0 KB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 1000  (Local Loopback)
RX packets 182  bytes 17262 (17.2 KB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 182  bytes 17262 (17.2 KB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

问题分析与解决办法

Hey,这问题一眼就能看出来是双默认路由冲突搞的鬼!你看路由表里有两条优先级完全相同(metric都是100)的默认路由,系统发往外网的流量会随机选其中一条走。当它选到enp5s0的时候,因为这个接口连的是没网的私有LAN,数据包直接就丢了,等系统重试切换到eth0的路由时才能通,这就是你看到间歇性卡顿的原因。

1. 临时修复(立即生效,重启后失效)

先把enp5s0的默认路由删掉,马上就能恢复正常:

sudo ip route del default via 192.168.100.1 dev enp5s0

这时候再看路由表,默认路由就只剩eth0那条了。外网流量会正常走eth0出去,而私有LAN的192.168.100.0/24段因为有直连路由,会自动走enp5s0,两边都能正常通信。

2. 永久修复(重启后不会复发)

因为你是通过DHCP自动获取IP,所以得让enp5s0的DHCP客户端不要请求默认路由,不同系统配置方式不一样,给你几种常用的:

方式一:Debian/Ubuntu系(用dhclient)

编辑/etc/dhcp/dhclient.conf,添加针对enp5s0的配置:

interface "enp5s0" {
    supersede routers "";
}

然后重启网络服务:

sudo systemctl restart networking

方式二:使用NetworkManager管理网络

直接用nmcli修改连接配置:

# 让enp5s0不设置默认路由
sudo nmcli connection modify enp5s0 ipv4.never-default yes
# 重新加载配置生效
sudo nmcli connection up enp5s0

方式三:从LXD cloud-init源头解决

既然你是用cloud-init初始化实例,直接在cloud-init的网络配置里指定enp5s0不设置默认路由,以后新建实例也不会有这个问题:

network:
  ethernets:
    eth0:
      dhcp4: true
    enp5s0:
      dhcp4: true
      dhcp4-overrides:
        never-default: true  # 禁止该接口生成默认路由
  version: 2

3. 验证修复效果

执行ip route s确认只有eth0的默认路由,然后分别ping 8.8.8.8和私有LAN内的IP,确认都能稳定通信且无延迟。


备注:内容来源于stack exchange,提问作者Ender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:34:36