BIND 9 Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:bind9 [2014/11/02 12:30]
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 
 +  .. <code bash>/​etc/​init.d/​bind9 stop</​code>​ 
 +  .. Из соображений безопасности лучше запускать BIND в chroot среде, для этого проделайте несколько простых операций. 
 +  -- Отредактируйте файл ///​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"​ 
 +# Set RESOLVCONF=no to not run resolvconf 
 +RESOLVCONF=yes</​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>​
  
-1. Устанавливаем ​Bind 9 +==== Настройка логгирования ==== 
-<​code>​ubuntu_server:​~#​ apt-get install bind9  +Для того чтобы логирование событий работало из песочницы необходимо изменить стартовый скрипт демона ''​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"​.
-</code>+
  
-2. Если все установилось без ошибок то останавливаем его +После изменения настроек ​syslog ​перезапустите демон:​ 
-<​code>​ ubuntu_server:​~#​ /​etc/​init.d/​bind9 stop +<​code ​bash>/​etc/​init.d/​sysklogd restart</​code>​ 
-</​code>​ +<note important>​В зависимости от дистрибутива,​ такой службы может и не быть. Появилась служба более глобального масштаба – rsyslog объединяющая две службы syslogd и klogd. Поэтому надо идти в папку /​etc/​rsyslog.d и создать там файл bind-chroot.conf (владелец root, прав достаточно будет 640)
-Из соображений безопасности лучше запускать Bind в chroot среде, для этого +<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>​ 
-3. Отредактируйте файл /​etc/​init.d/​bind9,​ туда надо добавить строку в среде chroot +Для того, чтобы BIND 9 помещенный в chroot сумел найти системный лог добавьте в созданный файл ///​etc/​rsyslog.d/​bind-chroot.conf//​ только одну строчку:​ 
-которая будет находится у нас в /​var/​lib/​named. +<​code>​$AddUnixListenSocket /​var/​lib/​named/​dev/​log</​code>​
-Измените строку 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 +
-RESOLVCONF=yes +
-</​code>​ +
-<note warning>​Здесь важно то, что ​изменять надо файл в папке init.d, а не в папке default! Если не найдете в скрипте init.d, добавьте эти строки.</​note>​ +
-4. Теперь создадим все необходимые для работы bind9 директории. Кому привычнее в mc, кому из консоли:​  +
-<​code>​ +
-ubuntu_server:​~# ​ mkdir -p /​var/​lib/​named/​etc +
-ubuntu_server:​~# ​ mkdir /​var/​lib/​named/​dev +
-ubuntu_server:​~# ​ mkdir -p /​var/​lib/​named/​var/​cache/​bind +
-ubuntu_server:​~# ​ mkdir -p /​var/​lib/​named/​var/​run/​bind/​run +
-</​code>​ +
-5. Переместите директорию с конфигурацией bind9 из /etc в /​var/​lib/​named/​etc:​ +
-<​code>​ubuntu_server:​~#​ mv /etc/bind /​var/​lib/​named/​etc</​code>​ +
-6. Создадим символическую ссылку на новую директорию с файлами конфигурации bind на случай если в дальнейшем вы соберётесь обновить ​пакет, это поможет избежать проблем. +
-<​code>​ubuntu_server:​~#​ ln -s /​var/​lib/​named/​etc/​bind /​etc/​bind</​code>​ +
-7. Создадим необходимые ​устройства ​и установим права на каталоги +
-<​code>​ +
-ubuntu_server:​~#​ mknod /​var/​lib/​named/​dev/​null c 1 3 +
-ubuntu_server:​~#​ mknod /​var/​lib/​named/​dev/​random c 1 8 +
-ubuntu_server:​~#​ chmod 666 /​var/​lib/​named/​dev/​null /​var/​lib/​named/​dev/​random +
-ubuntu_server:​~#​ chown -R bind:bind /​var/​lib/​named/​var/​* +
-ubuntu_server:​~#​ chown -R bind:bind /​var/​lib/​named/​etc/​bind +
-</​code>​ +
-8. Далее надо немного изменить стартовый скрипт демона sysklogd для того что бы сообщения bind попадали в 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"​.  +
- +
-И перезапуск службы+
-<​code>​ubuntu_server:​~# ​/​etc/​init.d/​sysklogd restart</​code>​ +
-<note important>​ +
-В зависимости от дистрибутива,​ такой службы может и не быть. Появилась служба более глобального масштаба – rsyslog объединяющая две службы syslogd и klogd. Поэтому надо идти в папку /​etc/​rsyslog.d и создать там файл bind-chroot.conf (владелец root, прав достаточно будет 640)+
 </​note>​ </​note>​
