我通过 SSH 在远程服务器上执行了 apt-get update; apt upgrade。netplan.io 和一些 systemd 软件包已升级。我切换到另一个屏幕窗口,但几秒钟后 SSH 连接就停止了。现在所有网络连接都丢失了。
这种情况在更新 netplan.io 时发生过一次。然后,在物理控制台上执行简单的 sudo ifdown (WAN-if); sudo ifup (WAN-if) 即可解决问题。
我的服务器运行 18.04.1 LTS,netplan 为空白配置,systemd-networkd(后端)为空白配置,所有接口均在 /etc/network/interfaces 中静态配置,并且安装了“ifupdown”。重启工作正常。
难道 netplan apply 仅在 netplan.io 的 apt upgrade 上触发?
编辑:这些是已更新的软件包,它们会终止 WAN 接口,如从 /var/log/apt/history.log 复制的:
Start-Date: 2019-01-15 12:43:10
Commandline: apt upgrade
Requested-By: user (1234)
Upgrade: libkrb5-3:amd64 (1.16-2build1, 1.16-2ubuntu0.1), libgssapi-krb5-2:amd64 (1.16-2build1, 1.16-2ubuntu0.1), netplan.io:amd64 (0.40.1~18.04.3, 0.40.1~18.04.4), libcom-err2:amd64 (1.44.1-1, 1.44.1-1ubuntu1), gnupg-utils:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), gpg-wks-client:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), python3-software-properties:amd64 (0.96.24.32.6, 0.96.24.32.7), gnupg-l10n:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), libibverbs1:amd64 (17.1-1, 17.1-1ubuntu0.1), libsystemd0:amd64 (237-3ubuntu10.9, 237-3ubuntu10.11), e2fsprogs:amd64 (1.44.1-1, 1.44.1-1ubuntu1), librbd1:amd64 (12.2.7-0ubuntu0.18.04.1, 12.2.8-0ubuntu0.18.04.1), ibverbs-providers:amd64 (17.1-1, 17.1-1ubuntu0.1), gpg-wks-server:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), gpg:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), libk5crypto3:amd64 (1.16-2build1, 1.16-2ubuntu0.1), udev:amd64 (237-3ubuntu10.9, 237-3ubuntu10.11), librdmacm1:amd64 (17.1-1, 17.1-1ubuntu0.1), initramfs-tools-bin:amd64 (0.130ubuntu3.5, 0.130ubuntu3.6), libudev1:amd64 (237-3ubuntu10.9, 237-3ubuntu10.11), krb5-locales:amd64 (1.16-2build1, 1.16-2ubuntu0.1), nplan:amd64 (0.40.1~18.04.3, 0.40.1~18.04.4), dirmngr:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), libss2:amd64 (1.44.1-1, 1.44.1-1ubuntu1), libext2fs2:amd64 (1.44.1-1, 1.44.1-1ubuntu1), psmisc:amd64 (23.1-1, 23.1-1ubuntu0.1), libkrb5support0:amd64 (1.16-2build1, 1.16-2ubuntu0.1), systemd-sysv:amd64 (237-3ubuntu10.9, 237-3ubuntu10.11), gpgv:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), libpam-systemd:amd64 (237-3ubuntu10.9, 237-3ubuntu10.11), systemd:amd64 (237-3ubuntu10.9, 237-3ubuntu10.11), libnss-systemd:amd64 (237-3ubuntu10.9, 237-3ubuntu10.11), libnss3:amd64 (2:3.35-2ubuntu2, 2:3.35-2ubuntu2.1), linux-firmware:amd64 (1.173.2, 1.173.3), gnupg:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), gpg-agent:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), librados2:amd64 (12.2.7-0ubuntu0.18.04.1, 12.2.8-0ubuntu0.18.04.1), initramfs-tools-core:amd64 (0.130ubuntu3.5, 0.130ubuntu3.6), gpgconf:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), initramfs-tools:amd64 (0.130ubuntu3.5, 0.130ubuntu3.6), gpgsm:amd64 (2.2.4-1ubuntu1.1, 2.2.4-1ubuntu1.2), tzdata:amd64 (2018g-0ubuntu0.18.04, 2018i-0ubuntu0.18.04), software-properties-common:amd64 (0.96.24.32.6, 0.96.24.32.7)
End-Date: 2019-01-15 12:45:04
WAN接口配置:
auto eno1
#iface eno1 inet dhcp
iface eno1 inet static
address a.b.c.X
netmask 255.255.255.NNN
gateway a.b.c.Y
dns-nameservers e.f.g.h i.j.k.l
up ip addr add a.b.c.Z/BB dev eno1
有趣的是,用于中继的 LAN 接口不受影响(仍然正常运行):
auto eno2
iface eno2 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
auto vlan3
iface vlan3 inet manual
vlan-raw-device eno2
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
auto br3
iface br3 inet static
address a.b.m.n
netmask 255.255.255.128
up ip addr add a.b.m.n-1/25 dev br3
down ip addr del a.b.m.n-1/25 dev br3
bridge_ports vlan3
bridge_stp off
答案1
结论:“systemctl restart networking”(networking.service)不如启动过程那么巧妙。避免将注释与 /etc/network/interfaces 中的配置混在一起,而是将它们放在单独的行中。
典范:请从 apt 升级(netplan.io、nplan 等)中删除“重新启动网络”。升级软件包应始终确保网络安全,而不是因为担心与远程服务器断开连接而延迟升级。
解释:我通过登录物理控制台并执行简单的“ifdown(WAN 接口)”和“ifup(WAN 接口)”来启动并运行远程服务器。问题似乎是 /etc/network/interfaces 包含一个接口,其行末有注释,如下所示:
iface br4 inet static # COMMENT
这导致 apt 升级期间提升网络接口作业失败,如日志中所示(一次运行“systemctl restart networking”时出现数十个错误,类似于第一个错误):
ifup[30436]: /etc/network/interfaces:98: extra parameter for the iface line not understood and ignored: #
systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: networking.service: Failed with result 'exit-code'.
systemd[1]: Failed to start Raise network interfaces.
我假设这意味着 restart networking 多次读取 /etc/network/interfaces,每个接口至少读取一次,并且该过程只关闭了第一个接口,然后它就失败了。这个接口不是带有注释的接口,因此失败事件的顺序有点神秘。
总的来说,我不明白为什么 18.04 会在 apt 升级期间重新启动网络。这对于远程管理来说似乎并不安全。(这也是 12 年来 Ubuntu 服务器首次在升级后导致两天的物理登录行程。)
我也不明白为什么服务器在接口文件中有该注释的情况下可以正常启动,但无法正常升级。应该认为是相同的进程在启动和升级期间执行了相同的操作。
从技术上讲,我没有时间在现场验证从接口文件中删除注释后升级 netplan 是否有效。但我确实设法重现了升级过程中产生的错误,并在控制台上运行重新启动网络时消除了这些错误。换句话说,重新启动网络现在可以正常工作。