这是用例:
服务器 A 的主机名是“server_a”。
服务器 B 上的用户可以使用其主机名 ping 服务器 A:
ping server_a
服务器 A 重新启动并获取新 IP。
现在,服务器 B 上的用户无法再使用主机名 ping 服务器 A,因为“server_a”仍然映射到已弃用的 IP。
在服务器 A 和服务器 B 上是否可以执行任何操作来请求 DHCP 更新映射?
答案1
首先,你确定服务器B从DNS获取到的IP是错误的吗?它可能有本地 DNS 缓存,这可能会导致已弃用的信息持续存在。
某些版本的nscd
(名称服务器缓存守护程序)可能具有以每个用户为基础刷新 DNS 缓存的选项:nscd -I hosts
。如果这不起作用,您可能需要以 root 身份运行一些命令:
- 如果
systemd-resolved.service
正在使用,命令将是systemd-resolve --flush-caches
- 如果系统正在使用
nscd
或unscd
,并且上述每用户命令不起作用,nscd -i hosts
则会在系统范围内刷新其 DNS 缓存。 - 如果系统将 ISC BIND 配置为缓存解析器,
rndc flush
则将是刷新缓存的命令。
甚至可能根本没有 DNS 服务器:主机名解析可能依赖于 mDNS(多播 DNS)Zeroconf/Avahi/Bonjour 功能。在服务器 B 上,ping server_a.local
如果在/etc/nsswitch.conf
.
如果您确定已弃用的信息实际上来自 DNS 服务器(即您已使用nslookup
或dig
明确查询该 DNS 服务器并且它已回复错误的 IP 地址),那么下一个问题将是:DNS 注册应该如何进行更新?
有几种选择。 DHCP 服务器可能配置为更新正向和反向 DNS 记录;或者它可能被配置为仅更新反向 DNS 记录,并让客户端执行自己的正向记录(就像 Windows AD 域默认执行的操作,使用其域成员身份凭据发出安全的 DNS 更新请求),或者 DHCP服务器可能允许 DHCP 客户端使用 DHCP 选项指定是否要为其完成 DNS 更新。
或者,如果 DNS 服务器管理员没有与 DHCP 服务器管理员协调,则可能根本没有自动 DNS 更新,所有 DNS 信息实际上都是手动更新的。显然,这在启用 DHCP 的网络中不是理想的情况,但如果有大量可用的 IP 地址,则可能会工作得非常好,因为 DHCP 客户端和服务器都会尝试保留任何先前分配的 IP 地址在网络上使用。如果可能的话,同一主机。
(有时,互联网服务提供商的 DHCP 服务器会故意破坏此功能,以阻止用户依赖 IP 地址保持不变,除非制定指定静态 IP 地址的额外费用服务协议。)
如果 DNS 信息先前已根据匹配 DHCP 自动更新,则默认假设是这应该仍然有效。
您可以尝试检查 DHCP 客户端的设置,以验证它是否设置了必要的 DHCP 选项来请求 DHCP 服务器执行 DNS 更新,然后禁用并重新启用服务器 A 上的网络接口。
如果您的系统正在使用 NetworkManager,请使用nmcli c show <connection name>
查看您正在使用的连接的所有设置:为了将主机名传递到 DHCP 服务器,或者ipv4.dhcp-hostname
或ipv4.dhcp-fqdn
应该设置为启用(互斥)ipv4.dhcp-send-hostname
,并且ipv4.dhcp-hostname-flags
应该具有默认值 0 或值 3 以显式设置 NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) 和 NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) 标志。
如果您不使用 NetworkManager,请参阅 DHCP 客户端的文档,了解如何使用该特定 DHCP 客户端设置 DHCP 主机名/fqdn/DNSupdate 选项。