我如何找出错误的本地 dns 结果来自哪里?

Nic*_*ick 6 networking dns debian dig

我正在运行薄荷伴侣 17.2。

当我使用dig时,对于某个特定的域名,解析出的IP“应答”是错误的,应答服务器是127.0.0.1.

尝试通过 ssh、Web 浏览器等从我的本地计算机访问此域也解析为错误的 IP。

使用在线工具或其他计算机进行 DNS 查找工作正常。

本地机器上的某些东西正在拦截请求并返回错误的缓存结果。我查看了各种缓存程序,但我认为我没有安装或配置任何缓存程序。

返回的 IP 地址是旧 IP,并且主 DNS 记录在一年前更改。

如何确定哪个程序在本地拦截 DNS 并禁用它,以便我可以在我的计算机上正确解析此域?

/etc/resolv.conf:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
Run Code Online (Sandbox Code Playgroud)

Rui*_*iro 6

Resolvconf 将其指向在本地机器的端口 53 中运行的本地软件。

找出哪一个:

sudo netstat -anlp | grep :53
Run Code Online (Sandbox Code Playgroud)

正如我们所发现的,它是 avahi 守护进程。

要跟踪 DNS 解析,以下命令也很有用:

dig +trace www.cnn.com
Run Code Online (Sandbox Code Playgroud)

如果您想自己控制 DNS 设置,特别是在服务器情况下(我注意到您说的是 Mint),我建议您取消 resolvconf

您可以使用以下命令卸载它:

dpkg --purge resolvconf
Run Code Online (Sandbox Code Playgroud)

然后,如果您通过 DHCP 获得 IP,请保持原样,否则在 /etc/resolv.conf 中填写您的 DNS 服务器。

如果您对 mDNS 解析或公司网络不感兴趣,我建议您卸载 avahi。

在桌面设置中,建议重新启动或重新启动所有服务。我至少会用service networking restart.

Avahi mDNS/DNS-SD 守护进程实现了 Apple 的 Zeroconf 架构(也称为“Rendezvous”或“Bonjour”)。该守护进程使用 mDNS/DNS-SD 注册本地 IP 地址和静态服务,并为本地程序提供两个 IPC API,以利用 avahi-daemon 维护的 mDNS 记录缓存。

在工作环境中,在宣布 mDNS 记录的网络级服务器/工作站上进行跟进可能也很有趣,如果它们是绝对必要的。我敢打赌,某些丢失的主机文件或某些旧的服务器设置正在通过 mDNS 传播您的旧 IP 地址。

您还可以使用以下命令侦听本地网络 mDNS 数据包:

sudo tcpdump -n udp port 5353
Run Code Online (Sandbox Code Playgroud)

来自mDNS

多播域名系统 (mDNS) 将主机名解析为不包括本地名称服务器的小型网络中的 IP 地址。它是一种零配置服务,使用与单播域名系统 (DNS) 基本相同的编程接口、数据包格式和操作语义。尽管 Stuart Cheshire 将 mDNS 设计为具有独立功能,但它可以与单播 DNS 服务器协同工作。

  • 谢谢你的帮助。错误条目来自路由器,该路由器内置了自己的 DNS 服务器。一旦我在计算机上禁用了 resolvconf,dig 就会显示路由器的 IP,而不是环回 IP 作为错误记录的来源。遗憾的是,resolvconf 向 dig 隐藏了记录的真实来源。 (2认同)