我有一些刚刚安装好的 Ubuntu 22.04 服务器。其中一个已经在运行 22.04.1,今天刚安装。
他们都遇到了这样的问题:“启动作业正在运行,等待网络配置”在启动时挂起 2 分钟。
网络配置很简单,下面是其中一个服务器的配置/etc/netplan/00-installer-config.yaml
:
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
addresses:
- 192.168.5.20/24
gateway4: 192.168.5.2
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
search: []
version: 2
的输出为systemctl show -p WantedBy network-online.target
:
WantedBy=cloud-final.service cloud-config.service open-iscsi.service iscsid.service
我无法通过 syslog 或 dmesg 识别哪个服务或哪个接口(只有一个)导致了该问题。
我该如何解决这个问题?这是 22.04 中的一个错误吗?
更新
我发现问题是由于我们在服务器上完全阻止了 IPv6,如下所示iptables
:
sudo ip6tables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
623 43589 ACCEPT all lo any anywhere anywhere
0 0 REJECT all any any anywhere anywhere reject-with icmp6-port-unreachable
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
623 43589 ACCEPT all any lo anywhere anywhere
92 5504 REJECT all any any anywhere anywhere reject-with icmp6-port-unreachable
我在 Github 上发现了一个讨论此问题的问题:https://github.com/systemd/systemd/issues/2713 但好像没有真正的解决办法?
答案1
编辑systemd-networkd-wait-online.service
sudo vim /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service
在[Service]
块中:
从
[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes
到
[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes
TimeoutStartSec=2sec
然后重启,即可得到验证。
答案2
您的问题是systemd-networkd-wait-online.service
超时。 可以通过在主机上运行以下命令来重现此问题:
sudo /usr/lib/systemd/systemd-networkd-wait-online
它永远不会结束。
您还可以看到networkctl
接口配置不正确:
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 ens33 ether routable unconfigured <--- should be "configured"
由于这似乎与防火墙有关,很可能是因为接口无法发送任何 IPv6 autoconf 消息,因此从未被视为正确配置。
您可以通过 (1) 删除 netplan 配置中的任何链接本地地址来解决这个问题,如下所示:
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
addresses:
- 192.168.5.20/24
gateway4: 192.168.5.2
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
search: []
link-local: [] <- IPv6 usually has a default link-local address, we override this
version: 2
(2)在防火墙中启用 autoconf 数据包以离开主机,或者
(3)禁用接口的 autoconfhttps://superuser.com/questions/33196/how-to-disable-autoconfiguration-on-ipv6-in-linux
答案3
看来我可以通过禁用以下服务轻松解决这个问题:
sudo systemctl disable cloud-init.service cloud-final.service
当我配置了静态 IP 时,我不需要它们。我假设 DHCP 也不需要cloud-init
,我会测试一下。
更新
这实际上不起作用。我在初始测试中犯了一个错误。即禁用服务没有帮助,2 分钟的挂起仍然发生。
此外,我混淆了cloud-init
和cloud-config
。我还尝试禁用cloud-config
,但这也无济于事。但它导致启动时出现其他错误。
我尝试通过sysctl.conf
如下方式完全禁用 IPv6:https://itsfoss.com/disable-ipv6-ubuntu-linux/
但这也没有帮助。
所以我很迷茫,希望论坛里有人能提供建议?