Настройка DNS -сервера BIND
Основная цель DNS — это отображение доменных имен в IP адреса и наоборот — IP в DNS.
BIND (Berkeley Internet Name Domain, до этого: Berkeley Internet Name Daemon) — открытая и наиболее распространённая реализация DNS-сервера
# named -v BIND 9.4.3-P2
Расположение файлов BIND:
> tree /var/named/ /var/named/ |-- dev |-- etc | `-- namedb #Каталог, в котором располагается вся информация о зонах BIND | |-- dynamic | |-- master | | |-- empty.db | | |-- localhost-forward.db | | `-- localhost-reverse.db | |-- named.conf #Конфигурационный файл для даемона | |-- named.root | `-- slave `-- var |-- dump |-- log |-- run | `-- named `-- stats
Разрешаем запуск DNS сервера:
# echo 'named_enable="YES"' >> /etc/rc.conf
Файл зоны
Синтаксис файлов зон
- ; - комментарий
- @ - символ подставновки. Подставляется имя домена из named.conf (название файла зоны) или если задан переменная $ORIGIN
- () - используется для переноса длинных строк.
named.root или db.root обновление
Файл named.root (db.root) содержит списки корневых серверов Раздел DNS: Что такое DNS. Этот файл меняется достаточно редко, но его последнюю официальную версию всегда можно скачать с ftp.internic.net (ftp.rs.internic.net). Содержимое db.root (иногда называемого named.ca для "certifying authority") носит достаточно специальный характер. Оно представляет из себя описание набора канонических корневых серверов, собственно регистрирующих домены.
> pwd /var/named/etc/namedb > fetch ftp://ftp.internic.net/domain/named.root named.root 100% of 2994 B 4470 kBps
resolv.conf
Редактируем файл /etc/resolv.conf: первый DNS сервер это закольцовывание на ваш локальный сервер DNS (127.0.0.1), вторым ближайший к вам DNS сервер (обычно предоставляется вашим провайдером интернета), список остальных DNS на ваше усмотрение (они не являются обязательными). Файл resolv.conf, говорит нам о том, что в случае неудачного DNS запроса к вашему серверу (127.0.0.1), запрос будет автоматически переадресован ко второму по списку DNS серверу и т.д..
> ee /etc/resolv.conf domain your.domen nameserver 127.0.0.1 #DNS your ISP nameserver x.x.x.x nameserver x.x.x.x
Резолвер(resolver) - это набор подпрограмм в библиотеке C, которые предоставляют доступ к Internel Раздел DNS: Что такое DNS (Domain Name System) (Системе Доменных Имен Интернет) (прим. пер. – DNS обеспечивает возможность преобразования символьных имен машин в IP-адреса и наоборот, IP-адресов в символьные имена). Файл с настройками /etc/resolv.conf для резолвера содержит информацию, которую первым делом читают подпрограммы резолвера, вызванные каким-либо процессом. Данный файл устроен так, чтобы его мог читать человек и содержит список ключевых слов и значений, которые предоставляют резолверу различную информацию.
В нормально настроенной системе данный файл не нужен: запросы будут обрабатываться сервером на локальном хосте, имя домена определяется из имени машины, а путь поиска машины по домену конструируется из имени домена.
Параметры конфигурации:
- nameserver
адрес сервера имен в Интернет (в нотации xxx.xxx.xxx.xxx), который будет обрабатывать запросы от резолвера. Серверов имен может быть максимум 3 (остальные игнорируются), по одному на каждой строке. Если задано несколько серверов, то библиотека резолвера опрашивает их в порядке перечисления. Если записей nameserver нет, то по умолчанию используется сервер имен на локальной машине. (Используемый алгоритм пытается подключиться к серверу имен и, если запрос не был обработан через некоторый промежуток времени, делается попытка подключиться к следующему серверу имен, и так до тех пор пока не будет обработан весь список серверов, затем повторить процедуру, пока не будет достигнуто максимальное количество повторов).
- domain
Локальное имя домена. Большинство запросов на имена машин в этом домене смогут использовать лишь краткие имена, без указания имени домена. Если записей domain нет, то домен определяется из имени локальной машины, которое возвращается функцией gethostname(); доменной частью имени считается все, что следует после первой точки `.'. Наконец, если имя машины не содержит доменной части, назначается корневой домен.
- search
Список для поиска имен машин. Список обычно определяется из локального имени домена; по умолчанию он содержит только имя локального домена. В списке может быть задано несколько доменов, которые должны следовать за ключевым словом search и отделяться друг от друга пробелами или табуляциями. В большинстве случаев, если в запросе к резолверу задано короткое имя машины (без доменной части), то к нему будет поочередно добавляться каждый домен из заданного списка, пока не будет найдено полное совпадающее имя машины. Заметим, что данный процесс может быть медленным, и станет генерировать ощутимый сетевой траффик, если серверы, обслуживающие перечисленные в списке домены, не являются локальными, а также что запросы вернут ошибку тайм-аута, если сервер для одного из доменов недоступен. Список в данный момент ограничен шестью доменами, общая длина имен которых не должна превышать 256 символов.
- sortlist
Разрешает сортировку адресов, которые возвращаются вызовом gethostbyname(). Опция sortlist задается с помощью пары: IP адрес/маска сети. Маска сети является необязательной, по умолчанию используется текущая маска сети. Пары из IP-адреса и необязательной маски сети разделяются прямой косой чертой. Может быть задано до 10 пар. пример: sortlist 130.155.160.0/255.255.240.0 130.155.0.0
- options
Данная опция разрешает изменение определенных переменных резолвера. Синтаксис такой:
options опция ... где опция может принимать одно из следующих значений: debug --- устанавливает RES_DEBUG в _res.options. ndots:n --- устанавливает порог для количества точек, которое должно быть в имени, заданном в res_query (см. resolver(@LIB_NETWORK_EXT@)) перед тем как будет создан начальный абсолютный запрос (initial absolute query). По умолчанию, n ``1'', означает, что если в имени есть хоть одна точка, будет попытка считать это имя абсолютным перед добавлением к нему элементов из списка search.
named.conf
Настраиваем named.conf
> ee /etc/namedb/named.conf ... options { ... //listen-on [ port ip_port ] { список-шаблонов-адресов }; (по умолчанию - все интерфейсы, порт 53; адрес и порт для приема запросов; //может быть несколько таких предложений) // // укажем явно, на каких интерфейсах обслуживать запросы listen-on { 127.0.0.1; адрес-сервера; }; // // listen-on-v6 [ port ip_port ] { список-шаблонов-адресов }; (none; для IPv6) // listen-on-v6 { ::1; }; //allow-recursion { список-шаблонов-адресов }; (any; от кого принимать рекурсивные запросы; данные из кеша под запрет не попадают) allow-recursion { localhost; 127.0.0.1/8; ваша сеть; }; ... } //Описание зон //master - сервер является первичным уполномоченным сервером для данной зоны, т.е. загружает содержимое зоны из файла зоны, // указанного опцией file //slave - сервер является вторичным уполномоченным сервером для данной зоны; содержимое зоны считывается от одного из серверов, //указанных в опции masters; указание имени файла в опции file позволяет сохранять резервную копию зоны в файле // zone "your.com.ua" { type master; file "master/your.com.ua"; allow-transfer{ 127.0.0.1; //IP вашего сервера DNS x.x.x.x; //IP slave 195.24.128.164; }; };
Стартуем DNS нашего сервера.
> /etc/rc.d/named start wrote key file "/var/named/etc/namedb/rndc.key" Starting named.
Проверяем и видим ошибку "the working directory is not writable"
> tail -F /var/log/messages ... Oct 25 16:12:48 ns named[59827]: starting BIND 9.4.3-P2 -t /var/named -u bind Oct 25 16:12:48 ns named[59827]: command channel listening on 127.0.0.1#953 Oct 25 16:12:48 ns named[59827]: command channel listening on ::1#953 Oct 25 16:12:48 ns named[59827]: the working directory is not writable Oct 25 16:12:48 ns named[59827]: running ...
BIND изначально запускается в песочнице. За настройки в песочнице отвечает файл BIND.chroot.dist. Изменим в этом файле строки для директорий namedb и master.
> cp /etc/mtree/BIND.chroot.dist /etc/mtree/BIND.chroot.dist.orig > ee /etc/mtree/BIND.chroot.dist ... etc namedb uname=bind dynamic uname=bind .. master uname=bind ... > chown -R bind:wheel /etc/namedb/
Ошибка устранена.
Логирование DNS запросов
Для логирования всего происходящего при работе BIND нужно создать раздел logging в named.conf и создать нужные директории. В разделе logging задаются 2 параметра channel (можно и больше двух - на ваше усмотрение), эти параметры дословно можно назвать "канал" записи. Каждый канал определяет имя канала и настройки параметров записи (что записывать, а что - нет и куда писать). Директива category задает какую категорию сообщений в какой канал отправлять. Исходя из этого, мы имеем: запись стандартной информации в канал misc, а приходящие запросы посылаются в канал query. При этом, если файлы журнала достигают 4Мб (size 4m), он переименовывается добавлением к имени .1 и начинается запись в новый журнал, числа в конце других журналов увеличиваются. Журналы с номером, более указанного в version (в нашем случае 4) удаляются. Параметры print* определяют заносить ли в журнал время появления, важность и категорию информации. Более подробно про настройки раздела logging можно почитать в man (5) named.conf.
// настройки логирования logging { channel "misc" { file "/var/log/bind/misc.log" versions 4 size 4m; print-time yes; print-severity yes; print-category yes; }; channel "query" { file "/var/log/bind/query.log" versions 4 size 4m; print-time yes; print-severity no; print-category no; }; category default { "misc"; }; category queries { "query"; }; };
rndc - управление DNS сервером BIND 9
В то время как управление работающим сервером BIND 4 осуществлялось простой посылкой сигнала процессу (HUP - перезагрузить файл настройки и зоны; TERM - остановить; INT - сбросить базу данных в файл named_dump.db; ABRT - записать статистику в конец файла named.stats), управление сервером BIND 9 производится с помощью специальной утилиты rndc, которая соединяется с сервером (по умолчанию - TCP порт 953) и использует специальный протокол для передачи ему команд. Однако сигналы HUP, TERM пока действуют.
Настраивая сервер, необходимо обеспечить права доступа к управляющему порту (controls) и ключ (key), смотри ниже rndc-confgen.
Файл настройки rndc (/etc/rndc.conf) имеет такой же синтаксис, что и named.conf. Комментарии могут записываться в стиле C, C++ или sh. Файл настройки состоит из утверждений, завершающихся точкой с запятой. Утверждения содержат блок предложений, заключенный в фигурные скобки. Предложение в блоке также завершается точкой с запятой. Права на чтение этого файла должны быть только у того, кто имеет право запускать rndc. Предусматириваются следующие типы утверждений:
* options { o default-server имя-или-адрес-сервера; o default-key "имя-ключа"; o default-port номер-управляющего-порта; } * server имя-или-адрес-сервера { // адрес в двойных кавычках o key "имя-ключа"; o port номер-управляющего-порта; } * key "имя-ключа" o algorithm hmac-md5; o secret "base-64-кодированный-ключ"; }
Утилита rndc-confgen позволяет сгенерировать /etc/rndc.conf со случайным ключом (и закоментаренные предложения controls и key для /etc/named.conf). Следующими ключами можно модифицировать получаемый файл:
- -b размер-ключа (по умолчанию - 128; от 1 до 512)
- -k имя-ключа (по умолчанию - rndc-key)
- -p номер-управляющего-порта (по умолчанию - 953)
- -s имя-или-адрес-сервера (по умолчанию - 127.0.0.1)
Утилита rndc позволяет менять параметры соединения с сервером с помощью ключей:
- -c имя-файла-настройки
- -s имя-или-адрес-сервера
- -p номер-управляющего-порта
- -y имя-ключа
- -V (трассировка исполнения для отладки)
Если запустить rndc без указания команды, то она выдаст список поддерживаемых команд:
- reload (перезагрузить файл настройки и зоны)
- reload зона [класс [вид]] (перезагрузить зону)
- refresh зона [класс [вид]] (запланировать немедленное обновление зоны)
- reconfig (перезагрузить файл настройки и новые зоны)
- stats (записать статистику в конец файла named.stats)
- querylog (включить/выключить журнализацию запросов) - после включения в логах можно будет увидеть с какого IP приходят запросы.
- dumpdb (сбросить базу данных в файл named_dump.db, например: rndc dumpdb -all)
- stop (сохранить изменения в файлы зон и остановить сервер)
- halt (остановить сервер без сохранения изменений)
- trace (увеличить уровень отладки на 1) в файле named.run -появятся отладочные сообщения
- trace уровень (установить уровень отладки)
- notrace (отключить отладку)
- flush (сбросить весь кеш)
- flush вид (сбросить кеш для указанного вида)
- flushname (сбросить кеш для указанного домена, например, сбросить для домена mx.example.ru: rndc flushname mx.example.ru)
- status (показать состояние сервера)
- restart (перезапустить сервер; не реализовано)
Domain Name Speed Benchmark
Правильность настройки DNS сервера и его скорость вы можете проверить при помощи Domain Name Speed Benchmark. Уникальная, комплексная, точная и бесплатная утилита для Windows (и Linux/Wine) для определения точной производительности локальных и удаленных DNS-серверов имен.
Читайте также: Настройка и использование динамического DNS (Dynamic DNS), Файл hosts Назначение и Альтернативы: как управлять DNS-разрешением в Linux, Windows, FreeBSD.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах