Bind9 ubuntu настройка внутренней и внешней зоны. Создание зон прямого и обратного просмотра. Настройка соединения PPPoE

В этой статье мы рассмотрим один из вариантов развертывания DNS сервера для локальной сети на базе Ubuntu (у меня 14.04.3 LTS) и bind9. Для большинства других дистрибутивов отличия будут минимальны, для Debian-подобных их не будет совсем. Если вы уже ознакомились с предыдущей статьей по настройке DHCP сервера , то знаете, что изначально у меня был установлен неподдерживаемый дистрибутивом dnsmasq, который было решено заменить. Поскольку в прошлый раз я удалил dnsmasq (а он был как DHCP, так и DNS - сервером, который, кстати, не был должным образом сконфигурирован и не работал), то появилась потребность в DNS, чем я и решил на досуге заняться. Настройка DNS занимает немногим больше времени, но только из-за большего числа конфигурационных файлов.

И так, приступим. Первым делом актуализируем систему (обновим пакеты):

sudo apt-get update && sudo apt-get upgrade -y

Теперь установим DNS сервер bind9:

sudo apt-get install bind9

Теперь можно создать ключ для того, чтобы другие демоны могли обновлять DNS-записи этого сервера. Это могут быть как другие серверы в сети, так и другие сервисы этого же сервера. У меня это будет локально же установленный DHCP сервер. В теории, безопасности для, каждому сервису или серверу нужно сгенерировать свой ключ, тогда при компрометации одного из них, его можно просто заблокировать, а остальные продолжат работать. Но в моем случае обновлять записи будет только мой же DHCP сервер, так что я генерирую только один ключ:

dnssec-keygen -a HMAC-MD5 -b 128 -r /dev/urandom -n USER DHCP_UPDATER

В домашнем каталоге пользователя, от которого была запущена команда появится 2 файла:

Rw------- 1 user user 54 янв. 21 12:17 Kdhcp_updater.+157+55379.key
-rw------- 1 user user 165 янв. 21 12:17 Kdhcp_updater.+157+55379.private

Файлы пусть так и лежат, они не потеряются. Чтобы посмотреть необходимый ключ, выполните:

tail Kdhcp_updater*.private

Вы увидите примерно такое содержимое, кде значение "Key" и есть требуемый ключ:

Для начала сделаем наш DNS сервер кэширующим сервером имен, то есть заставим его разрешать доменные имена, запрашивая их у вышестоящего сервера. При первом запросе доменного имени от клиента сервер будет пересылать запрос на вышестоящий сервер, а затем уже будет возвращать его из своего кэша, что несколько увеличит скорость обработки DNS-запросов для клиентов в нашей сети. Так же мы укажем серверу, на каких адресах наш DNS будет обслуживать клиентов. Для этого нужно отредактировать файл /etc/bind/named.conf.options:

sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options.dist && sudo nano /etc/bind/named.conf.options

Добавим туда следующие строки:

forwarders {
212.120.160.130;
8.8.8.8;
};
listen-on {
127.0.0.1;
192.168.0.231;
};

Рассмотри эти секции:

  • forwarders - тут указываем вышестоящие серверы имен. Их количество не ограничено, при недоступности одного из них запросы будут пересылаться на следующий в списке. Я указал DNS своего провайдера и Google Public DNS;
  • lisnen-on - адреса локальных интерфейсов, на которые сервер будет принимать DNS-запросы клиентов.

В nano это выглядит примерно так:

Сохраняем конфигурацию. Теперь можно перезапустить DNS службу:

sudo service bind9 restart

Теперь наш сервер работает в качестве кэширующего DNS, что уже позволяет указать его в качестве DNS-сервера любому клиенту в нашей сети. Проверим его работу, для этого сгодится любой компьютер в сети или сам сервер. Я покажу на примере рабочей станции с Windows 7. Нажимаем Win+R, в появившемся окне пишем cmd, запустится командная оболочка windows. Пишем туда следующее:

nslookup - 192.168.0.231

Вы, естественно, пишете IP своего сервера. Запустится консольная утилита диагностики DNS для Windows - nslookup, а в качестве DNS сервера будет использован не системный DNS, а указанный в параметре. Nslookup хорош тем, что отсылает запросы на требуемый сервер минуя DNS-кэш Windows. Первым делом проверим работоспособность прямых DNS запросов:

Затем работоспособность обратных запросов:

В cmd.exe выглядит примерно так:

Если у Вас все точно так же, значит Ваш DNS уже отлично работает в качестве кэширующего сервера. В случае с google.ru мы так же можем видеть, что наш сервер способен разрешать и IPv6.

