我正在运行 Ubuntu 12.04。在我的工作网络上,有一个单词地址(我们称之为foobar
)正在响应 ping 和 HTTP 请求,仅来自我的机器。该地址不是 TLD,只是通用的、与项目相关的缩写。
所述地址不应该响应:我的文件中没有 foobar 条目。apache的或 中/etc/hosts
没有对 的引用,我的文件中也没有,如下所示:foobar
httpd.conf
sites-available
sites-enabled
resolv.conf
nameserver 127.0.0.1
search redacted.mycompany.com
起初我以为它重定向到localhost
,但如果我在浏览器上打开它,它会显示 nginx 欢迎页面,并且我在我的机器上运行着 apache。
嗅探lo
并eth0
显示流量确实来自网络。重新启动resolvconf
服务并不能解决问题。如果我运行:
service resolvconf stop
resolvconf --wipe-runtime-directories
service resolvconf start
然后foobar
停止解析,但如果我重新启动机器,它就会再次解析
Pingfoobar
会得到来自 的回复foobar.redacted.mycompany.com
,这是一个真实地址,除了我自己的机器外,其他机器都可以正常使用。Tracerouting 或mtr
'ingfoobar
显示距离目的地有 5 个跳数,与 tracerouting 或 mtr'ing 相同foobar.redacted.mycompany.com
。
以下是该命令的输出dig foobar
:
; <<>> DiG 9.8.1-P1 <<>> foobar
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 52484
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;foobar. IN A
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Mar 8 14:32:02 2013
;; MSG SIZE rcvd: 22
此问题在 Firefox (19.0) 和 Chrome (24.0.1312.56-0ubuntu0.12.04.1) 上均有发生。按下CTRL+F5不会改变任何内容。我在同一子网上测试过的其他两台同事的机器上没有发生这种情况。
答案1
您要知道,域名系统的整个客户端是完全任意的;按照惯例,程序应该通过系统的 C 库来解析主机名,但从技术上讲,如果它们愿意,它们可以完全绕过该机制,要么通过运送自己的 C 库(静态编译或其他方式),要么使用完全自定义的 DNS 查找系统(使用或不使用 DNS 协议)。
假设一个标准的 Ubuntu 安装,运行链接到系统 C 库的程序,你有 eglibc(它是 GNU libc 的一个小分支),并且告诉 gethostbyname() 和其他 C 库 DNS 解析函数要访问哪个 DNS 服务器的文件的默认路径是 /etc/resolv.conf。
nameserver 127.0.0.1
表示“使用 DNS 协议向 127.0.0.1 询问有关 DNS 查询的信息”——我假设您有一个本地缓存 DNS 服务器,出于性能原因,它会转发到上游 DNS 服务器,例如dnsmasq
或bind
(执行 DNS 查询时,在您自己的计算机上查询服务器要比访问网络快得多!)
search redacted.mycompany.com
意思是“当尝试解析 foo 时,如果它不能直接解析,则在末尾添加字符串 .redacted.mycompany.com 并重试;如果有效,则返回该结果”。
我认为这是“设计使然”的,但我不知道为什么它不能在同事的机器上运行,除非他们没有这条线路search
。