我正在设置运行 Debian 10(Buster)的家庭服务器,但无法将主机名与其 IPv6 地址关联。
我有一个运行 OpenWRT 的路由器,它配置了 dnsmasq 作为 DHCP 服务器和 DNS 服务器。
我希望看到的行为是路由器在成功发出 DHCP 请求后同时拥有服务器的 A 和 AAAA 记录。路由器已成功为服务器分配 IPv4 和 IPv6 地址(它接收 ISP 分配的子网和私有子网的 IPv6 地址)。但是,虽然我能够检索 A 记录,但没有创建 AAAA 记录。
我有一台运行 Arch Linux 的台式机,它的行为符合我的要求,所以我知道这不是路由器的问题。有了这个主机,我可以查找它的 IPv4 和 IPv6 地址:dig @router -t AAAA desktop
返回两个答案,dig @router -t A desktop
返回一个答案。请求 A 记录对服务器的作用相同,但对 AAAA 的作用不同。
我在 中使用了默认值/etc/dhcp/dhclient.conf
。这些设置是:
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
替换send host-name
为 并send fqdn.fqdn
没有改变行为(A 记录存在,AAAA 不存在)。dhcp-options(5)
似乎表明在 中传递除了完全限定域名之外的其他内容是有效的fqdn.fqdn
:
指定客户端希望使用的域名。这可以是完全限定域名,也可以是单个标签。如果名称中没有尾随的“.”字符,则它不是完全限定的,并且服务器通常会在某些本地定义的域中更新该名称。
答案1
替换send host-name
为send fqdn.fqdn
实际上是解决方案,但我认为现有的租约文件导致它在我最初尝试关闭接口然后重新启动时无法正常工作。重新启动后,以下更改解决了该问题:
- send host-name = gethostname();
+ send fqdn.fqdn = gethostname();
答案2
大多数人认为单个实例可以dhclient
处理这两种协议,但查看手册页就会发现:
...-4 使用 DHCPv4 协议获取 IPv4 地址和配置参数。这是默认值,不能与 -6 组合。
-6 使用 DHCPv6 协议获取可用的 IPv6 地址以及配置参数。 不能与 -4 结合。...
甚至网络管理器没有搞清楚这一点。正如正确指出的那样完整限定域名 (FQDN)是强制性的,应发送而不是主机名并且gethostname()
还不够完整限定域名 (FQDN):
send fqdn.fqdn "myhost.at.fully.qualified.domain"
send fqdn.encoded on;
send fqdn.server-update on;
我使用这个配置来让名称注册在两者上工作DHCP服务器实现(林&赢),并运行另一个实例:dhclient -6 ...