如何诊断间歇性/触发性网络错误

如何诊断间歇性/触发性网络错误

问题

某些操作导致整个 LAN 网络无法解析域,设备无法访问域之外的任何内容局域网网络。

例子

当尝试从自托管服务器中拉取 docker 镜像时GitLab例如,网络上的所有设备都失去互联网连接。还有其他操作也会触发此效果。

拉动最终会成功,但速度要<100Kb/秒。中止拉动将导致所有设备在几分钟内恢复正常运行。

笔记

当所有设备都无法访问互联网时,我仍然能够通过 ssh 进入设备。我还可以访问任何局域网桑巴共享。

问题似乎只发生在目标地址是局域网网络。假设DNS记录示例.com指向99.99.99.99,在本例中是面向公众的地址。浏览到示例.com从内部来看局域网. 从以下位置拉取 docker 镜像registry.example.com将会破坏网络。

数据

系统:

$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 19.04
Release:        19.04
Codename:       disco

以太网控制器:

$ lspci |grep Ethernet
13:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)

路线:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    0      0        0 enp19s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-aa8d8a399367
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-b47396405d84
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-2bac20a2ccb1
172.21.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-c1cedda32d4f
172.22.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-db04364eb1ec
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 enp19s0

网络接口:

$ lshw -C network
  *-network DISABLED
       description: Wireless interface
       product: AR9285 Wireless Network Adapter (PCI-Express)
       vendor: Qualcomm Atheros
       physical id: 0
       bus info: pci@0000:02:00.0
       logical name: wlp2s0
       version: 01
       serial: 74:2f:68:82:81:f6
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=ath9k driverversion=5.0.0-27-generic firmware=N/A latency=0 link=no multicast=yes wireless=IEEE 802.11
       resources: irq:16 memory:f7d00000-f7d0ffff
  *-network
       description: Ethernet interface
       product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
       vendor: Realtek Semiconductor Co., Ltd.
       physical id: 0
       bus info: pci@0000:13:00.0
       logical name: enp19s0
       version: 06
       serial: 38:60:77:be:92:40
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix vpd bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=r8169 duplex=full firmware=rtl_nic/rtl8168e-2.fw ip=192.168.0.92 latency=0 link=yes multicast=yes port=MII speed=1Gbit/s
       resources: irq:19 ioport:c000(size=256) memory:f1404000-f1404fff memory:f1400000-f1403fff

接下来是一堆docker虚拟接口。

唯一的 netplan 配置文件内容:

$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}

# https://netplan.io/reference
network:
    version: 2
    renderer: networkd
    ethernets:
        enp19s0:
            wakeonlan: true
            addresses:
            - 192.168.0.92/24
            gateway4: 192.168.0.1
            nameservers:
                addresses:
                - 1.1.1.1
                - 8.8.8.8
                - 1.0.0.1
                - 8.8.4.4
            dhcp4: false
            dhcp6: false
            accept-ra: false

网络

https://i.imgur.com/Hics5je.jpg

  • 我的 ISP 发放的调制解调器/路由器组合是红色和黄色(一个物理设备)。
  • 紫色设备是无线接入点。
  • 蓝色设备是网络交换机。

我尝试过

  • 断开除两台设备以外的所有设备并进行测试。
    • 将这两个设备直接连接到路由器/调制解调器组合以排除交换机故障。
  • 关闭两个 Ubuntu 设备上的 IPv6。
    • 传递ipv6.disable=1内核参数。
  • 更新网络接口驱动程序。
    • $ apt install r8168-dkms
  • 设置正确的日期/时区。
  • 从 netplan 配置中删除名称服务器。
  • 查看了 Wireshark 捕获。
    • 不确定到底要寻找什么。

答案1

解决方案

我绝对不是网络工程师,所以请谨慎对待此建议。

我通过以下方式解决了我的问题:

  1. 为我的域创建 AAAA 记录。
  2. 在所有设备上重新启用 IPv6 支持。
  3. 创建 IPv6 防火墙规则以允许某些流量到达目标主机;换句话说,创建白名单。

原因

我仍然不确定是什么原因导致在禁用 IPv6 的情况下 DNS 突然失败。我最好的猜测是我的 ISP 更改了他们那边的某些东西(包括调制解调器/路由器)。

补充说明

  • 积极的:顺便说一句,我的所有服务现在都完全符合 IPv6 标准。
  • 消极的:这或许只是隐藏了真正的问题。

相关内容