-<​code>​ +Также необходимо создать папку ​///​var/​lib/​named/​var/​log// для последующего хранения файла с логами:​ 
-ubuntu_server:​~#​ touch /​etc/​rsyslog.d/​bind-chroot.conf +<​code ​bash>mkdir /​var/​lib/​named/​var/​log 
-ubuntu_server:​~#​ chown root:root /​etc/​rsyslog.d/​bind-chroot.conf +chown root:root /​var/​lib/​named/​var/​log 
-ubuntu_server:​~#​ chmod 640 /​etc/​rsyslog.d/​bind-chroot.conf +chmod 755 /​var/​lib/​named/​var/​log</​code>​
-ubuntu_server:​~#​ vim /​etc/​rsyslog.d/​bind-chroot.conf +
-</​code>​ +
-Для того, чтобы Bind 9  помещенный в chroot сумел найти системный лог добавьте в этот файл только одну строчку:​ +
-<​code>​$AddUnixListenSocket /​var/​lib/​named/​dev/​log</​code>​ +
-Далее приступим к настройке самого сервера имен. Заранее необходимо создать папку /​var/​lib/​named/​var/​log для последующего хранения файла с логами:​ +
-<​code>​ +
-ubuntu_server:​~# ​mkdir /​var/​lib/​named/​var/​log +
-ubuntu_server:​~# ​chown root:root /​var/​lib/​named/​var/​log +
-ubuntu_server:​~# ​chmod 755 /​var/​lib/​named/​var/​log +
-</​code>​ +
-Вот теперь можно приступать к настройке DNS сервера. +
- +
-НАСТРОЙКА BIND 9+
  
 +===== Настройка BIND 9 =====
 1. I этап - настройка зон – создаем отдельный файл конфигураций для наших зон ( в данном случае у нас будет одна зона описывающая несуществующий домен .ex): 1. I этап - настройка зон – создаем отдельный файл конфигураций для наших зон ( в данном случае у нас будет одна зона описывающая несуществующий домен .ex):
-<​code>​ +<​code ​bash>touch /​var/​lib/​named/​etc/​bind/​myzones.conf 
-ubuntu_server:​~# ​touch /​var/​lib/​named/​etc/​bind/​myzones.conf +chown bind:bind /​var/​lib/​named/​etc/​bind/​myzones.conf</​code>​ 
-ubuntu_server:​~# ​chown bind:bind /​var/​lib/​named/​etc/​bind/​myzones.conf +2. Теперь отредактируем файл конфигурации нашей зоны .ex (имя вашего домена) ​///​var/​lib/​named/​etc/​bind/​myzones.conf/​/ добавив следующее (.ex - имя вашего домена) 
-</​code>​ +<​code>​zone "​ex."​ {
-2. Теперь отредактируем файл конфигурации нашей зоны .ex (имя вашего домена) +
-<​code>​ +
-ubuntu_server:​~#​ nano /​var/​lib/​named/​etc/​bind/​myzones.conf +
-</code> +
-в файл вносим следующее (.ex - имя вашего домена) +
-<​code>​ +
-zone "​ex."​ {+
      type master;      type master;
      file "/​etc/​bind/​db.ex";​      file "/​etc/​bind/​db.ex";​
-}; +};</​code>​
-</​code>​+
 В данном случаем мы специально создаем «несуществующую зону», так как настраиваем BIND для локальной сети – основная задача настроить кэширующий ДНС с возможностью обработки локальных имен/​адресов (посредством создания зоны .ex и прямой и обратной зоны для локальной сети 192.168.1.0/​24) В данном случаем мы специально создаем «несуществующую зону», так как настраиваем BIND для локальной сети – основная задача настроить кэширующий ДНС с возможностью обработки локальных имен/​адресов (посредством создания зоны .ex и прямой и обратной зоны для локальной сети 192.168.1.0/​24)
  
 3. Теперь создадим файл зоны (прямой) для локальной сети 3. Теперь создадим файл зоны (прямой) для локальной сети
