Назад | Перейти на главную страницу

BIND9 как сервер имен только для кеша не работает

Я установил BIND9 через apt-get на недавно установленном и полностью обновленном UBUNTU 12.04, виртуализированном на VirtualBox.
Я хочу использовать его как сервер имен только для кеша.

named.conf содержит только следующие строки:

options {
    directory "/var/cache/bind";  
    dnssec-validation auto;  
    auth-nxdomain no;  
    listen-on-v6 {any;};  

    recursion yes;
    allow-recursion {localnets;};
    allow-query-cache {localnets;};
    allow-query {localnets;};
};  

zone "." {
    type hint;
    file "/etc/bind/db.root";
};

zone "localhost" {
   type master;
   file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
   type master;
   file "/etc/bind/db.127";
};

Теперь, если я dig что-либо, использующее мой сервер имен, поиск не выполняется с connection timed out; no servers could be reached и журнал BIND9 полон DNS format error [...] non-improving referral или также FORMERR.

В частности, результат dig @127.0.0.1 www.amazon.com является

; <<>> DiG 9.8.1-P1 <<>> @127.0.0.1 www.amazon.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

Кроме того, с помощью Wireshark я могу видеть исходящие пакеты на корневые серверы, но никогда не получаю ответа.

Но если я использую dig используя внешний сервер имен (например, 8.8.8.8), или я использую его в опции пересылки BIND9, поиск будет успешным.

Зачем?

Я полагаю, вы уже подтвердили, что в вашем Ubuntu в VirtualBox есть реальное подключение к Интернету.

Если это так, частой причиной того, что ваш собственный рекурсивный сервер не работает, является то, что ваш интернет-провайдер блокирует доступ к другим авторитетным серверам имен, которые работают на domain порт. Я вижу ты уже безуспешно пытался делать прямые запросы к корневым серверам непосредственно с dig, что указывает на наличие некоторых проблем с подключением.

Короче, вы можете сделать простой тест: попробуйте запустить dig @8.8.8.8 +trace www.google.com имитировать, как рекурсивный преобразователь будет выполнять разрешение имен.

Если вы получите тайм-аут до ., то либо с вашим подключением что-то не так, либо ваш провайдер блокирует Google Public DNS (и, скорее всего, любой другой DNS тоже).

Если вы получите тайм-аут сразу после ., то ваш провайдер блокирует доступ к корневым серверам (и, вероятно, ко всем другим авторитетным серверам имен тоже).

Если ваше рекурсивное разрешение не имеет тайм-аутов, но отсутствует com. и google.com. шаги, прыгая прямо с . к www.google.com. (или, возможно, даже не . для начала), значит, ваш провайдер перенаправляет все domain-port запрашивает их собственный набор рекурсивных DNS-серверов, и вы не можете запустить свой собственный рекурсивный сервер имен с таким подключением к Интернету.

Если вы получите результат почти такой же, как показано ниже, со всеми ., com., google.com. и www.google.com. шагов, то ваш собственный локальный рекурсивный преобразователь должен работать нормально, при условии соблюдения инструкций по установке и настройке.

# dig @8.8.8.8 +trace www.google.com

; <<>> DiG 9.7.3 <<>> @8.8.8.8 +trace www.google.com
; (1 server found)
;; global options: +cmd
.                       2244    IN      NS      a.root-servers.net.
.                       2244    IN      NS      b.root-servers.net.
.                       2244    IN      NS      c.root-servers.net.
.                       2244    IN      NS      d.root-servers.net.
.                       2244    IN      NS      e.root-servers.net.
.                       2244    IN      NS      f.root-servers.net.
.                       2244    IN      NS      g.root-servers.net.
.                       2244    IN      NS      h.root-servers.net.
.                       2244    IN      NS      i.root-servers.net.
.                       2244    IN      NS      j.root-servers.net.
.                       2244    IN      NS      k.root-servers.net.
.                       2244    IN      NS      l.root-servers.net.
.                       2244    IN      NS      m.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 25 ms

com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
;; Received 504 bytes from 192.33.4.12#53(c.root-servers.net) in 15 ms

google.com.             172800  IN      NS      ns2.google.com.
google.com.             172800  IN      NS      ns1.google.com.
google.com.             172800  IN      NS      ns3.google.com.
google.com.             172800  IN      NS      ns4.google.com.
;; Received 168 bytes from 192.55.83.30#53(m.gtld-servers.net) in 183 ms

www.google.com.         300     IN      A       74.125.225.208
www.google.com.         300     IN      A       74.125.225.211
www.google.com.         300     IN      A       74.125.225.212
www.google.com.         300     IN      A       74.125.225.209
www.google.com.         300     IN      A       74.125.225.210
;; Received 112 bytes from 216.239.38.10#53(ns4.google.com) in 24 ms

Первое, что я замечаю, это то, что у вас нет «рекурсии да»; в named.conf. BIND не является рекурсивным по умолчанию (в течение некоторого времени) из соображений безопасности. Вы должны разрешить вашей локальной сети запрашивать преобразователь с рекурсивными запросами:

acl me {
            ::1/128;
            127.0.0.0/8;
};
...
    recursion yes;
    allow-recursion   { me; };
    allow-query-cache { me; };
    allow-query { me; };

Он не объясняет странные сообщения об ошибках, которые вы обнаруживаете в журналах. Откровенно говоря, в вопросах ServerFault я ненавижу расплывчатые резюме вроде «Теперь, если я что-нибудь откопаю с помощью своего сервера имен, поиск завершится неудачно, и время соединения истекло». Опубликуйте полную команду и полный результат, и мы увидим.