Я использую Ubuntu 12.04. В моей рабочей сети есть адрес из одного слова (назовем его foobar
), который отвечает на эхо-запросы и HTTP-запросы только с моей машины . Адрес не является TLD, а просто общим сокращением, связанным с проектом.
Указанный адрес не должен отвечать : в моем файле / etc / hosts
нет записи foobar. Нет ссылки на foobar
в apache 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
перестает разрешаться, но если я перезапускаю свой компьютер, он снова разрешается
Pinging foobar
получает ответ от foobar.redhibited.mycompany .com
, реальный адрес, который отлично работает на других машинах, кроме моей. Tracerouting или mtr
'ing foobar
показывает 5 переходов до места назначения, так же, как tracerouting или mtr'ing foobar.redhibited.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 ничего не меняет. Этого не происходит на двух других машинах коллег, которые я тестировал в той же подсети .
Как вы знаете, вся клиентская часть системы доменных имен совершенно произвольна; по соглашению программы должны проходить через системную библиотеку C для разрешения имен хостов, но технически они могут полностью обойти этот механизм, если захотят, либо отправляя свою собственную библиотеку C (статически скомпилированную или иным образом), либо используя полностью настраиваемый поиск DNS система, которая использует или не использует протокол DNS.
Предполагая стандартную установку Ubuntu, запуск программ, связанных с библиотекой системы C, вы получаете eglibc (который является второстепенным форком GNU libc) и путь по умолчанию к файлу, который сообщает gethostbyname () и другие Функция разрешения DNS библиотеки C: какой 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
.