当我没有在 dhclient.conf 中定义主机名时,我的 DHCP 服务器如何知道我的机器的主机名?

当我没有在 dhclient.conf 中定义主机名时,我的 DHCP 服务器如何知道我的机器的主机名?

我正在尝试解决一些与我们网络上的 DHCP 相关的奇怪的 DNS 问题(我怀疑我们目前正在运行多个 DHCP 服务器),在尝试解决这个问题时,我注意到我刚刚设置的新服务器有些奇怪。

有问题的服务器是运行 Ubuntu 9.10 Server 的 Xen 虚拟机。物理 Xen 服务器也在我们的网络上,当我第一次在 Xen 中启动 VM 时(我从我的机器上运行的本地 Virtualbox VM 导入它,它在不同的网络上运行),它从我们的办公室网络获得了 DHCP 租约,一切正常。

我检查了dhclient.eth0.leases文件以查看配置了什么,发现机器之前所在网络的旧 DHCP 租约仍然存在,以及它当前连接到的办公网络的新 DHCP 租约。我立即注意到了两件事:

  1. 来自以前网络的旧 DHCP 租约信息没有一行options host-name,我认为这意味着虚拟机的原始 VirtualBox 版本没有将此选项发送到 DHCP 服务器。或者这是否意味着旧 DHCP 服务器不支持 DHCP 主机名选项?当时它使用的是 VirualBox 的内部 DHCP 服务器...

  2. 新的 DHCP 租约信息options host-name一行包含服务器的正确当前主机名(“fozzie”)。如果我理解正确,这意味着服务器将其主机名发送到我们网络上的 DHCP 服务器。

对于这一切,有很多事情我不明白。

第一的,我没有dhclient.conf对服务器进行任何更改;它使用默认配置。事实上,它逐字逐句地包含以下行:

send host-name "<hostname>"

所以我的第一个问题是,如果配置没有设置为发送,它怎么知道要发送服务器的真实主机名?

第二option host-name,如果我没有触碰过任何配置文件,为什么第一个 DHCP 租约(针对旧网络)不包括,但第二个 DHCP 租约(在新网络上)却包括它?

我所做的只是将原始 VirtualBox 机器导出为 OVF,然后将其导入 XenServer,那么如果它甚至没有配置实际的主机名,它是如何通过 DHCP 神奇地配置我的主机名的dhclient.conf呢?

第三:当我运行 时hostname,服务器返回fozzie.our.domain,但dhclient.eth0.leases表示主机名选项已设置为fozzie(无域)。它如何知道要删除域?

答案1

好的,经过长时间在互联网上搜索并尝试阅读man网页后,我基本上弄清楚了发生了什么:

如果配置没有设置为发送服务器的真实主机名,那么它怎么知道要发送服务器的真实主机名呢?

显然,send host-name "<hostname>",更具体地说,<hostname>在 Ubuntu 上具有特殊意义。它告诉dhclient将您机器的当前主机名发送到 DHCP 服务器。请注意,这是区分大小写的(即,如果您输入<HOSTNAME>,dhclient 会将文字文本发送<HOSTNAME>到 DHCP 服务器)。据报道这里这里,这在 Ubuntu Feisty 及更高版本上运行,作为补丁的一部分,(讽刺的是)修复了dhclient默认情况下不发送机器主机名的问题。

[W]如果我没有触碰过任何配置文件,为什么第一个 DHCP 租约(针对旧网络)不包括选项主机名,而第二个 DHCP 租约(在新网络上)却包含了它?

这似乎是因为并非所有 DHCP 服务器都会将主机名回显给客户端。昨天我们仍然使用基于 Linux 的 ClarkConnect 路由器作为我们的 DHCP 服务器,它将主机名回显给每个客户端。今天我们禁用了该服务器上的 DHCP,并切换到使用主域控制器上的内置 DHCP 服务器。我们从 PDC 获得的 DHCP 租约不包括option host-name这两者,但这似乎不会影响任何事情。机器在 DNS 中得到更新,并且它们都可以通过主机名找到彼此。

当我运行 时hostname,服务器返回fozzie.our.domain,但 dhclient.eth0.leases表示主机名选项已设置为fozzie(无域)。它如何知道要删除域?

这是因为我没有完全理解 DHCP 的复杂性。我们的 DHCP 服务器设置为使用我们的域配置所有客户端。我猜 DHCP 服务器足够聪明,可以从客户端发送的主机名中删除域名部分。

有人对此答案有任何更正或澄清吗?它仍然看起来有点“不合逻辑”,所以我不会照原样接受它。

相关内容