特定网络上的 ubuntu 上的网络数据包丢失

特定网络上的 ubuntu 上的网络数据包丢失

所以我有一个反复出现的问题,让我烦恼了好几个星期。它只发生在我的家庭网络上的 ubuntu (18.04 LTS) 笔记本电脑上。

  • 此网络上的其他设备(Windows 10 桌面、Android 手机、Windows 笔记本电脑)运行良好
  • 我的 ubuntu 笔记本电脑在其他网络上运行正常
  • wifi 或有线连接没什么区别,我已经排除了所有中间设备
  • 我已经联系了我的 ISP,他们说一切正常并建议如果问题仍然存在则更换路由器。

似乎唯一能解决这个问题的方法是重新启动 ubuntu 笔记本电脑。

以下是mtr 8.8.8.8重启之前的情况:

Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                                                  Packets               Pings
 Host                                                                           Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. ???
 2. 78-22-192-1.access.telenet.be                                               94.7%   549   10.5  73.0   9.5 831.1 204.7
 3. dD5E0CEA1.access.telenet.be                                                 82.9%   549   11.9 180.8   9.7 1807. 443.7
 4. dD5E0FA71.access.telenet.be                                                 82.7%   549   15.6 202.2  12.8 2508. 479.2
 5. 74.125.32.88                                                                82.7%   549   28.8 189.8  27.0 2365. 429.8
 6. ???
 7. dns.google                                                                   0.0%   549   28.9  30.4  26.0  50.8   3.2

watch "netstat -s | egrep -i 'loss|retran'"也呈现TcpLossProbes稳步上升趋势。

重启后:

Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                                                  Packets               Pings
 Host                                                                           Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. _gateway                                                                    99.9%   871    4.4   4.4   4.4   4.4   0.0
 2. 78-22-192-1.access.telenet.be                                                0.0%   871   13.1  17.4   9.1 175.8  15.1
 3. dD5E0CEA1.access.telenet.be                                                  0.0%   871   14.6  14.1   9.0 169.8  10.5
 4. dD5E0FA71.access.telenet.be                                                  0.0%   871  100.2  16.9  12.5 119.2   6.0
 5. 74.125.32.88                                                                 0.0%   870   31.8  32.9  27.2 208.2  13.0
 6. ???
 7. dns.google                                                                   0.0%   870   34.6  29.3  26.0  43.1   2.4

在网络设置中,我曾尝试手动设置 DNS(谷歌的 IPv4 和 IPv6 均如此),但现在我已将一切恢复为全自动。

我的/etc/resolv.conf当前样子是这样的:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53
search telenet.be

/etc/dhcp/dhclient.conf我确实通过添加来改变

supersede domain-name "";
supersede domain-search "";
supersede search "";

supersede dhcp6.domain-name "";
supersede dhcp6.domain-search "";
supersede dhcp6.search "";

到文件末尾,因为我认为它可能与部分中的域的顺序有关,searchresolv.conf显然事实并非如此。

我确实注意到了一些奇怪的事情——在重启之前,数据包丢失百分比在mtr10 秒内减少,然后在 20 秒内增加,在 10 秒内减少,在 20 秒内增加,依此类推。

此外,重启后一段时间,问题再次出现,但我不知道是什么触发了它。运行mtr显示与重启前相同的症状(第一个跳转显示为???again 而不是_gateway

我绝不是一个网络专家,但很乐意接受有关这个主题的任何提示。

答案1

所以,我终于找到了问题所在。这是由 docker 创建的虚拟网络适配器与我的家庭网络的 IP 范围之间的 IP 重叠。我的路由器是 192.168.0.1,我的路由器中有以下地址之一ifconfig -a

br-8ff3faad381d: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.0.1  netmask 255.255.240.0  broadcast 192.168.15.255
        ether 02:42:fd:b4:cf:f4  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Adocker network prune立即修复了数据包丢失问题。我还配置了 docker 以坚持使用更方便的 IP 范围:

cat /etc/docker/daemon.json

{
  "bip": "192.168.1.5/24",
  "fixed-cidr": "192.168.1.5/25",
  "fixed-cidr-v6": "2001:db8::/64",
  "mtu": 1500
}

相关内容