Теперь нам надо указать своему серверу использовать в качестве DNS самого себя. Делать это он будет по loopback-интерфейсу. Для этого нам надо изменить файл /etc/resolv.conf, но менять его самостоятельно смысла нет, поскольку перезагрузки его всеравно исправит network manager. Поэтому мы будем редактировать /etc/network/interfaces:

sudo nano /etc/network/interfaces

Находим там секцию с интерфейсом локальной сети (у меня это eth0) и добавляем или изменяем следующие строки:

dns-nameservers 127.0.0.1
dns-search ordaupfin.local

*вместо ordaupfin.local Вы указываете свой домен или рабочую группу.

Должно получиться примерно как у меня:

Теперь, если Вы находитесь непосредственно за консолью сервера физически, достаточно перезапустить сервис networking командой:

sudo service networking restart

А если вы подключены к серверу по SSH (как я), то активная сессия не позволит сервису перезапуститься, поэтому сервер придется перезагрузить:

Теперь можно проверить, действительно ли сервер направляет DNS-запросы самому себе, в терминал пишем:

Если в последних строчках пишет SERVER: 127.0.0.1 - значит все настроено правильно. Вот как должен выглядеть выхлоп dig на google.ru:

Если вы выполните dig google.ru повторно, то увидите, что время выполнение запроса существенно сократилось. Это связано с тем, что все последующие запросы по тому же домену сервер будет брать из кэша, не пересылая запрос на вышестоящий сервер.

Наш DNS сервер хорошо справляется с разрешением имен на внешних адресах, но он абсолютно ничего не знает о клиентах в локальной сети. Для того, чтобы он мог разрешать имена локальных машин и устройств, нужно настроить его в качестве первичного мастера для своей сети. Более того, это необходимо для полноценного функционирования сети.

Создаем зону прямого просмотра. Сервер уже содержит типовые файлы настроек, поэтому их нужно лишь скопировать в рабочую директорию и изменить под себя. Я использую свои данные, Вы, само собой, должны подставить свои. Копируем файл конфигурации зоны прямого просмотра и открываем его на редактирование:

sudo cp /etc/bind/db.local /var/lib/bind/db.ordaupfin.local && sudo nano /var/lib/bind/db.ordaupfin.local

Приведем его к такому виду (не забываем указывать свои данные вместо исходных):

; BIND data file for local loopback interface
;
$TTL 604800
20150122 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
;
@ IN NS ubunturoute.ordaupfin.local.
@ IN A 192.168.0.231
@ IN AAAA::1
ubunturoute IN A 192.168.0.231

Теперь подобным образом создаем и редактируем файл зоны обратного просмотра:

sudo cp /etc/bind/db.127 /var/lib/bind/db.192 && sudo nano /var/lib/bind/db.192

И приводим его к следующему виду:

; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ubunturoute.ordaupfin.local. root.ubunturoute.ordaupfin.local. (
20150122 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800) ; Negative Cache TTL
;
@ IN NS ubunturoute.
231 IN PTR ubunturoute.ordaupfin.local.

Обратите, пожалуйста, внимание на то, что "231", с которого начинается последняя строка - это последняя секция в IP-адресе моего сервера, В вашем случае, она, скорей всего, будет иной.

Теперь эти зоны нужно прописать в основную конфигурацию сервера, чтобы при последующем запуске он знал об их существовании. Для этого открываем на редактирование /etc/bind/named.conf.local

sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.local.dist && sudo nano /etc/bind/named.conf.local

И добавляем туда такое содержимое:

key DHCP_UPDATER {
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret "s5Efp/-/-/-/wQtvg9rR7Q==";
};

zone "ordaupfin.local" {
type master;
file "/var/lib/bind/db.ordaupfin.local";
};

zone "0.168.192.in-addr.arpa" {
type master;
file "/var/lib/bind/db.192";
allow-update { key DHCP_UPDATER; };
};

  • key DHCP_UPDATER - информация для обновления записей, сюда Вы вписываете сгенерированный ранее свой ключ;
  • zone "ordaupfin.local" - зона прямого просмотра;
  • zone "0.168.192.in-addr.arpa" - зона обратного просмотра.

Выглядеть будет примерно так:

Сохраняем и перезапускаем сервер:

sudo service bind9 restart

Проверяем работу сервера:

nslookup ubunturoute.ordaupfin.local

Выхлоп должен быть таким:

Server: 127.0.0.1
Address: 127.0.0.1#53

Name: ubunturoute.ordaupfin.local
Address: 192.168.0.231

Подобным образом проверяем работоспособность зоны обратного просмотра:

