dhclient 是部分 Linux 系统提供的 ISC DHCP 客户端。许多现代安装会改由 NetworkManager、systemd-networkd 或其他服务运行自己的 DHCP 客户端。在已管理接口上启动第二个客户端,可能造成相互竞争的地址、路由、DNS 设置和租约状态。
网络配置 · 第 3 课
dhclient
学习何时以及如何使用 dhclient,同时避免与系统网络管理器冲突。
确定活动客户端
调用 dhclient 前,应检查配置所有者和进程:
$ nmcli device status
$ networkctl status
$ ps -ef | grep '[d]hclient'
应使用主机上实际存在的工具。如果某个管理器拥有接口,应通过该管理器请求 DHCP,而不是启动单独的客户端。
为什么要避免在已受管理的接口上启动 dhclient?
显式请求租约
在以 dhclient 为预期所有者的非托管测试接口上,应指定接口并使用详细输出:
$ sudo dhclient -v enp1s0
不指定接口运行时,可能会影响多个符合条件的接口。配置和租约路径因软件包与调用方式而异;常见名称包括 dhclient.conf 和 dhclient.leases,但不要假定固定位置。
手动请求时为什么要指定 enp1s0?
释放租约
dhclient -r INTERFACE 会请求释放租约,并可能移除可用配置。该操作会造成中断,而且不能保证服务器可达并收到释放消息。不要仅仅为了检查租约而释放它,尤其不能在远程管理路径上这样做。
dhclient -r enp1s0 有什么运维风险?
验证已应用租约
完成受控请求后,不能只验证地址:
$ ip address show dev enp1s0
$ ip route show
$ resolvectl status
应检查管理器或客户端日志及租约有效期,再测试预期的名称解析和应用程序。DHCPACK 可能携带错误选项,成功分配地址也不能证明网关或 DNS 可达。
获得租约后应该验证什么?
课程已完成
你已完成 dhclient
现在,你可以只在 dhclient 是接口预期所有者时使用它。
发现活动网络管理器和 DHCP 客户端。
避免一个接口上存在相互竞争的客户端。
将手动请求限制到具名测试接口。
将释放视为中断操作,并验证完整租约结果。