Любой уважающий себя админ обязан иметь хотя бы один ДНС сервер. Может придется домен регистрировать, может в интернет выпускать локалку, или сделать свою зону, или отдать кому-то поддомен. Мало ли что? Классическим ДНС сервером для unix систем является BIND (Berkley Internet Name Domain) или сокращенно named. В систему настройки ДНС исторически внеслись некоторые глупости, которые и по сей день вызывают недоумение у новичков, а потому, кто не понимает причины такого подхода, могут идти читать официальную документацию, а здесь вы видете шпаргалку, которую применяю я сам для своих нужд.
Итак, сначала установим... А вот на самом деле, named уже есть в штатной установке FreeBSD, но мы уж поставим что-нибудь посвежее, если из портов, то:
root@localhost# cd /usr/ports/dns/bind9 && make install
Либо из пакетов (что совсем просто):
root@localhost# pkg_add -r bind9
Особенностью полной сборки является утилита rndc, управляющая демоном named. А посему нам придется сгенерировать пару ключей для rndc и правильно их прописать. Поскольку named - это штатный демон для FreeBSD, то его конфиг находится в /etc/namedb (а не в /usr/local/etc/named, как обычно).
options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; }; # End of rndc.conf
# Use with the following in named.conf, # adjusting the allow list as needed: # key "rndc-key" { # algorithm hmac-md5; # secret "zDfVVNmsufD3PYiGeXNlmw=="; # }; # # controls { # inet 127.0.0.1 port 953 # allow { 127.0.0.1; } keys { "rndc-key"; }; # }; # End of named.conf
Как мы видим нам очень просто и наглядно дают понять что именно и в какой файл мы должны вписать, так и поступаем - тупо Copy/Paste в указанные файлы. Только не забываем, конечно, убрать комментарии ('#') в начале строки в named.conf. Cамое время вписать в /etc/rc.conf строку:
named_enable="YES"
После чего лучше перегрузить компьютер, но если перезагружать очень не хочется, то можно запустить его командой /usr/sbin/named -t /var/named -u bind. Если на команду rndc reload сервер реагирует адекватно, значит все в порядке.
ДНС может использоваться следующими способами: 1. Кеширующий ДНС 2. Мастер ДНС - главный держатель зоны 3. Подчиненный ДНС - умеет скачивать доверенную зону, хранить у себя и обслуживать ДНС запросы на эту зону.
# В trusted вносим сервера вторичные, провайдерские, те которые могут скачивать зоны, # то есть доверенные узлы. Остальным лишняя информация не нужна. acl "trusted" { 192.168.0.0/24; 127.0.0.1; 195.196.197.198; 195.196.197.199; 195.94.224.129; };
# Описываем общие опции для всех зон: options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; allow-transfer { trusted; }; # имеют права скачивать зону allow-query { any; }; # имеют право отпралять запрос allow-recursion { any; }; # не помню listen-on { any; }; # слушать ip со всех интерфейсов, query-source address * port 53; auth-nxdomain yes; version "WinDNS 1.01"; # Просто для прикола };
# Для кеширующего ДНС-а нужна такая запись: # должен быть файл /etc/namedb/named.root с корневыми DNS-ами zone "." { type hint; file "named.root"; };
# Зона локалхоста zone "localhost" { type master; file "localhost.zone"; };
# описываем обратную зону для локалхоста # для этого достаточно запустить скрипт sh /etc/namedb/make-localhost zone "0.0.127.IN-ADDR.ARPA" { type master; file "localhost.rev"; notify no; };
Файл /etc/named/localhost.zone
$ttl 1D @ IN SOA dommain.ru. admin.domain.ru. ( 2007110201 ;serial 108000 ;refresh 1800 ;retry 1209600 ;expiry 604800)
IN NS @ IN A 127.0.0.1
Пояснения:
1 Строка: "$TTL 1D" - Time To Live 1 Day. Именно со строчки TTL должен начинаться файл зоны. В противном случае named его не прочитает
2 строка: "@" (собачка :) - означает описанную зону в named.conf, в нашем случае localhost, IN - без комментариев, SOA (start of autherity кажется) ответсвенный сервер, dommain.ru. - наш домен (обязательно с точкой), admin.domain.ru. - наше мыло (ибо собачка используется как имя зоны). Во второй строке обязательно должна присутсвовать SOA-запись .
3 строка: серийный номер для обновления. Если в зону вносятся любые изменения номер должен быть увеличен. Обычно, номер делают как ГГГГ-ММ-ДД 01-99. Благодря, такой нехитрой формуле можно гарантировать возрастающую уникальность серийного номера зоны.
4 строка: обновляться каждые 30 часов
5 строка: повтроять через полчаса
6 строка: истечение срока 1209600 сек = 2 недели
8 запись типа: " IN NS @" - сокращенная, полная выглядит так: localhost. IN NS @ или @ IN NS @ что в сущности одно и то же из named.conf Этой строкой мы объясняем кто будет мастер-сервером ДНС (выражение IN NS) для этой зоны. Как оказывается он сам и будет.
9 запись типа " IN A 127.0.0.1" тоже сокращенная, полный вариант описан чуть выше. Этой строкой мы объясняем на какой ip-адрес мы присваиваем имя localhost.
Синаксис достаточно труднопонимаемый, но принципиально несложный. Если изложено непонятно, то рекомендую почитать Handbook, написано как раз так, чтобы понял каждый.
Итак, после такого конфига у нас должен быть работающий кеширующий DNS-сервер. Пробуем:
root@localhost# rndc reload server reload successful root@localhost# echo "nameserver\t127.0.0.1" > /etc/resolv.conf root@localhost# host mail.ru mail.ru has address 194.67.57.126 mail.ru has address 194.67.57.226 mail.ru has address 194.67.57.26 mail.ru mail is handled by 10 mxs.mail.ru.
В ответ на команду "host" приходит ответ, значит наш DNS на 127.0.0.1 работает. Вообщем, кеширующий ДНС мы запустили.
Теперь самое время прописать какую-нибудь зону. Например ounix.ru - домен второго уровня, полностью принадлежит нам. Тогда в /etc/namedb/named.conf вписываем:
zone "ounix.ru" { type master; file "ounix.ru"; allow-transfer { trusted;}; };
А в файле "ounix.ru" мы уже описываем нашу зону и все её поддомены, NS и MX записи:
$TTL 38400 @ IN SOA ns1.ounix.ru. admin.ounix.ru. (
@ IN NS ns1.ounix.ru. ; Первый (master) DNS сервер @ IN NS ns2.ounix.ru. ; Вторичный (slave) сервер зоны @ IN MX 10 mail.ounix.ru. ; MX-запись на поддомен mail, опишем чуть позже @ IN A 195.91.211.84 ; Сама зона присваивается машине 195.91.211.84 mail IN A 195.91.211.84 ; поддомен mail присваеваем ip 195.91.211.84 ns1 IN A 195.91.211.84 ; поддомен ns1 туда же ns2 IN A 195.94.224.129 ; а вот поддомен ns2 уйдет на другой сервер ftp IN A 195.91.211.84 ; Ну далее все должно быть понятно www IN A 195.91.211.84 dark IN A 195.91.211.84 unix IN A 195.91.211.84 test IN A 195.91.211.84 jabber IN A 195.94.224.129
Хочется обратить внимание что NS и MX записи могут быть только на доменные имена, но никак не на ip адреса. Если мы пишем имя хоста полностью, обязательно ставим точку в конце, в противном случае к записи без точки добавляется имя зоны. Например, "mail" тождественно "mail.ounix.ru." Таким образом, мы описали зону на master-сервере DNS. А как же вторичные сервера прописывают у себя зоны? А вот так:
zone "ounix.ru" { type slave; file "slave/ounix.ru"; masters { 195.91.211.84; }; };
Мы указали, что являемся подчиненным DNS сервером для этой зоны, что мастер у нас 195.91.211.84, что скачивать зону на ounix.ru надо с него, а хранить ее надо в /etc/namedb/slave/ounix.ru И после перезапуска BIND-а, если нигде нет ошибок, на подчиненном сервере появится копия файла зоны ounix.ru
>> allow-recursion { any; }; # не помню Список хостов и сетей для который сервер сам будет выяснять IP. Т.е. опросит корневой сервер, TLD сервер (1-й уровень) и т.д пока не дойдет до сервера, отвечающего за конкретную зону. Альтернатива - транслировать запросы на DNS - сервера провайдера. Обычно используется вместе с опцией "recursion yes;", чтобы разрешить рекурсию.
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]