nslookup 192.168.0.231

И получаем:

Server: 127.0.0.1
Address: 127.0.0.1#53

231.0.168.192.in-addr.arpa name = ubunturoute.ordaupfin.local.

Если у Вас все точно так, дело почти сделано. Почти, потому что теперь нам надо, чтобы наш DHCP сервер мог обновлять DNS-записи при появлении новых клиентов. Я буду рассматривать настройку на примере установленного у меня isc-dhcp-server. Редактируем /etc/dhcp/dhcpd.conf:

sudo nano /etc/dhcp/dhcpd.conf

И вставляем туда следующее содержимое:

ddns-update-style interim;
update-static-leases on;
key DHCP_UPDATER {
algorithm hmac-md5;
secret "s5EfpF53BBE9/-/tvg9rR7Q==";
} zone ordaupfin.local. {
primary 127.0.0.1;
key DHCP_UPDATER;
} zone 0.168.192.in-addr.arpa. {
primary 127.0.0.1;
key DHCP_UPDATER;
}

Вы, конечно, должны подставить свои значения. После этого перезапустим DNS и DHCP сервер. Если сервер запустился без ошибок - все отличено. Если сервер не запускается - внимательно смотрим в конфиги, кроме того в диагностике ошибок Вам очень поможет syslog:

tail -f /var/log/syslog

Спасибо за внимание!

Предложения и обсуждения данной статьи ведется в комментариях

Сегодня мы поговорим о настройке, пожалуй, самого популярного DNS сервера bind9 . Следуйте инструкции, и у Вас всё получится, в этом нет ничего сложного. В этом примере Вы увидите как формируются файлы зон и проследите процесс простой настройки, не вдаваясь при этом в подробности. Это лишь небольшое HowTo , призванное помочь Вам понять принцип работы DNS сервера. Если же Вы настраиваете DNS сервер на шлюзе в сегменте Вашей локальной сети, то в конце статьи Вы увидите как сделать Ваш DNS сервер кэширующим , что позволит существенно сократить время повторного запроса к NS серверам, ведь посещённые адреса будут браться из Вашего локального кэша. Ну что ж, приступим.

Если у Вас ещё не установлен bind9, проделаем это:

Отредактируем файл /etc/init.d/sysklogd, он должен выглядеть следующим образом:

Теперь непосредственно создадим наш файл зоны сайт в той же папке /etc/bind:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$ORIGIN сайт.
$TTL 86400 ; 1 day
@ IN SOA сайт. root.сайт. (
2008082859 ; serial
14400 ; refresh (4 h)
3600 ; retry (1 h)
2592000 ; expire (4w2d)
600 ; minimum (10 minute)
NS ns1.сайт.
NS ns2.bla-bla-bla.com.
сайт. A 192.168.0.1
*.сайт. CNAME @
сайт. MX 10 mail.сайт.
mail.сайт. A 192.168.0.1
ns1 A 192.168.0.1

Где 192.168.0.1 — IP Вашего сервера, MX запись нам нужна если Вы поднимаете на своем сервере почтовый сервер. ns1.сайт — наш DNS сервер. Так как для функционирования DNS сервера требуется помимо master ns сервер и slave , прописываем его — ns2.bla-bla-bla.com . Естественно у Вас он должен быть на стороннем сервере, либо если у Вас есть ещё выделенный IP для Вашего сервера, то задача упрощается. Для сервера, находящегося в локальной сети и выдающего имена только в локальную сеть (к примеру у Вас установлен web-сервер, обслуживающий Вашу сеть и настроены виртуальные хосты), достаточно лишь прописать ns1, т.е. адрес Вашего DNS сервера. 2008082859 — смените на текущую дату.

Выставим нужные права на файл зоны сайт :

chown bind:bind /etc/bind/сайт

Отредактируем файл конфигурации bind /etc/bind/named.conf, включив в него конфигурацию для наших зон, добавим в конец файла:

Ну и обновим конфигурацию bind командой:

Если у Вас DNS сервер установлен на шлюзе в Вашей локальной сети, сделаем его кэширующим. Открываем файл /etc/bind/named.conf.options и раскомментируем следующую строку:

forwarders {
...
};

Добавим в неё IP адреса DNS серверов к которым будет обращаться наш сервер, с большой долей вероятности у Вашего провайдера есть свои DNS сервера, укажем их первыми, тем самым экономя трафик:

При настройке на slave сервере myzones.conf примет такой вид:

На этом всё, настройка закончена. ;) Удачи!

Сервера DNS используются системой для преобразования сложных для запоминания IP адресов в простые доменные имена. Это делается потому что людям сложно запоминать несколько никак не связанных цифр, но очень просто запомнить слово.

