我最近发现一台正常运行的服务器出现了问题。该服务器在过去几个月内进行了更新,因此从“一切正常”到今天之间可能已经发生了变化。
此服务器托管一个dnsmasq
提供 DHCP 和 DNS 服务的服务器:
- 服务器本身
- 该服务器上运行的一组容器(每个容器都有从该服务器接收的自己的 IP
dnsmasq
) - LAN 中的客户端(有线、无线)
我今天意识到当我重新启动服务器时:
- 客户端无法再解析名称(
Ping request could not find host google.com. Please check the name and try again.
例如在 Windows 系统上) - 其中一个容器中的服务器
nginx
在启动时崩溃,无法解析名称
奇怪之处:
dnsmasq
在服务器上运行并解析该服务器的名称(# ping google.com
在服务器内部运行良好)- 重新启动
dnsmasq
可解决所有问题:所有客户端现在都可以解析名称 - 至少对于容器来说,它们拥有 IP 地址这一事实意味着
dnsmasq
向它们提供了该地址以及 DNS 服务器信息(=其本身)。
我的主要问题是:为什么重新启动就能dnsmasq
解决客户端分辨率不足的问题?它正在为服务器工作,客户端和服务器之间的通信没有受到阻碍(即使受到阻碍,重新启动也无法解决dnsmasq
这个问题)。
我唯一的想法是,也许,dnsmasq
启动时所有接口都不可用。这很牵强,但也许吧。有没有办法检查dnsmasq
绑定到哪些接口?(netstat
或者lsof
只会显示出来*.53
,所以没有帮助)
由于另一个原因,上述想法似乎不正确:容器从 接收它们的 IP dnsmasq
,因此,既然它们有一个 IP,dnsmasq
就必须绑定到它们的接口。