Отключаем добавление зоны в системном резолвере GNU/Linux

На арендованном 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. Специалисты службы технической поддержки одного из крупнейших хостеров не смогли справиться с данной проблемой, о чём явно и заявили в тикете. Так-то.