MAAS 节点无法解析自己的主机名

MAAS 节点无法解析自己的主机名

我已经部署了一个 MAAS 区域/机架服务器,主 eth 接口连接到 WAN,另一个通过连接到交换机使用 iptables作为我的 MAAS-vlan,并配置了 DHCP。

我发现自己无法从我的两台机器(具有不同的硬件)获取存储信息,经过几个小时的挖掘,我发现名称解析存在一些错误,并且节点在调试时无法解析自己的主机名,这也使调试过程非常漫长,因为它大部分时间都在等待名称解析超时。(这是一个猜测,但在我成功登录到框后,ping golden-moose需要大约 10 秒然后抛出“未知主机”错误)

调试00-maas-07-block-devices.err输出内容如下:

sudo: unable to resolve host golden-moose: Connection timed out
sudo: unable to resolve host golden-moose: Connection timed out
sudo: unable to resolve host golden-moose: Connection timed out
sudo: unable to resolve host golden-moose: Connection timed out

我正在使用 MAAS 版本 2.1.1+bzr5544-0ubuntu1 (16.04.1),不确定如何调试这个问题,请帮忙,谢谢。

DNS 服务似乎运行正常,节点能够解析外部主机和 .maas 域。

更新

我已经将 MAAS 更新到 2.1.3,问题依然存在。登录调试节点(通过“允许 SSH 访问并防止机器关闭”选项)后,我发现该节点只能 ping 附加了“.maas”的主机名。这意味着域名设置不正确。

$ hostname -f
hostname: Name or service not known

$ domainname
(none)

iptables 规则似乎运行良好。以下命令均打印合理的输出(数据包计数不为零)

$ sudo iptables -t raw -L -n -v
Chain PREROUTING (policy ACCEPT 645K packets, 185M bytes)
Chain OUTPUT (policy ACCEPT 411K packets, 1140M bytes)

$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 73538 packets, 11M bytes)
Chain INPUT (policy ACCEPT 62414 packets, 9009K bytes)
Chain OUTPUT (policy ACCEPT 6585 packets, 493K bytes)
Chain POSTROUTING (policy ACCEPT 360 packets, 54084 bytes)

$ sudo iptables -t filter -L -n -v
Chain INPUT (policy ACCEPT 1772K packets, 875M bytes)
Chain FORWARD (policy DROP 694 packets, 185K bytes)
Chain OUTPUT (policy ACCEPT 1033K packets, 2318M bytes)

更新 - DNS 转储

使用 tcpdump 工具我跟踪了节点的 DNS 查询。

典型的节点主机名查询sudo如下所示(两次):

11:48:02.836710 IP (tos 0x0, ttl 64, id 53634, offset 0, flags [DF], proto UDP (17), length 57)
    <node-ip>.35343 > <maas-ip>.53: [udp sum ok] 8298+ A? pure-mammal. (29)
11:48:02.836750 IP (tos 0x0, ttl 64, id 53635, offset 0, flags [DF], proto UDP (17), length 57)
    <node-ip>.35343 > <maas-ip>.53: [udp sum ok] 36815+ AAAA? pure-mammal. (29)
11:48:02.836938 IP (tos 0x0, ttl 64, id 40343, offset 0, flags [none], proto UDP (17), length 132)
    <maas-ip>.53 > <node-ip>.35343: [bad udp cksum 0x71e4 -> 0x8095!] 36815 NXDomain q: AAAA? pure-mammal. 0/1/0 ns: . [2h34m56s] SOA a.root-servers.net. nstld.verisign-grs.com. 2017012101 1800 900 604800 86400 (104)
11:48:02.836945 IP (tos 0x0, ttl 64, id 40461, offset 0, flags [none], proto UDP (17), length 132)
    <maas-ip>.53 > <node-ip>.35343: [bad udp cksum 0x71e4 -> 0x0afb!] 8298 NXDomain q: A? pure-mammal. 0/1/0 ns: . [2h34m56s] SOA a.root-servers.net. nstld.verisign-grs.com. 2017012101 1800 900 604800 86400 (104)

虽然我注意到了[bad udp cksum]一点,但我后来检查发现它并没有影响节点的结果。

来自调试节点的 pure-mammal.maas 的 dig 调用将导致日志:

11:50:57.723037 IP (tos 0x0, ttl 64, id 24007, offset 0, flags [none], proto UDP (17), length 73)
    <node-ip>.53704 > <maas-ip>.53: [udp sum ok] 5376+ [1au] A? pure-mammal.maas. ar: . OPT UDPsize=4096 (45)
11:50:57.723321 IP (tos 0x0, ttl 64, id 5403, offset 0, flags [none], proto UDP (17), length 119)
    <maas-ip>.53 > <node-ip>.53704: [bad udp cksum 0x71d7 -> 0x8af0!] 5376* q: A? pure-mammal.maas. 1/1/2 pure-mammal.maas. [30s] A <node-ip> ns: maas. [30s] NS maas. ar: maas. [30s] A <maas-ip>, . OPT UDPsize=4096 (91)

此调用导致从节点产生有效的 dig 输出。

最终更新和结论

虽然主机名问题确实存在,但导致没有存储配置的问题却完全不同。

经过几个小时的检查和@mpontillo的大量建议,我终于完成了调试工作。令人惊讶的是3个调试选项中的2个,即“保留网络配置”和“保留存储配置”。我每次都检查这2个,因为我认为它们是“保留”来自节点的信息。取消选中这些后,存储配置被正确读取。

答案1

在调试期间,resolv.conf 只有一个名称服务器。当我们部署时,它有一个完整的搜索列表,当然,机器的名称在前面。

在调试期间,机器被告知其 DNSDOMAIN,但似乎该域没有进入 /etc/resolv.conf

我已经提交错误 1658750对于这个问题。

为了清楚起见,sudo 无法解析名称只会导致打印该警告消息:它不执行任何其他操作,sudo 会执行您指示的操作。(它试图获取主机名,以便可以将其与 sudoers 中的任何主机锁定规则进行比较,但实际上没有。)

答案2

首先,我建议您更新到 MAAS 2.1.3(可在 中找到)xenial-updates,然后再次尝试调试。这将排除任何已知问题。

考虑到这个问题,这个Connection timed out消息是我最担心的。这意味着您没有收到来自 DNS 服务器的响应,所以我认为这个问题很可能是 DNS 连接问题。为了解决这个问题,我们可能需要在您的双宿主 MAAS 服务器上查看以下命令的输出:

sudo iptables -t raw -L -n -v
sudo iptables -t nat -L -n -v
sudo iptables -t filter -L -n -v

如果防火墙规则看起来不错,我将通过使用选项调试节点来排除故障Allow SSH access and prevent machine from powering off。然后通过 SSH 登录并使用dig $(hostname -f)来验证您是否可以从调试节点本身解析主机。您也可以尝试host $(hostname),这将测试搜索路径是否正常工作。

然后,我会检查/etc/bind/maas/named.conf.maasMAAS 服务器,以确保您尝试访问 MAAS 的网络位于受信任网络列表中。(MAAS 应该自动更新此 ACL。)

最后,检查 MAAS 服务器上的系统日志以确保一切正常,例如grep named /var/log/syslog

有点相关的是错误 #1087183,其中谈到了标准 Ubuntu 安装在 中添加一行主机名/etc/hosts,但在 MAAS 中这导致了问题,因此 MAAS 必须依赖 DNS。

相关内容