特定网络上的 ubuntu 网络丢包

Mop*_*per 5 networking packet-loss ubuntu ubuntu-18.04

因此,我有一个反复出现的问题,几周来一直困扰着我。只有我的家庭网络上的 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在网络设置中,我手动篡改了 DNS 设置(对于 google,在 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
Run Code Online (Sandbox Code Playgroud)

我确实/etc/dhcp/dhclient.conf通过添加进行了更改

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

supersede dhcp6.domain-name "";
supersede dhcp6.domain-search "";
supersede dhcp6.search "";
Run Code Online (Sandbox Code Playgroud)

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

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

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

我绝不是网络专家,并且很乐意接受有关此主题的任何提示。

Mop*_*per 12

所以,我终于找到了问题所在。这是 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
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)