本地 (127.0.1.1) DNS 解析器忽略 LAN DNS 服务器

本地 (127.0.1.1) DNS 解析器忽略 LAN DNS 服务器

我已经配置了一台计算机作为我的 LAN 的 DNS 服务器(大致如下本指南)。我的主要动机是能够使用 URL 而不是 IP 访问我的计算机和设备。

它工作正常并且转发正常,因为我能够正确解析我自己的名字:

➜  ~ nslookup router.casa 192.168.1.5
Server:     192.168.1.5
Address:    192.168.1.5#53

Name:   router.casa
Address: 192.168.1.1

和外部的:

➜  ~ nslookup google.com 192.168.1.5
Server:     192.168.1.5
Address:    192.168.1.5#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.28.174

192.168.1.5您可能已经发现, 是 DNS 服务器地址)

然后,我设置了 DHCP 服务器(Linksys 路由器)192.168.1.5作为主要 DNS 地址,然后是 Google 地址。这是因为我希望我的设备即使在本地 DNS 服务器关闭的情况下也能够解析名称。这似乎也有效,或者至少在我这样做时在任何电脑上都能正确反映

➜  ~ nmcli dev show | grep DNS
IP4.DNS[1]:                             192.168.1.5
IP4.DNS[2]:                             8.8.8.8
IP4.DNS[3]:                             8.8.4.4

但是,普通nslookup查询(没有显式 DNS 地址)不起作用:

➜  ~ nslookup router.casa
Server:     127.0.1.1
Address:    127.0.1.1#53

** server can't find router.casa: NXDOMAIN

在阅读了许多 SuperUser、Unix & Linux 和 AskUbuntu 问题后,我现在知道这个127.0.1.1地址类似于默认情况下设置的本地 DNS 缓存resolvconf,它在我的发行版 (Mint) 中已预先配置。有效地:

➜  ~ cat /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

我读过许多(已接受的)解决方案,推荐一些手动补丁(或者编辑 resolv.conf 基本文件,完全删除resolvconf, ETC。)。但是,我希望任何来宾设备都能够使用本地名称,并且我真的不想编辑整个 LAN 设置(某些设备不是我的)。

有没有办法配置 DNS 服务器和/或 DHCP,这样我就不必手动编辑所有 PC 和设备的设置?

另外,作为一个附带问题,为什么这个 127.0.1.1 服务器忽略第一个 DNS 地址?nslookup即使我从 DNS 服务器使用它也会失败:

➜  ~ nslookup router.casa 127.0.0.1
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   router.casa
Address: 192.168.1.1

➜  ~ nslookup router.casa 127.0.1.1
Server:     127.0.1.1
Address:    127.0.1.1#53

** server can't find router.casa: NXDOMAIN

更有用的输出:

➜  ~ sudo netstat -tulpn | grep 127.0.1.1
tcp        0      0 127.0.1.1:53            0.0.0.0:*               ESCUCHAR    1489/dnsmasq    
udp        0      0 127.0.1.1:53            0.0.0.0:*                           1489/dnsmasq    

答案1

127.0.1.1条目很可能放置在那里,dnsmasq它是一个本地守护进程,用于提供(最重要的是缓存)dns 和 dhcp。可以将 NetworkManager 配置为不运行 dnsmasq,如下所示:编辑文件并通过在行开头放置 来/etc/NetworkManager/NetworkManager.conf注释掉该行。dns=dnsmasq#

sudo nano /etc/NetworkManager/NetworkManager.conf

现在重新启动网络管理器:

sudo service network-manager restart

接下来检查该127.0.1.1条目是否已从路由器中消失/etc/resolv.conf并替换为从路由器获取的条目。

相关内容