-<​code>​ +<​code ​bash>touch /​var/​lib/​named/​etc/​bind/​db.ex 
-ubuntu_server:​~# ​touch /​var/​lib/​named/​etc/​bind/​db.ex +chown bind:bind /​var/​lib/​named/​etc/​bind/​db.ex 
-ubuntu_server:​~# ​chown bind:bind /​var/​lib/​named/​etc/​bind/​db.ex +nano /​var/​lib/​named/​etc/​bind/​db.ex</​code>​
-ubuntu_server:​~# ​nano /​var/​lib/​named/​etc/​bind/​db.ex +
-</​code>​+
 и заполните файл как показано ниже и заполните файл как показано ниже
 <​code>​ <​code>​
Строка 109: Строка 86:
 <note important>​Обратите внимание на так называемый серийный номер зоны(serial). Дело в том, что сервер имён не использует конфигурации с тем же серийным номером или младше чем был указан. Поэтому,​ всякий раз, когда Вы вносите исправления в любой из файлов зон, - обязательно "​увеличивайте"​ этот номер на какое то значение. Я делаю так: за первую часть - беру дату последнего редактирования файла в фомате (YYYYMMDD)+ сколько раз редактировался этот файл в этот день (01,​02,​03,​04...) best practice так сказать!</​note>​ <note important>​Обратите внимание на так называемый серийный номер зоны(serial). Дело в том, что сервер имён не использует конфигурации с тем же серийным номером или младше чем был указан. Поэтому,​ всякий раз, когда Вы вносите исправления в любой из файлов зон, - обязательно "​увеличивайте"​ этот номер на какое то значение. Я делаю так: за первую часть - беру дату последнего редактирования файла в фомате (YYYYMMDD)+ сколько раз редактировался этот файл в этот день (01,​02,​03,​04...) best practice так сказать!</​note>​
 4. Теперь создадим файл обратной зоны для локальной сети local.rev 4. Теперь создадим файл обратной зоны для локальной сети local.rev
-<​code>​ +<​code ​bash>touch /​var/​lib/​named/​etc/​bind/​local.rev 
-ubuntu_server:​~# ​touch /​var/​lib/​named/​etc/​bind/​local.rev +chown bind:bind /​var/​lib/​named/​etc/​bind/​local.rev 
-ubuntu_server:​~# ​chown bind:bind /​var/​lib/​named/​etc/​bind/​local.rev +nano /​var/​lib/​named/​etc/​bind/​local.rev </​code>​
-ubuntu_server:​~# ​nano /​var/​lib/​named/​etc/​bind/​local.rev ​ +
-</​code>​+
 и заполните его: и заполните его:
 <​code>​ <​code>​
Строка 128: Строка 103:
 </​code>​ </​code>​
 5.Редактируем файл /​var/​lib/​named/​etc/​bind/​named.conf.options 5.Редактируем файл /​var/​lib/​named/​etc/​bind/​named.conf.options
-<​code>​ubuntu_server:​~# ​nano /​var/​lib/​named/​etc/​bind/​named.conf.options</​code>​+<​code ​bash>nano /​var/​lib/​named/​etc/​bind/​named.conf.options</​code>​
 и впишите туда несколько опций усложняющих жизнь хакерам и отключим поддержку IPv6:  и впишите туда несколько опций усложняющих жизнь хакерам и отключим поддержку IPv6: 
 <​code>​ <​code>​
Строка 138: Строка 113:
 </​code>​ </​code>​
 6. Напоследок отредактируем файл /​var/​lib/​named/​etc/​named.conf 6. Напоследок отредактируем файл /​var/​lib/​named/​etc/​named.conf
