当使用 networkd 而不是 network-manager 时,除非此机器首先 ping 客户端,否则无法 ping 18.04 桌面

当使用 networkd 而不是 network-manager 时,除非此机器首先 ping 客户端,否则无法 ping 18.04 桌面

我正在尝试在 18.04 机器上使用 netplan 和 networkd 作为渲染器设置网络。它运行桌面发行版,因为它连接到我的电视并用于多媒体,但我将其称为服务器,因为它更容易解释,并且一旦我让网络正常运行,它就会运行 dns 和 dhcp 服务器。

我注意到,当我通过 netplan 配置网络时,我无法从我的 Windows 10 客户端 ping 服务器(未在其他操作系统上测试过),除非我先从服务器 ping 所述客户端。在客户端上,我得到:

Reply from [CLIENT'S OWN IP]: Destination host unreachable.

但是在首先从服务器 ping 之后,客户端有一个 ARP 条目,并且一切正常。

我搜索解决方案很长时间并确认:

  • 子网正确 - 目前我的路由器上的所有设置都是 DHCP,可以排除此可能性
  • 没有 MAC 或 IP 地址冲突
  • 接口上的电源管理已关闭
  • 由于唯一的变化是 network-manager 与 networkd,这似乎不是一个驱动程序问题
  • 防火墙没问题
  • 路由器正常

目前,机器通过 WiFi 连接,为了将配置从网络管理器中更改,我只需重命名 /etc/netplan/01-network-manager-all.yaml 即可,因此它不被使用,并创建了 /etc/netplan/config.yaml 如下:

network:
    version: 2
    renderer: networkd
    wifis:
        wlp3s0:
            dhcp4: yes
            dhcp6: no
            access-points:
                "MyAP":
                    password: "MyPassword"

/etc/network/interfaces 只是iface lo inet loopback

我读到不需要禁用网络管理器,因为它只会报告手动配置的接口是不受管理的,所以上述更改就是我所做的全部。

使用 Wireshark,我确认了配置 netplan 后,当我从没有服务器 IP 的 ARP 条目的客户端 ping 时,服务器不会收到 ARP 数据包。当网络管理器负责管理接口时,它会收到这些数据包;第一个告诉路由器,然后一个告诉客户端。

提前感谢你的帮助!

编辑1: 附加信息:

/etc/NetworkManager/system-connections/[NETWORKNAME] 是:

[connection]
id=XXXX
uuid=992e3be7-dea0-49b7-a474-60832236b8bf
type=wifi
permissions=
timestamp=1530425561

[wifi]
mac-address=C4:E9:84:E1:61:FF
mac-address-blacklist=
mode=infrastructure
seen-bssids=50:C7:BF:38:01:91;
ssid=XXXX

[wifi-security]
key-mgmt=wpa-psk
psk=XXXX

[ipv4]
dns=8.8.8.8;8.8.4.4;
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

/run/systemd/network/10-netplan-wlp3s0.network 处的 netplan 生成的网络配置是:

[Match]
Name=wlp3s0

[Network]
DHCP=ipv4

[DHCP]
UseMTU=true
RouteMetric=600

编辑2:仔细观察 Wireshark 可以发现,使用 systemd-networkd 配置时,没有 IGMP 活动,除了服务器作为源之外没有 MDNS 活动,唯一的 ARP 活动是在网关和服务器之间,直到服务器尝试 ping 客户端。一旦服务器尝试 ping 客户端,第一个 ARP 是“谁有客户端 IP 告诉服务器 IP”,然后紧接着是“谁有服务器 IP,告诉客户端 IP”,最后 ping 发往客户端。从这里开始,客户端可以 ping 服务器。

整个过程中,服务器可以访问任何网络服务(内部和外部)。

答案1

在意识到自己受到了这个错误经过纠正后,我发现 networkctl 显示无线接口为“配置”状态。

然后我发现 NetworkManager 正在运行,我通过 停止它sudo systemctl stop NetworkManager,然后sudo systemctl restart systemd-networkd,最后删除 Windows 客户端上的 ARP 条目,然后再次 ping,一切正常。我这样做sudo systemctl disable NetworkManager并重新启动以确保解决方案持续存在,它没有...

Ubuntu IRC 频道中一位好心人指导我这样做:

sudo systemctl mask network-manager.service
sudo systemctl mask NetworkManager-dispatcher.service
sudo systemctl mask NetworkManager-wait-online.service

这解决了问题,networkctl 现在显示“已配置”状态。看来 network-manager 和 systemd-networkd 正在争夺无线接口的配置。我怀疑我的理解是正确的,即如果没有配置,network-manager 会不管它,/etc/NetworkManager/system-connections/但我还没有测试过这个理论——我只是很高兴它已经解决了。

答案2

我在最近安装的 18.04 LTS 服务器上遇到了同样的问题,我也在设置 VNC 访问。GUI 安装的结果如下:

root:~# apt install lxde ssvnc

我最终在机器上安装了网络管理器,以及 systemd-networkd(和 systemd-resolved 等)。我只能从服务器访问本地网络上的机器,无法访问本地 LAN 之外的任何机器,也无法通过 ssh 连接任何机器。Ping 也失败了。

为了确认您的方法,我还禁用了网络管理器,因为它是系统上最大的问题,我发现它试图完全接管网络配置和 DNS(resolv.conf),而不管已经安装了什么。我只有在登录 GUI 并使用网络管理器配置后才能让一切正常工作。这对于桌面用户来说(非常)有意义 - 只需让它工作即可。

我没有隐藏服务,而是这样做了:

root:~# apt list network-manager
Listing... Done
network-manager/bionic-updates,bionic-security,now 1.10.6-2ubuntu1.1 amd64 [installed,automatic]
N: There is 1 additional version. Please use the '-a' switch to see it
root:~# apt remove network-manager

否则,各种网络服务会争夺机器的配置。在删除网络管理器后,我通过 netplan 设置机器,并将 systemd-resolved 作为唯一的名称服务器服务。我所做的唯一进一步更改是将“/etc/resolv.conf”符号链接从指向 127.0.0.53 上的 systemd-resolved 存根服务 (/run/systemd/resolve/stub-resolv.conf) 更改为备用文件,以直接公开实际配置的名称服务器 (/etc/resolv.conf -> ../run/systemd/resolve/resolv.conf)。

此后,一切对我来说也都如预期的那样顺利。

[编辑] 我了解到,网络管理器对于活动桌面使用来说是一项很棒的服务,但对于命令行服务器或无人值守桌面来说却不是。默认情况下,18.04 LTS 服务器 ISO 不会安装网络管理器……但如果您为 VNC 等安装 GUI,它就会出现。VNC GUI 在没有网络管理器的情况下也能正常工作。

相关内容