首先,请原谅我的无知,因为我仍在适应使用 DNS。我是网络新手。
基本问题: 如何确定 DNS 记录的来源?或者,更准确的说法是:如何确定网络上的哪个位置将主机名转换为 IP?
具体内容:
- Actiontek MI424WR-GEN3I(作为 FiOS 服务的一部分提供)
- 运行 OS X Yosemite 的 MacBookPro
- VMWare Fusion
- 在 VMWare 虚拟机上运行的 Ubuntu 14 Server
设想: 我在运行 OS X Yosemite 的 Mac 上,在 VMWare 虚拟机中运行 Ubuntu 14。我正在学习如何设置 Drupal 网站(与问题没有特别相关),并且我在 Ubuntu 服务器上设置了虚拟主机。作为一个循序渐进的过程,我首先在主机文件中创建了一个条目:192.168.1.22 cwb1.local
这很有效,所以我更大胆一点,删除了这个 hosts 文件条目,并在路由器上创建了一个 DNS 条目,将主机名 cwb1.local 指向 IP 192.168.1.22。这似乎也很好用。奇怪的是,我后来删除了这个 DNS 条目,现在据我所知,没有记录将此主机名和 IP 相互关联,但发生了两件奇怪的事情:
- 我可以 ping 主机名并成功返回 IP
- 我可以导航到http://cwb1.local在我的浏览器中并访问我的 Drupal 网站。
我已经清除了浏览器的缓存,并在我的 Mac 上运行了 dscacheutil -flushcache,甚至重置了我的服务器,但我仍然无法确定我的 Mac 如何/为何知道将此主机名和 IP 关联在一起。
诊断: * 注意,运行此服务器的虚拟机在我的路由器的 DHCP 连接中列为“ubuntu”
MAC:~ me$ nslookup 192.168.1.22
Server: 192.168.1.1
Address: 192.168.1.1#53
22.1.168.192.in-addr.arpa name = ubuntu.home.
MAC:~ me$ nslookup cwb1.local
Server: 192.168.1.1
Address: 192.168.1.1#53
** server can't find cwb1.local: NXDOMAIN
MAC:~ me$ dig cwb1.local
; <<>> DiG 9.8.3-P1 <<>> cwb1.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 53342
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;cwb1.local. IN A
;; Query time: 49 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Jan 17 20:53:36 2015
;; MSG SIZE rcvd: 28
MAC:~ me$ dig 192.168.1.22
; <<>> DiG 9.8.3-P1 <<>> 192.168.1.22
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60811
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;192.168.1.22. IN A
;; AUTHORITY SECTION:
. 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2015011701 1800 900 604800 86400
;; Query time: 50 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Jan 17 21:01:59 2015
;; MSG SIZE rcvd: 105
/etc/apache2/sites-available/html.conf 的内容
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName drupal7
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName cwb1.local
ServerAlias cwb1.local *.cwb1.local
</VirtualHost>
有人可以给我一些指导吗?
编辑 在 Romeo 的评论之后,我重新查看了我的 /etc/hosts 文件并尝试了一些方法:我为 cwb1.local 添加了一条新条目,该条目不在我的网络上 (192.168.1.23) 中。ping cwb1.local 时,它解析为 192.168.1.23(符合预期),并且每个请求都超时(也符合预期)。有趣的是,我从我的 /etc/hosts 文件中删除了此条目,然后运行:
- dscacheutil-刷新缓存
- sudo discoveryutil mdnsflushcache
- sudo discoveryutil udnsflushcaches
仍然得到相同的结果:主机名解析,但数据包超时。
那么,我的 Mac 是否也在其他地方传播/镜像此信息?或者是否存在某种未使用上述缓存清除命令清除的缓冲区?
编辑2 因此,重新启动后,主机名记录似乎终于消失了。这非常有力地表明幻影记录存储在我的 Mac 上。但在重新启动之前,这个幻影 DNS 记录存储在哪里/如何存储?我如何确保将来无需重新启动即可获得准确的 DNS 信息?
再次感谢所有能够提供见解的人!
答案1
Yosemite 更改了刷新 DNS 的命令:
sudo discoveryutil mdnsflushcache
sudo discoveryutil udnsflushcaches
根据https://discussions.apple.com/message/27173761?ac_cid=op123456#27173761,现在所有 .local 域名都通过 mdns/Bonjour 进行专门解析。由于 Ubuntu 默认启用 mdns/avahi-daemon,因此您可能根本不会访问 DNS 服务器。
您可以暂时禁用此功能,service avahi-daemon stop
看看是否能解决问题。请参阅https://askubuntu.com/questions/205937/how-can-i-disable-avahi-daemon