我想获取.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
设置动态写入。