dnsmasq 无法将 .local 地址指向 127.0.0.1

dnsmasq 无法将 .local 地址指向 127.0.0.1

我想获取.local指向的地址(例如 test.local)127.0.0.1,但它不起作用。我使用的是最新版 Ubuntu。在 /etc/NetworkManager/NetworkManager.conf 中,我注释掉了,dns=dnsmasq然后执行了sudo service network-manager restart

然后我安装了 dnsmasq,并address=/local/127.0.0.1在 /etc/dnsmasq.d/mycustomfile 中添加了sudo service dnsmasq restart。除了我提到的之外,我没有做任何其他更改。

但是当我访问 test.local 时,它无法解析为 127.0.0.1,对该 .local 地址执行 ping 也无法成功。也许内容/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 222.11.22.36
nameserver 222.11.22.37

这是我以非守护进程方式运行 dnsmasq 时的输出:

$ sudo dnsmasq --no-daemon     
dnsmasq: started, version 2.68 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth
dnsmasq: reading /etc/resolv.conf
dnsmasq: using nameserver 222.11.22.37#53
dnsmasq: using nameserver 222.11.22.36#53
dnsmasq: read /etc/hosts - 9 addresses

当 dnsmasq 运行时,/etc/resolv.conf 会自动更新(当 dnsmasq 停止时,会恢复到上面的条目):

# 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.0.1

和这个:

$ sudo nslookup test.local 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   test.local
Address: 127.0.0.1

但对本地主机进行 ping 操作仍然不起作用。

我需要做什么才能使 dnsmasq 解析 .local 地址?

答案1

local似乎是某种保留关键字,至少在 Ubuntu 上是这样:

  • address=/local/127.0.0.1-- 不起作用。
  • address=/loc/127.0.0.1—— 有效。

答案2

看起来 dnsmasq 已正确启动。您应该测试 dnsmasq 是否能正确使用nslookup test.local 127.0.0.1

为了确保系统正在使用 dnsmasq,您必须更新以作为第一个选项/etc/resolv.conf使用nameserver 127.0.0.1

您还可以在 dnsmasq 上使用自定义上游解析器配置--resolv-file=/etc/resolv.conf.dnsmasq

答案3

avahi-daemon 可能正在使用域“local”。请参阅:

https://unix.stackexchange.com/questions/352237/avahi-daemon-and-local-domain-issues

答案4

如果您想要的只是指向您自己的机器,而不是尝试使用 dnsmasq 来控制其他计算机的 DNS 解析,那么您实际上只需要在 中添加一些条目/etc/hosts。我建议您撤消对 dnsmasq 及其设置的所有更改,并确保/etc/hosts顶部有以下内容:

127.0.0.1 localhost
127.0.1.1 mycomputername mycomputername.local anothername.local

此后,ping mycomputername.local 将指向您自己(实际上,将指向在 127.0.1.1 上运行的 dnsmasq 服务器,然后指向 localhost)。您甚至可以为网络上的其他计算机添加条目,这样,在这台机器上,您就会看到这些计算机可以被引用为computer1.local computer2.local等。

192.168.1.31 computer1.local
192.168.1.32 computer2.local

如果您似乎无法使用 dnsmasq 撤消更改,那么您可以在之后添加这些附加条目localhost,但不要删除或更改localhost条目本身。因此像这样:

127.0.0.1 localhost mycomputername mycomputername.local anothername.local

顺便说一句:在 Ubuntu 桌面上修改 resolv.conf 的正确方法是使用任务栏中的网络管理器。在 Ubuntu 服务器中,正确的方法是dns-nameserver在网络设备下添加条目,/etc/network/interfaces然后重新启动或执行ifdown eth0 && ifup eth0。正如警告中/etc/resolv.conf所述,不要直接修改它,它会根据/etc/network/interfaces设置动态写入。

相关内容