Ubuntu server dns сервер

Ubuntu server dns сервер

Настройка DNS сервера на Ubuntu

В этой статье мы рассмотрим один из вариантов развертывания 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:

Теперь можно создать ключ для того, чтобы другие демоны могли обновлять 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

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

Вы увидите примерно такое содержимое, кде значение "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 — тут указываем вышестоящие серверы имен. Их количество не ограничено, при недоступности одного из них запросы будут пересылаться на следующий в списке. Я указал DNS своего провайдера и Google Public DNS;
  • lisnen-on — адреса локальных интерфейсов, на которые сервер будет принимать DNS-запросы клиентов.

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

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

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

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

Читайте также:  Антивирус на 3 устройства

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

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

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

Теперь нам надо указать своему серверу использовать в качестве DNS самого себя. Делать это он будет по loopback-интерфейсу. Для этого нам надо изменить файл /etc/resolv.conf, но менять его самостоятельно смысла нет, поскольку перезагрузки его всеравно исправит network manager. Поэтому мы будем редактировать /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
@ IN SOA ubunturoute.ordaupfin.local. root.ubunturoute.ordaupfin.local. (
20150122 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ 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";
allow-update < key DHCP_UPDATER; >;
>;

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

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

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

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

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

Name: ubunturoute.ordaupfin.local
Address: 192.168.0.231

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

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

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

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

Если статья показалась полезной, поделитесь ей в соц сетях, кнопки которых расположены ниже

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

Для примера, используется Ubuntu Server 16.04 LTS. Инструкция во многом подойдет для дистрибутивов Linux, основанных на Debian.

Подготовка системы

Если в системе настроен брандмауэр, добавляем правило на разрешение входящих пакетов на 53 UDP-порт:

iptables -I INPUT 1 -p udp —dport 53 -j ACCEPT

* данной командой мы вставляем первое правило на разрешение 53 порта по протоколу UDP.

Установка и запуск

Устанавливаем DNS-сервер следующей командой:

apt-get install bind9 dnsutils

Добавляем сервис в автозапуск:

systemctl enable bind9

* или для старых систем, где нет systemd update-rc.d bind9 defaults.

systemctl start bind9

* или service bind9 start.

Проверяем, что сервис работает:

nslookup dmosk.ru 127.0.0.1

Получаем, что-то на подобие:

Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
Name: dmosk.ru
Address: 90.156.242.197

Базовая настройка

Основной конфигурационный файл находится по пути /etc/bind/named.conf. В последних версиях bind в нем ничего не настраивается, а используются подключаемые файлы.

По умолчанию, сервер разрешает только локальные запросы. Чтобы разрешить обращаться к серверу, открываем конфигурационный файл:

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

* в данном примере будут разрешены запросы для всех клиентов (внутренних и внешних). Вместо any можно прописать конкретные сети или IP-адреса.

Если необходимо настроить сервер только для локальной сети, настройка будет следующей:

* где 192.168.0.0/24 — используемая локальная сеть.

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

* в данном примере запросы будут перенаправляться на сервер 77.88.8.8 и если они не будут обработаны — на 8.8.8.8.

systemctl restart bind9

* или service bind9 restart.

На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns.

Проверить его работу можно с удаленного компьютера Windows или Linux командой:

nslookup ubuntu.com 192.168.0.15

* где 192.168.0.15 — адрес сервера в локальной сети.

Создание и настройка зон

Если необходимо, чтобы bind разрешал записи для собственного домена, необходимо создать соответствующую зону.

Читайте также:  Mag 250 android прошивка

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

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

Настройка DNS в Ubuntu через GUI

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

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

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

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

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

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

Поле этого нажмите "Сохранить" и "Закрыть". Теперь можете переподключитесь к этому соединению и можете проверять текущий DNS сервер:

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

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

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

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

sudo vi /etc/network/interfaces

auto enp0s3
iface enp0s3 inet dhcp

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

Здесь адрес 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

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

sudo systemctl restart networking

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

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

Выводы

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

Ссылка на основную публикацию
Adblock detector