Довольно часто возникает вопрос о внедрении своего ДНС сервера, который мог бы не только обслуживать запросы внешних пользователей к приобретенным ДНС именам, но и обслуживать запросы пользователей в локальной сети. Такая задача относительно просто решается средствами ОС FreeBSD.
Задача:
Настроить DNS сервер Bind под управлением FreeBSD для обслуживания запросов клиентов внутренней сети и обслуживания прямой и обратной зон DNS с функцией их пересылки на вторичный DNS сервер. Тип всех зон на сервере — Master, то есть данный сервер предоставляет авторитетные ответы за все зоны.
Дано:
1. Внутренний IP адрес DNS сервера — 192.168.0.1/24
2. Внешний IP адрес DNS сервера — 10.10.10.1/24
3. IP адрес вторичного сервера — 10.10.10.2/24
4. Прямая DNS зона — test.dom
5. Обратная DNS зона — 10.10.10.in-addr.arpa
Решение:
1. В файле /etc/rc.conf прописываем запуск DNS сервера при старте системы
named_enable=”YES”
2. Приводим конфигурационный файл /etc/namedb/named.conf к следующему виду:
acl ACCESS { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; }; options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; listen-on { 127.0.0.1; 10.10.10.1; }; allow-recursion { ACCESS; }; allow-transfer { 10.10.10.2; }; transfer-source 10.10.10.1; version "Bind DNS Server"; }; logging { category lame-servers { null; }; }; zone "." { type hint; file "named.root"; }; zone "localhost" { type master; file "master/localhost"; }; zone "0.0.127.in-addr.arpa" { type master; file "master/0.0.127.in-addr.arpa"; }; zone "test.dom" { type master; file "master/test.dom"; allow-query { any; }; }; zone "10.10.10.in-addr.arpa" { type master; file "master/10.10.10.in-addr.arpa"; allow-query { any; }; };
Где:
acl — список доступа с именем ACCESS и описанием в нем сетей, которым разрешено использовать наш DNS сервер.
directory – Рабочая директория Bind
pid-file — Место размещения PID файла
dump-file – Место размещения DUMP файла
statistics-file – Место размещения файла статистики
listen-on – Указываем IP адреса интерфейсов, на которых Bind будет «слушать» запросы
allow-recursion – Указываем списки доступа, кому разрешены рекурсивные запросы к серверу
allow-transfer – Указываем IP адрес вторичного DNS сервера, которому будем пересылать наши зоны
transfer-source – Указываем IP интерфейса, через который будет разрешено проведение трансфера зон
version – Указываем свою версию DNS сервера
logging – Указываем ограничение журналирования
zone “.” — Зона, описывающая корневые DNS сервера, необходима для работы. Хранится в файле /etc/namedb/named.root
zone «localhost» — Прямая зона, описывающая локальный сервер, необходима для работы. Хранится в файле /etc/namedb/master/localhost
zone «0.0.127.in-addr.arpa» — Обратная зона, описывающая локальный сервер, необходима для работы. Хранится в файле /etc/namedb/master/0.0.127.in-addr.arpa
zone «test.dom» — Наша прямая зона. Хранится в файле /etc/namedb/master/test.dom Так как на нашем сервере хранится мастер копия зоны, при помощи allow-query, разрешаем всем ее опрос.
zone «10.10.10.in-addr.arpa» — наша обратная зона. Хранится в файле /etc/namedb/master/10.10.10.in-addr.arpa. Так как на нашем сервере хранится мастер копия зоны, при помощи allow-query, разрешаем всем ее опрос.
3. Настраиваем файлы зон
3.1. Зона “.” — оставляем по умолчанию
3.2. Зона «localhost». Конфигурационный файл /etc/namedb/master/localhost приводим к следующему виду:
$TTL 3600 @ IN SOA localhost. root.localhost. ( 2009070601 ; Serial 3600 ; Refresh 600 ; Retry 2419200 ; Expire 86400 ) ; Minimum IN NS localhost. IN A 127.0.0.1
3.3. Зона «0.0.127.in-addr.arpa». Конфигурационный файл /etc/namedb/master/0.0.127.in-addr.arpa приводим к следующему виду:
$TTL 3600 @ IN SOA localhost. root.localhost. ( 2009070601 ; Serial 3600 ; Refresh 600 ; Retry 2419200 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost.
3.4. Зона «test.dom». Конфигурационный файл /etc/namedb/master/test.dom приводим к следующему виду:
$TTL 3600 @ IN SOA ns1.test.dom. hostmaster.test.dom. ( 2009082801 ; Serial 3600 ; Refresh 600 ; Retry 2419200 ; Expire 86400 ) ; Minimum IN NS ns1.test.dom. IN NS ns2.test.dom. @ IN A 10.10.10.1 ns1 IN A 10.10.10.1 ns2 IN A 10.10.10.2
3.5. Зона «10.10.10.in-addr.arpa». Конфигурационный файл /etc/namedb/master/10.10.10.in-addr.arpa приводим к следующему виду:
$TTL 3600 @ IN SOA ns1.test.dom. hostmaster.test.dom. ( 2009082801 ; Serial 3600 ; Refresh 600 ; Retry 2419200 ; Expire 86400 ) ; Minimum IN NS ns1.test.dom. IN NS ns2.test.dom. 1 IN PTR ns1.test.dom. 2 IN PTR ns2.test.dom.
Где, например, для зоны test.dom сверху вниз:
— Время, указывающее длительность в секундах, сколько запись должна быть сохранена в кеше.
— @ — имя зоны — заменяющий символ, IN – класс записи INTERNET — значение по умолчанию, SOA – описание глобальных переменных зоны, ns1.test.dom. — имя DNS сервера для этой зоны, hostmaster.test.dom. — почтовый адрес администратора DNS сервера для этой зоны. Вместо знака @, в качестве разделителя используется знак «.»
— Серийный номер изменения записи. Для перечитывания зоны вторичным сервером, при каждом изменении, необходимо последнюю цифру увеличивать на 1
— Время через которое вторичный DNS сервер попытается перечитать зону
— Время через, которое вторичный сервер будет пытаться перечитать зону если ему не удалось связаться с первичным DNS сервером в период указанный в Refresh
— Указывает через какое время данные зоны больше не авторитетны для этого сервера. Используется вторичными серверами.
— Устаревший атрибут, указывающий на время жизни сохранения данных зоны в кеше.
— Указание DNS основного DNS сервера для данной зоны
— Указание вторичного DNS сервера для данной зоны
— Описание узлов в данной зоне
4. Управляем DNS сервером при помощи следующих команд:
freebsd# /etc/rc.d/named start | stop | restart | status
Дополнительно:
Наиболее часто используемые типы записей в DNS:
A – запись на IP адрес узла в сети
NS — запись на DNS сервер
CNAME – запись на каноническое имя для узла
PTR – запись указатель на доменное имя, используется в обратных зонах
MX — запись для определения маршрутизации почты
Для проверки работоспособности можно использовать такие средства как dig или nslookup
Пример использования dig:
freebsd# dig @localhost test.dom ANY
Команда означает — вывести записи типа ANY в зоне test.dom, используя сервер localhost
; <<>> DiG 9.4.3-P2 <<>> @localhost test.dom ANY ; (2 servers found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35560 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 10, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;test.dom. IN ANY ;; ANSWER SECTION: test.dom. 3600 IN A 10.10.10.1 test.dom. 3600 IN SOA ns1.test.dom. hostmaster.test.dom. 2009082801 3600 600 2419200 86400 test.dom. 3600 IN NS ns1.test.dom. test.dom. 3600 IN NS ns2.test.dom. ;; ADDITIONAL SECTION: ns1.test.dom. 3600 IN A 10.10.10.1 ns2.test.dom. 54886 IN A 10.10.10.2 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Aug 30 23:04:41 2009 ;; MSG SIZE rcvd: 330
Пример использования nslookup:
freebsd# nslookup > test.dom Server: 127.0.0.1 Address: 127.0.0.1#53 Name: test.dom Address: 10.10.10.1 >
На мой взгляд использование dig для диагностики более гибко, хотя те кто знает полностью как использовать nslookup, скажут то же самое про него. Также рекомендую замечательное пособие по настройке DNS.