На арендованном VPS была обнаружена достаточно интересная особенность системного резолвера — автоматическое добавление зоны .ORG для любых несуществующих доменов с последующим возвратом адреса. В этой статье мы подробно рассмотрим причину такого поведения и приведём решение.
Для примеров будем использовать заведомо несуществующий домен unknown-host-abcdefg-test.su. Вывод dig для этого домена:
[vitaly@localhost ~]$ dig unknown-host-abcdefg-test.su ; <<>> DiG 9.9.3-rl.13207.22-P2-RedHat-9.9.3-5.P2.fc19 <<>> unknown-host-abcdefg-test.su ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 14906 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;unknown-host-abcdefg-test.su. IN A ;; AUTHORITY SECTION: su. 1800 IN SOA a.dns.ripn.net. hostmaster.ripn.net. 650153756 86400 14400 2592000 3600 ;; Query time: 85 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Sep 23 12:25:10 2013 ;; MSG SIZE rcvd: 118
Проверим наличие проблемы на примере не интерактивного менеджера загрузок Wget:
--2013-09-18 15:16:47-- http://unknown-host-abcdefg-test.su/ Resolving unknown-host-abcdefg-test.su (unknown-host-abcdefg-test.su)... 198.1.74.224 Connecting to unknown-host-abcdefg-test.su (unknown-host-abcdefg-test.su)|198.1.74.224|:80... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Wed, 18 Sep 2013 15:16:46 GMT Server: Apache/2.2.20 (Unix) mod_ssl/2.2.20 OpenSSL/0.9.8m DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Last-Modified: Fri, 30 Sep 2011 22:28:05 GMT ETag: "46978-715b-4ae30238dc740" Accept-Ranges: bytes Content-Length: 29019 Connection: close Content-Type: text/html Length: 29019 (28K) [text/html] Saving to: `test.htm' 0K .......... .......... ........ 100% 61.1K=0.5s 2013-09-18 15:16:47 (61.1 KB/s) - `test.htm' saved [29019/29019]
Как видим из заголовков вывода Wget, несуществующий домен был успешно отрезолвлен в IP-адрес, к нему было осуществлено подключение и получение веб-страницы. Проблема действительно присутствует.
Попробуем пропинговать тот же самый несуществующий домен:
[vitaly@localhost ~]$ ping unknown-host-abcdefg-test.su PING unknown-host-abcdefg-test.su.org (198.1.74.224) 56(84) bytes of data. 64 bytes from 198-1-74-224.unifiedlayer.com (198.1.74.224): icmp_req=1 ttl=51 time=147 ms 64 bytes from 198-1-74-224.unifiedlayer.com (198.1.74.224): icmp_req=2 ttl=51 time=146 ms 64 bytes from 198-1-74-224.unifiedlayer.com (198.1.74.224): icmp_req=3 ttl=51 time=146 ms 64 bytes from 198-1-74-224.unifiedlayer.com (198.1.74.224): icmp_req=4 ttl=51 time=146 ms 64 bytes from 198-1-74-224.unifiedlayer.com (198.1.74.224): icmp_req=5 ttl=51 time=146 ms -+- unknown-host-abcdefg-test.su.org ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 146.612/146.763/147.180/0.469 ms
В выводе утилиты ping мы видим, что к домену была автоматически добавлена зона .ORG.
Давайте разберёмся в причинах такого поведения системного резолвера. Для этого глянем содержимое файла /etc/resolv.conf:
nameserver 8.8.8.8 nameserver 8.8.4.4
На сервере используются DNS серверы Google. Никаких других параметров не указано. Продолжаем наше расследование.
Открываем man resolv.conf: в случае отсутствия в /etc/resolv.conf директив search и domain, системный резолвер берёт зону из /etc/hostname, где у нас как раз прописано example.org.
Т.к. в конфигурационном файле не задано минимальное число точек в доменном имени директивой option ndots:N, системный резолвер добавляет зону для каждого несуществующего домена.
Вывод: для устранения проблемы нам достаточно изменить файл /etc/resolv.conf до примерно такого вида:
nameserver 8.8.8.8 nameserver 8.8.4.4 search localhost options ndots:1
P.S. Специалисты службы технической поддержки одного из крупнейших хостеров не смогли справиться с данной проблемой, о чём явно и заявили в тикете. Так-то.