Различия
Здесь показаны различия между двумя версиями данной страницы.
| Следующая версия | Предыдущая версия | ||
|
wiki:bind9 [2014/11/02 11:05] создано |
wiki:bind9 [2016/06/01 19:24] (текущий) [Настройка логгирования] |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Bind9 ====== | + | ====== BIND 9 ====== |
| + | <note tip>Эта статья не закончена. Вы можете помочь проекту добавив следующую информацию: | ||
| + | * описание BIND 9 | ||
| + | * ссылки на другие статьи и сайты посвященные BIND 9 | ||
| + | * wiki-разметка | ||
| + | </note> | ||
| + | В этой статье рассказывается как установить и настроить собственный кэширующий DNS-сервер BIND 9 с вымышленной зоной исключительно для локальной сети c последующим помещением его в "песочницу" [[chroot]]. | ||
| - | Устанавливаем собственный кэширующий DNS сервер (bind 9) с вымышленной зоной исключительно для локальной сети. С последующим помещением его | + | ===== Установка ===== |
| - | в "песочницу" (chroot). (Нет купленного доменного имени, но есть статический ip). | + | <style float-left>[[app>bind9|BIND 9]]</style> |
| + | [[wiki:установка_программ|Установить]] BIND 9 можно перейдя по ссылке слева или введя в терминале следующую команду: | ||
| + | <code bash>sudo apt-get install bind9</code> | ||
| - | УСТАНОВКА BIND 9 | + | ===== Помещение BIND 9 в "песочницу" ===== |
| - | + | -- Останавите демон BIND 9 | |
| - | 1. Устанавливаем Bind 9 | + | .. <code bash>/etc/init.d/bind9 stop</code> |
| - | <code> ubuntu_server:~# apt-get install bind9 | + | .. Из соображений безопасности лучше запускать BIND в chroot среде, для этого проделайте несколько простых операций. |
| - | </code> | + | -- Отредактируйте файл ///etc/init.d/bind9//, в него надо добавить строку в среде chroot которая будет находится в ///var/lib/named//. Измените строку ''OPTIONS="-u bind"'' на ''OPTIONS="-u bind -t /var/lib/named"'' |
| - | + | .. <code bash>OPTIONS="-u bind -t /var/lib/named" | |
| - | 2. Если все установилось без ошибок то останавливаем его | + | |
| - | <code> ubuntu_server:~# /etc/init.d/bind9 stop | + | |
| - | </code> | + | |
| - | Из соображений безопасности лучше запускать Bind в chroot среде, для этого | + | |
| - | проделайте несколько простых операций. | + | |
| - | + | ||
| - | 3. Отредактируйте файл /etc/init.d/bind9, туда надо добавить строку в среде chroot | + | |
| - | которая будет находится у нас в /var/lib/named. | + | |
| - | Измените строку OPTIONS="-u bind" на OPTIONS="-u bind -t /var/lib/named" | + | |
| - | <code>OPTIONS="-u bind -t /var/lib/named" | + | |
| # Set RESOLVCONF=no to not run resolvconf | # Set RESOLVCONF=no to not run resolvconf | ||
| - | RESOLVCONF=yes | + | RESOLVCONF=yes</code> |
| - | </code> | + | .. :!: Здесь важно то, что изменять надо файл в папке init.d, а не в папке default! Если не найдете в скрипте init.d, добавьте эти строки. |
| + | -- Создайте необходимые для работы BIND 9 директории. | ||
| + | .. <code bash>mkdir -p /var/lib/named/etc | ||
| + | mkdir /var/lib/named/dev | ||
| + | mkdir -p /var/lib/named/var/cache/bind | ||
| + | mkdir -p /var/lib/named/var/run/bind/run</code> | ||
| + | -- Переместите директорию с конфигурацией BIND 9 из ///etc// в ///var/lib/named/etc//: | ||
| + | .. <code bash>mv /etc/bind /var/lib/named/etc</code> | ||
| + | -- Создайте символическую ссылку на новую директорию с файлами конфигурации BIND на случай если в дальнейшем вы соберётесь обновить пакет, это поможет избежать проблем. | ||
| + | .. <code bash>ln -s /var/lib/named/etc/bind /etc/bind</code> | ||
| + | -- Создайте необходимые устройства и установите права на каталоги | ||
| + | .. <code bash>mknod /var/lib/named/dev/null c 1 3 | ||
| + | mknod /var/lib/named/dev/random c 1 8 | ||
| + | chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random | ||
| + | chown -R bind:bind /var/lib/named/var/* | ||
| + | chown -R bind:bind /var/lib/named/etc/bind</code> | ||
| + | ==== Настройка логгирования ==== | ||
| + | Для того чтобы логирование событий работало из песочницы необходимо изменить стартовый скрипт демона ''sysklogd'' для того, чтобы сообщения BIND 9 попадали в [[syslog]]. Отредактируйте файл ///etc/default/sysklogd//, измените там строку ''SYSLOGD=""'' на ''SYSLOGD="-u syslog -a /var/lib/named/dev/log"''. Опять же очень многие пытаются найти сточку SYSLOGD="" в файле /etc/init.d/sysklogd а её там нет и быть не должно – смотреть надо в директории /etc/default/sysklogd. Иногда sysklogd ругается на опцию "-u", тогда укажите SYSLOGD="-a /var/lib/named/dev/log". | ||
| + | После изменения настроек syslog перезапустите демон: | ||
| + | <code bash>/etc/init.d/sysklogd restart</code> | ||
| + | <note important>В зависимости от дистрибутива, такой службы может и не быть. Появилась служба более глобального масштаба – rsyslog объединяющая две службы syslogd и klogd. Поэтому надо идти в папку /etc/rsyslog.d и создать там файл bind-chroot.conf (владелец root, прав достаточно будет 640). | ||
| + | <code bash>touch /etc/rsyslog.d/bind-chroot.conf | ||
| + | chown root:root /etc/rsyslog.d/bind-chroot.conf | ||
| + | chmod 640 /etc/rsyslog.d/bind-chroot.conf</code> | ||
| + | Для того, чтобы BIND 9 помещенный в chroot сумел найти системный лог добавьте в созданный файл ///etc/rsyslog.d/bind-chroot.conf// только одну строчку: | ||
| + | <code>$AddUnixListenSocket /var/lib/named/dev/log</code> | ||
| + | </note> | ||
| + | Также необходимо создать папку ///var/lib/named/var/log// для последующего хранения файла с логами: | ||
| + | <code bash>mkdir /var/lib/named/var/log | ||
| + | chown root:root /var/lib/named/var/log | ||
| + | chmod 755 /var/lib/named/var/log</code> | ||
| + | ===== Настройка BIND 9 ===== | ||
| + | 1. I этап - настройка зон – создаем отдельный файл конфигураций для наших зон ( в данном случае у нас будет одна зона описывающая несуществующий домен .ex): | ||
| + | <code bash>touch /var/lib/named/etc/bind/myzones.conf | ||
| + | chown bind:bind /var/lib/named/etc/bind/myzones.conf</code> | ||
| + | 2. Теперь отредактируем файл конфигурации нашей зоны .ex (имя вашего домена) ///var/lib/named/etc/bind/myzones.conf// добавив следующее (.ex - имя вашего домена) | ||
| + | <code>zone "ex." { | ||
| + | type master; | ||
| + | file "/etc/bind/db.ex"; | ||
| + | };</code> | ||
| + | В данном случаем мы специально создаем «несуществующую зону», так как настраиваем BIND для локальной сети – основная задача настроить кэширующий ДНС с возможностью обработки локальных имен/адресов (посредством создания зоны .ex и прямой и обратной зоны для локальной сети 192.168.1.0/24) | ||
| + | 3. Теперь создадим файл зоны (прямой) для локальной сети | ||
| + | <code bash>touch /var/lib/named/etc/bind/db.ex | ||
| + | chown bind:bind /var/lib/named/etc/bind/db.ex | ||
| + | nano /var/lib/named/etc/bind/db.ex</code> | ||
| + | и заполните файл как показано ниже | ||
| + | <code> | ||
| + | 1 $TTL 86400 ; 1 day | ||
| + | 2 @ IN SOA ex. root.ex. ( | ||
| + | 3 2014110201 ; serial | ||
| + | 4 10800 ; refresh (3 hours) | ||
| + | 5 900 ; retry (15 minutes) | ||
| + | 6 604800 ; expire (1 week) | ||
| + | 7 86400 ; minimum (1 day) | ||
| + | 8 ) | ||
| + | 9 @ IN NS ns.ex. | ||
| + | 10 | ||
| + | 11 ns A 127.0.0.1 | ||
| + | 12 server A 192.168.1.1 ; адрес вашего сервера в вашей сети | ||
| + | </code> | ||
| + | <note important>Обратите внимание на так называемый серийный номер зоны(serial). Дело в том, что сервер имён не использует конфигурации с тем же серийным номером или младше чем был указан. Поэтому, всякий раз, когда Вы вносите исправления в любой из файлов зон, - обязательно "увеличивайте" этот номер на какое то значение. Я делаю так: за первую часть - беру дату последнего редактирования файла в фомате (YYYYMMDD)+ сколько раз редактировался этот файл в этот день (01,02,03,04...) best practice так сказать!</note> | ||
| + | 4. Теперь создадим файл обратной зоны для локальной сети local.rev | ||
| + | <code bash>touch /var/lib/named/etc/bind/local.rev | ||
| + | chown bind:bind /var/lib/named/etc/bind/local.rev | ||
| + | nano /var/lib/named/etc/bind/local.rev </code> | ||
| + | и заполните его: | ||
| + | <code> | ||
| + | 1 $TTL 604800 | ||
| + | 2 @ IN SOA ex. root.ex. ( | ||
| + | 3 2014110201 ; Serial | ||
| + | 4 604800 ; Refresh | ||
| + | 5 86400 ; Retry | ||
| + | 6 2419200 ; Expire | ||
| + | 7 604800 ) ; Negative Cache TTL | ||
| + | 8 ; | ||
| + | 9 @ IN NS localhost. | ||
| + | 10 1 PTR server.ex. | ||
| + | </code> | ||
| + | 5.Редактируем файл /var/lib/named/etc/bind/named.conf.options | ||
| + | <code bash>nano /var/lib/named/etc/bind/named.conf.options</code> | ||
| + | и впишите туда несколько опций усложняющих жизнь хакерам и отключим поддержку IPv6: | ||
| + | <code> | ||
| + | 1 version "My DNS v.UnKnown"; | ||
| + | 2 allow-recursion {"homenet";}; | ||
| + | 3 allow-query {any;}; | ||
| + | 4 //auth-nxdomain no; # conform to RFC1035 - закомментируем | ||
| + | 5 listen-on-v6 { none; }; # отключим поддержку IPv6 | ||
| + | </code> | ||
| + | 6. Напоследок отредактируем файл /var/lib/named/etc/named.conf | ||
| + | <code bash>nano /var/lib/named/etc/bind/named.conf</code> | ||
| + | во первых включим в конце в конец файла наш файл зон | ||
| + | <code>1 include "/etc/bind/myzones.conf";</code> | ||
| + | В начале файла, до включения файла с опциями (named.conf.options), создадим список acl для указания, что будет обслуживать наш сервер BIND, указав нашу подсеть, обратную петлю и оба ДНС провайдера | ||
| + | <code> | ||
| + | 1 acl homenet { | ||
| + | 2 192.168.1.0/24; | ||
| + | 3 127.0.0.1; | ||
| + | 4 8.8.8.8; | ||
| + | 5 8.8.4.4; | ||
| + | 6 }; | ||
| + | </code> | ||
| + | Для возможности работы передачи зоны с подписью TSIG включаем rndc.key и указываем кто сможет управлять нашим сервером и по какому порту controls | ||
| + | <code> | ||
| + | 1 include "/etc/bind/rndc.key"; | ||
| + | 2 controls { | ||
| + | 3 inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;}; | ||
| + | 4 }; | ||
| + | </code> | ||
| + | И в конце файла добавляем настройку обратной зоны для локальной сети | ||
| + | <code> | ||
| + | 1 zone "1.168.192.in-addr.arpa" { | ||
| + | 2 type master; | ||
| + | 3 file "/etc/bind/local.rev"; | ||
| + | 4 }; | ||
| + | </code> | ||
| + | и подключаем файл с нашей зоной myzones.conf | ||
| + | <code>1 include "/etc/bind/myzones.conf";</code> | ||
| + | Для того, чтобы логи собирались в отдельный файл named.log, и не "сорили" в системные файлы – создадим в нашей "песочнице" (в папке, созданной ранее /var/lib/named/var/log), файл для логов и сделаем символическую ссылку в обычную папку log: | ||
| + | <code>touch /var/lib/named/var/log/named.log | ||
| + | chown bind:bind /var/lib/named/var/log/named.log | ||
| + | chmod 666 /var/lib/named/var/log/named.log | ||
| + | ln -s /var/lib/named/var/log/named.log /var/log/bind.log</code> | ||
| + | И добавим в файл конфигурации в самый конец детальную настройку работы логов: | ||
| + | <code> | ||
| + | 1 logging { | ||
| + | 2 channel myfile { | ||
| + | 3 file "/var/log/named.log" versions 10 size 1m; | ||
| + | 4 severity dynamic; | ||
| + | 5 print-category yes; | ||
| + | 6 print-severity yes; | ||
| + | 7 print-time yes; | ||
| + | 8 }; | ||
| + | 9 category config { | ||
| + | 10 myfile; | ||
| + | 11 }; | ||
| + | 12 category default { | ||
| + | 13 myfile; | ||
| + | 14 }; | ||
| + | 15 category queries { | ||
| + | 16 myfile; | ||
| + | 17 }; | ||
| + | 18 // Вот LAME сервера лучше сразу сбрасывать в null. Достают они ну просто | ||
| + | 19 // катастрофически! (Для тех кто в танке, - это когда сервер не обслуживает | ||
| + | 20 // делегированную ему зону) | ||
| + | 21 category lame-servers { | ||
| + | 22 null; | ||
| + | 23 }; | ||
| + | 24 }; | ||
| + | </code> | ||
| + | 7. В итоге, если убрать комментарии и свести все воедино файл named.conf приобретет такой вид: | ||
| + | <code> | ||
| + | acl homenet { | ||
| + | 192.168.1.0/24; | ||
| + | 127.0.0.1; | ||
| + | 82.209.240.241; | ||
| + | 82.209.243.241; | ||
| + | }; | ||
| + | |||
| + | include "/etc/bind/named.conf.options"; | ||
| + | |||
| + | include "/etc/bind/rndc.key"; | ||
| + | |||
| + | controls { | ||
| + | inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;}; | ||
| + | }; | ||
| + | |||
| + | 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"; | ||
| + | }; | ||
| + | |||
| + | zone "0.in-addr.arpa" { | ||
| + | type master; | ||
| + | file "/etc/bind/db.0"; | ||
| + | }; | ||
| + | |||
| + | zone "255.in-addr.arpa" { | ||
| + | type master; | ||
| + | file "/etc/bind/db.255"; | ||
| + | }; | ||
| + | |||
| + | zone "1.168.192.in-addr.arpa" { | ||
| + | type master; | ||
| + | file "/etc/bind/local.rev"; | ||
| + | }; | ||
| + | |||
| + | include "/etc/bind/myzones.conf"; | ||
| + | logging { | ||
| + | channel myfile { | ||
| + | file "/var/log/named.log" versions 10 size 1m; | ||
| + | severity dynamic; | ||
| + | print-category yes; | ||
| + | print-severity yes; | ||
| + | print-time yes; | ||
| + | }; | ||
| + | |||
| + | category config { | ||
| + | myfile; | ||
| + | }; | ||
| + | category default { | ||
| + | myfile; | ||
| + | }; | ||
| + | category queries { | ||
| + | myfile; | ||
| + | }; | ||
| + | category lame-servers { | ||
| + | null; | ||
| + | }; | ||
| + | }; | ||
| + | </code> | ||
| + | <note important>Заметьте, что по умолчанию обратная зона в стандартной установке отключена и два файла конфигурации просто не задействованы: db.empty и zones.rfc1918 - с учетом того, что поддержка отключена в файле named.conf.local:</note> | ||
| + | <code> | ||
| + | 1 // Do any local configuration here | ||
| + | 2 // Consider adding the 1918 zones here, if they are not used in your | ||
| + | 3 // organization | ||
| + | 4 // include "/etc/bind/zones.rfc1918"; | ||
| + | </code> | ||
| + | <note important>Смело можно удалить все три этих файла, а из файла конфигурации named.conf, удалить в самом конце включение файла named.conf.local. Мы ведь уже создали свои файлы зон (прямую и обратную) для обслуживания локальной сети</note> | ||
| + | |||
| + | 8.Изменим файл /etc/resolv.conf, вписав туда свой домен первой строкой, в нашем случае это | ||
| + | <code> | ||
| + | 1 search ex | ||
| + | </code> | ||
| + | 9. Перезапускаем bind9 и перечитываем файлы зон | ||
| + | <code bash>/etc/init.d/bind9 restart | ||
| + | rndc reload</code> | ||
| + | У меня оказалось, что утилита nslookup и dig не установлена – пришлось поставить пакеты hosts и dnsutils командой | ||
| + | <code bash>apt-get install host dnsutils</code> | ||
| + | 10. И проверка на сервере: | ||
| + | <code bash>nslookup | ||
| + | > set q=any | ||
| + | > localhost | ||
| + | Server: 82.209.240.241 | ||
| + | Address: 82.209.240.241#53 | ||
| + | localhost | ||
| + | origin = localhost | ||
| + | mail addr = root.localhost | ||
| + | serial = 1 | ||
| + | refresh = 604800 | ||
| + | retry = 86400 | ||
| + | expire = 2419200 | ||
| + | minimum = 604800 | ||
| + | localhost nameserver = localhost. | ||
| + | Name: localhost | ||
| + | Address: 127.0.0.1 | ||
| + | |||
| + | > 127.0.0.1 | ||
| + | Server: 82.209.240.241 | ||
| + | Address: 82.209.240.241#53 | ||
| + | |||
| + | 1.0.0.127.in-addr.arpa name = localhost. | ||
| + | |||
| + | > ya.ru | ||
| + | Server: 82.209.240.241 | ||
| + | Address: 82.209.240.241#53 | ||
| + | |||
| + | Non-authoritative answer: | ||
| + | ya.ru mail exchanger = 10 mx1.yandex.ru. | ||
| + | ya.ru mail exchanger = 10 mx2.yandex.ru. | ||
| + | Name: ya.ru | ||
| + | Address: 213.180.204.8 | ||
| + | ya.ru nameserver = ns5.yandex.ru. | ||
| + | |||
| + | Authoritative answers can be found from: | ||
| + | ya.ru nameserver = ns1.yandex.ru. | ||
| + | ya.ru nameserver = ns5.yandex.ru. | ||
| + | mx1.yandex.ru internet address = 77.88.21.89</code> | ||
| + | ===== Ссылки ===== | ||
| + | * [[http://demon.of.by/blog/linux-admin/how-to-configure-bind9-debian/|ретроспектива - 2009 год]] | ||
| + | * [[http://forum.ubuntu.ru/index.php?topic=254002.msg2008320#msg2008320|Обсуждение статьи на форуме]] | ||
| + | * FIXME | ||
| + | {{tag> Администрирование FIXME bind9 dns nameserver}} | ||