ДНС-сервер BIND9


BIND (Berkeley Internet Name Domain, до этого: Berkeley Internet Name Daemon) — открытая и наиболее распространённая реализация DNS-сервера.
 

Установка BIND9


 
Для начала нам необходимо установить сам сервер следующей командой:
 
sudo su
sudo apt-get install bind9
 
Укажем к каким DNS серверам будет обращатся наш сервер:
 
nano /etc/bind/named.conf.options
 
forwarders {
217.195.65.9;
217.195.66.253;
8.8.8.8;
};
 
Перезапускаем bind:
 
/etc/init.d/bind9 restart
 
Не забываем поменять DNS адрес в /etc/resolv.conf на свой.
 
На сколько я понял кеш хранится в памяти и не сохранется при перезапуске.
Проверим, кеширует ли DNS:
Набираем (спросить адрес, например, www.ru. (которого еще нет в кэше), затем спросить ещё раз. Время запроса должно быть меньше):
dig @localhost www.ru
...
;; Query time: 4825 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
[ждём 5 сек.]
dig @localhost www.ru
...
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
 

Утилита DIG.


 
dig – утилита для запросов информации с серверов DNS, входящая в пакет bind9. Использование:
 
dig www.ru
 
; <<>> DiG 9.7.1-P2 <<>> www.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45434
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 0
 
;; QUESTION SECTION:
;www.ru.                                IN      A
 
;; ANSWER SECTION:
www.ru.                 55760   IN      A       194.87.0.50
 
;; AUTHORITY SECTION:
.                       75260   IN      NS      a.root-servers.net.
.                       75260   IN      NS      e.root-servers.net.
.                       75260   IN      NS      c.root-servers.net.
.                       75260   IN      NS      i.root-servers.net.
.                       75260   IN      NS      j.root-servers.net.
.                       75260   IN      NS      d.root-servers.net.
.                       75260   IN      NS      k.root-servers.net.
.                       75260   IN      NS      f.root-servers.net.
.                       75260   IN      NS      h.root-servers.net.
.                       75260   IN      NS      b.root-servers.net.
.                       75260   IN      NS      l.root-servers.net.
.                       75260   IN      NS      g.root-servers.net.
.                       75260   IN      NS      m.root-servers.net.
 
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 25 10:47:55 2010
;; MSG SIZE  rcvd: 251
 
Рассмотрим подробнее вывод:
 
; <<>> DiG 9.7.1-P2 <<>> www.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45434
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 0
 
Здесь dig рассказывает о себе и информацию, которую он принял от DNS серверов. Вывод этой информации можно отключить, воспользовавшись ключом +[no]comments.
 
; QUESTION SECTION:
;www.ru. IN A
 
Информация, которую мы запрашиваем. Вывод этой информации можно отключить, воспользовавшись ключом +[no]question.
 
;; ANSWER SECTION:
www.ru.                 55760   IN      A       194.87.0.50
 
Ответ. www.ru имеет адрес 194.87.0.50. Вывод этой информации тоже можно отключить, воспользовавшись ключом +[no]answer.
 
;; AUTHORITY SECTION:
.                       75260   IN      NS      a.root-servers.net.
.                       75260   IN      NS      e.root-servers.net.
.                       75260   IN      NS      c.root-servers.net.
.                       75260   IN      NS      i.root-servers.net.
.                       75260   IN      NS      j.root-servers.net.
.                       75260   IN      NS      d.root-servers.net.
.                       75260   IN      NS      k.root-servers.net.
.                       75260   IN      NS      f.root-servers.net.
.                       75260   IN      NS      h.root-servers.net.
.                       75260   IN      NS      b.root-servers.net.
.                       75260   IN      NS      l.root-servers.net.
.                       75260   IN      NS      g.root-servers.net.
.                       75260   IN      NS      m.root-servers.net.
 
Authority секция. Говорит нам о том, что www.ru обслуживают 13 DNS серверов. Вывод этой информации можно отключить, воспользовавшись ключом +[no]authority.
 
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 25 10:47:55 2010
;; MSG SIZE  rcvd: 251
 
Статистика. Вывод этой информации можно отключить, воспользовавшись ключом +[no]stats.
 
Dig может выполнять запросы A, NS, MX, TXT и ANY. Запросим адрес www.ru:
 
dig www.ru A +noall +answer
 
;; global options: +cmd
www.ru.                 55518   IN      A       194.87.0.50
 
Запись A (address record) или запись адреса связывает имя хоста с адресом IP.
 
Запросим список NS серверов:
 
dig www.ru NS +noall +answer
 
;; global options: +cmd
www.ru.                 55460   IN      NS      ns1.demos.net.
www.ru.                 55460   IN      NS      ns.demos.su.
 
Запись NS (name server) указывает на DNS-сервер для данного домена.
 
Запросим список MX серверов:
 
dig www.ru MX +noall +answer
 
;; global options: +cmd
www.ru.                 18554   IN      MX      5 hq.demos.ru.
 
Запись MX (mail exchange) или почтовый обменник указывает сервер(ы) обмена почтой для данного домена.
 
Теперь запросим всё вместе.
 
dig www.ru ANY +noall +answer
 
;; global options: +cmd
www.ru.                 18515   IN      MX      5 hq.demos.ru.
www.ru.                 55396   IN      NS      ns.demos.su.
www.ru.                 55396   IN      NS      ns1.demos.net.
www.ru.                 55396   IN      A       194.87.0.50
 
Быстрый ответ:
 
dig www.ru +short
 
194.87.0.50
 
Быстрый ответ для MX:
 
dig www.ru mx +short
 
5 hq.demos.ru.
 
Если мало информации - можно воспользоваться ключом +noall.
 
dig +nocmd www.ru mx +noall +answer
 
www.ru.                 18437   IN      MX      5 hq.demos.ru.
 
Запросим SOA записи для зоны .ru используя ключ +multiline
 
dig +nocmd ru any +multiline +noall +answer
 
ru.                     86399 IN SOA ns.ripn.net. hostmaster.ripn.net. (
4017065    ; serial
86400      ; refresh (1 day)
14400      ; retry (4 hours)
2592000    ; expire (4 weeks 2 days)
3600       ; minimum (1 hour)
)
ru.                     86399 IN NS ns5.msk-ix.net.
ru.                     86399 IN NS ns.ripn.net.
ru.                     86399 IN NS e.dns.ripn.net.
ru.                     86399 IN NS ns9.ripn.net.
ru.                     86399 IN NS ns2.nic.fr.
ru.                     86399 IN NS f.dns.ripn.net.
 
Запись SOA (Start of Authority) или начальная запись зоны указывает, на каком сервере хранится эталонная информация о данном домене, содержит контактную информацию лица, ответственного за данную зону, тайминги (параметры времени) кеширования зонной информации и взаимодействия DNS-серверов.
 
Смотрим PTR запись:
 
dig -x 194.87.0.50 +short
 
www.ru.
 
Запись PTR (pointer) или запись указателя связывает IP хоста с его каноническим именем.
 
Отправляем запрос другому DNS серверу.
 
dig @ns1.demos.net www.ru ANY +short
 
ns.demos.su. ncc.demos.net. 2004121602 28800 7200 604800 86400
ns1.demos.net.
ns.demos.su.
194.87.0.50
5 hq.demos.ru.
 
Запрашиваем много адресов по списку.
 
dig -f /home/brj/my-ip-list.txt
 
Tracing
 
# dig www.ru +trace +short
NS C.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS D.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS E.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS F.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS G.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS H.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS I.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS J.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS K.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS L.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS M.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS A.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
NS B.ROOT-SERVERS.NET. from server 127.0.0.1 in 0 ms.
A 194.87.0.50 from server ns1.demos.net in 79 ms.
 
Смотрим SOA информацию.
 
dig www.ru +nssearch
 
SOA ns.demos.su. ncc.demos.net. 2004121602 28800 7200 604800 86400 from server ns.demos.su in 14 ms.
SOA ns.demos.su. ncc.demos.net. 2004121602 28800 7200 604800 86400 from server ns1.demos.net in 15 ms.
 

Добавляем запись в днс-сервер.


 
nano /etc/bind/named.conf
 
Добавляем путь к конфиг-файлу новой зоны:
 
include "/etc/bind/myzone.conf";
 
Теперь создаем этот файл:
 
touch /etc/bind/myzone.conf
 
Делаем владельцем этого файла пользователя "bind":
 
chown bind:bind /etc/bind/myzone.conf
 
Указываем путь к файлу, содержащему записи, что будем добавлять:
 
nano /etc/bind/myzone.conf
 
zone "megaholod.lan" IN {
type master;
file "/etc/bind/megaholod.lan";
allow-update { none; };
};
 
Где allow-update - каким хостам разрешено посылать динамические изменения зоны первичному серверу.
 
Создаем этот файл:
 
touch /etc/bind/megaholod.lan
 
Меняем владельца файла:
 
chown bind:bind /etc/bind/megaholod.lan
 
nano /etc/bind/megaholod.lan
 
Вносим записи для добавления:
 
$TTL    86400
$ORIGIN megaholod.lan.
@                       1D IN SOA       @ root (
1              ; Serial Number
3H              ; обновление через 3 часа
15M             ; повторение попытки через 15 мин
1W              ; устаревание через неделю
1D )            ; minimum
 
1D IN NS        @
1D IN A         10.10.10.4
 
Где TTL - Допустимое время хранения ответов других днс-серверов в кэше (86400сек=1день).
 
@ - означает, что запись зоны будет совпадать с именем домена.
 
Serial Number - Серийный номер файла базы данных DNS. Этот номер увеличивается на единицу при каждом изменении файла, таким образом дополнительные сервера имен этой зоны узнают об изменении, и загружают самую последнюю информацию.
 
Таким образом мы добавили записи:
 
- SOA, т.е. указали что эталонная информация о megaholod.lan хранится на нашем сервере (@), указали тайминги.
- NS, т.е. указали что ДНС-сервером для домена megaholod.lan будет наш сервер (@).
- A, т.е. связали имя megaholod.lan с ip-адресом 10.10.10.4 .
 
В /etc/hosts машины megaholod.lan добавляем:
 
10.10.10.4 megaholod.lan
 
Перезапускаем сервер:
 
/etc/init.d/bind9 restart
 
Проверяем сначала на серваке, а затем на на любом компе в лок. сети, и для линукс и для виндовс команда одинаковая:
 
nslookup megaholod.lan
 

Команды очистки кэша ДНС


 
Очищаем кеш dns на серваке:
 
rndc flush
 
Очищаем кеш dns в windows:
 
ipconfig /flushdns
 
Достаточно подробно и на русском описаны многие параметры BIND9 здесь:
http://www.bog.pp.ru/work/bind.html#namedconf

Dec. 12, 2010