-<​code>​ubuntu_server:​~# ​nano /​var/​lib/​named/​etc/​bind/​named.conf</​code>​+<​code ​bash>nano /​var/​lib/​named/​etc/​bind/​named.conf</​code>​
 во первых включим в конце в конец файла наш файл зон во первых включим в конце в конец файла наш файл зон
 <​code>​1 ​ include "/​etc/​bind/​myzones.conf";</​code>​ <​code>​1 ​ include "/​etc/​bind/​myzones.conf";</​code>​
Строка 167: Строка 142:
 <​code>​1 ​ include "/​etc/​bind/​myzones.conf";</​code>​ <​code>​1 ​ include "/​etc/​bind/​myzones.conf";</​code>​
 Для того, чтобы логи собирались в отдельный файл named.log, и не "​сорили"​ в системные файлы – создадим в нашей "​песочнице"​ (в папке, созданной ранее /​var/​lib/​named/​var/​log),​ файл для логов и сделаем символическую ссылку в обычную папку log:  Для того, чтобы логи собирались в отдельный файл named.log, и не "​сорили"​ в системные файлы – создадим в нашей "​песочнице"​ (в папке, созданной ранее /​var/​lib/​named/​var/​log),​ файл для логов и сделаем символическую ссылку в обычную папку log: 
-<​code>​ +<​code>​touch /​var/​lib/​named/​var/​log/​named.log 
-ubuntu_server:​~# ​touch /​var/​lib/​named/​var/​log/​named.log +chown bind:bind /​var/​lib/​named/​var/​log/​named.log 
-ubuntu_server:​~# ​chown bind:bind /​var/​lib/​named/​var/​log/​named.log +chmod 666 /​var/​lib/​named/​var/​log/​named.log 
-ubuntu_server:​~# ​chmod 666 /​var/​lib/​named/​var/​log/​named.log +ln -s /​var/​lib/​named/​var/​log/​named.log /​var/​log/​bind.log</​code>​
-ubuntu_server:​~# ​ln -s /​var/​lib/​named/​var/​log/​named.log /​var/​log/​bind.log +
-</​code>​+
 И добавим в файл конфигурации в самый конец детальную настройку работы логов: И добавим в файл конфигурации в самый конец детальную настройку работы логов:
 <​code>​ <​code>​
Строка 286: Строка 259:
 </​code>​ </​code>​
 9. Перезапускаем bind9 и перечитываем файлы зон 9. Перезапускаем bind9 и перечитываем файлы зон
-<​code>​ +<​code ​bash>/​etc/​init.d/​bind9 restart 
-ubuntu_server:​~# ​/​etc/​init.d/​bind9 restart +rndc reload</​code>​
-ubuntu_server:​~# ​rndc reload +
-</​code>​+
 У меня оказалось,​ что утилита nslookup и dig не установлена – пришлось поставить пакеты hosts и dnsutils командой У меня оказалось,​ что утилита nslookup и dig не установлена – пришлось поставить пакеты hosts и dnsutils командой
-<​code>​ +<​code ​bash>apt-get install host dnsutils</​code>​
-ubuntu_server:​~# ​apt-get install host dnsutils +
-</​code>​+
 10. И проверка на сервере:​ 10. И проверка на сервере:​
-<​code>​ +<​code ​bash>​nslookup
-ubuntu_server:​~# ​nslookup+
 > set q=any > set q=any
 > localhost > localhost
Строка 333: Строка 301:
 ya.ru   ​nameserver = ns1.yandex.ru. ya.ru   ​nameserver = ns1.yandex.ru.
 ya.ru   ​nameserver = ns5.yandex.ru. ya.ru   ​nameserver = ns5.yandex.ru.
-mx1.yandex.ru ​  ​internet address = 77.88.21.89 +mx1.yandex.ru ​  ​internet address = 77.88.21.89</​code>​
-</​code>​ +
- +
-**Настройка BIND 9 в chroot для ubuntu/​debian завершена!** +
- +
- +
- +
- +
- +
- +
- +
- +
- +
  
 +===== Ссылки =====
 +  * [[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}}