Когда компьютеру нужно узнать IP адрес какого-либо домена, он отправляет запрос известному ему DNS серверу. Эти сервера могут быть получены автоматически от роутера по DHCP или же заданы в ручную. В этой статье мы рассмотрим как выполняется настройка DNS Ubuntu 16.04 и более старых версиях.

Раньше, для настройки DNS серверов, которые будут использоваться системой было достаточно внести адреса нужных серверов в файл /etc/resolv.conf. Но сейчас всей конфигурацией сети в Ubuntu управляет NetworkManager, а этот файл теперь представляет собой только ссылку на файл NetworkManager.

Этот способ до сих пор работает, но в нем вы можете настроить DNS на LiveCD, или до перезагрузки. После перезагрузки все настройки собьются и придется все делать заново. Поэтому, чтобы все сохранилось нужно выполнять все действия через интерфейс NetworkManager. Сначала откройте контекстное меню для значка сети на панели и выберите "Изменить подключения" :

Выберите ваше подключение и нажмите "Изменить" :

В открывшемся окне перейдите на вкладку "Параметры IPv4" :

Затем, в поле "Способ настройки" выберите "Автоматически (DHCP, только адрес)" :

Теперь немного ниже появиться поле "Серверы DNS" , где вам нужно прописать нужные серверы, можно несколько адресов через запятую. Например, можно указать сервера от Google:

Собственно, это все, но есть еще один способ настройки через консоль, если этот не сработал или вы предпочитаете работать из консоли.

Настройка DNS через терминал Ubuntu

В Ubuntu есть унифицированный интерфейс настройки сети, который настраивается через конфигурационный файл /etc/network/interfaces. Сначала смотрим список сетевых интерфейсов:

ls /sys/class/net/

Откройте файл для редактирования и найдите в нем имя своего сетевого интерфейса, например, auto enp0s3, если такой секции нет, ее нужно добавить:

sudo vi /etc/network/interfaces

auto enp0s3
iface enp0s3 inet dhcp

Затем, добавьте в эту секцию строчку:

dns-nameserver 8.8.8.8

Здесь адрес 8.8.8.8 - это адрес вашего DNS сервера. Но эта настройка сработает, только если ваш DHCP клиент не пытается назначить адрес самостоятельно. Чтобы указать DNS адрес на уровне DHCP сервера нужно добавить такую строчку в конфигурационный файл /etc/dhcp/dhclient.conf:

sudo vi /etc/dhcp/dhclient.conf

supersede domain-name-servers 8.8.8.8

Здесь тоже адрес 8.8.8.8 означает адрес DNS сервера. Для верности, вы можете добавить свои адреса DNS серверов в файл /etc/resolvconf/resolv.conf.d/base:

sudo vi /etc/resolvconf/resolv.conf.d/base

nameserver 8.8.8.8

Чтобы настройки вступили в силу необходимо перезапустить сеть:

sudo systemctl restart networking

Возможно, даже лучше будет если вы полностью перезагрузите компьютер. Теперь вы можете открыть /etc/resolv.conf и посмотреть применялся ли новый адрес DNS:

Как видите, в моем примере все заработало. Подобно этому выполняется настройка dns linux для любого дистрибутива.

Выводы

В этой небольшой статье мы рассмотрели как выполняется настройка DNS Ubuntu 16.04 через графический интерфейс или терминал. В Ubuntu автоматической настройкой DNS могут заниматься множество утилит и это создает некоторые проблемы при настройке, но со всем можно разобраться. Надеюсь, эта информация была полезной для вас.

Об авторе

Основатель и администратор сайта сайт, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.

Сегодня продолжим цикл статей по настройке сервера и рассмотрим что же из себя представляет настройка DNS сервера Ubuntu. У нас уже есть сервер на базе ubuntu 14.04.1 LTS, на нем настроен DHCP сервер. Сегодня мы туда добавим еще и службу DNS.

Для начала давайте разберемся для чего он нам нужен. DNS – это система доменных имен, предназначенная для получения ip адреса компьютера по его имени и наоборот, имени по ip адресу. Т.е. зная имя компьютера, вам не нужно запоминать его ip, для последующего обращения. Служба была создана в связи с расширением сети и появлением огромного множества ip адресов, которые просто невозможно запомнить с первого раза.

По многочисленным просьбам читателей, я еще раз перепроверил все пункты и нашел некоторые ньюансы из-за которых сервер некорректно работал (изначально статья была написана для ubuntu server 11.04). Статья полностью переписана и проверена на Ubuntu Server 14.04.1



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: