我有启用了 DHCP 的适当网络文件。
$ cat /etc/systemd/network/20-dhcp.network
[Match]
Name=enp3*
[Network]
DHCP=ipv4
[DHCP]
UseDomains=true
我也有合适的 /etc/resolv.conf。我没有使用 systemd-resolvd 守护进程(这可能与此无关,因为我试过使用它,但无论如何都没有帮助)。有什么想法为什么需要手动运行 DHCP 客户端才能使其正常工作?
答案1
以防人们不知道 -systemd-networkd
现在包含它自己的内置 DHCP 客户端实现,因此除非在其他地方配置,否则不会启动任何外部 DHCP 客户端。
配置由许多配置文件控制,如systemd-networkd手册页。自 Ubuntu 18.04 起,网络配置 ( /{lib,etc,run}/netplan/*.yaml
) 现在由网络计划这将为 systemd-networkd 生成配置文件(/{lib,etc,run}/systemd/network/
)。
具体来说,DHCP 客户端操作由systemd.网络配置文件 - 可以使用指令(默认为“否”)在[NETWORK]
配置文件的部分中启用它并配置部分。请注意,也可以启用 DHCPServer 模式,但这通常与 DHCP 客户端模式互斥。DHCP
[DHCP]
答案2
从阅读来看man systemd.network
,听起来.network
中的文件/etc/systemd/network
是由 控制的systemd-networkd
。如果没有读取文件,则可能是您没有使用 的这一部分systemd
。
例如,在 Ubuntu 16.04 桌面上,我可以看到systemd-networkd
未被使用:
systemctl status systemd-networkd
● systemd-networkd.service - 网络服务 已加载:已加载(/lib/systemd/system/systemd-networkd.service;已禁用;供应商预设:已启用) 活动:未活动(已停止) 文档:man:systemd-networkd.service(8)
相反,NetworkManager
服务正在运行。因此,在这种情况下,需要通过 NetworkManager 配置 DHCP 客户端,或者需要停止并禁用 NetworkManager,然后systemd-networkd
启动并启用它。
答案3
事实证明我有两个网络文件。我按照 arch linux systemd-networkd 文档 (https://wiki.archlinux.org/index.php/systemd-networkd#Wireless_adapter),并创建一个网络文件:
/etc/systemd/network/25-wireless.network
[Match]
Name=wlp2s0
[Network]
DHCP=ipv4
而且它正在发挥作用。