Канал на Youtube


Бесплатная техподдержка !

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


  Сегодня Вадим расскажет нам о настройке DNS сервера в Linux. Для начала, поговорим немного о том, для чего это нужно и как работает? DNS (Domain Name System - Система Доменных Имен) очень важна для работы Интернета, так как для соединения с конечным узлом (компьютером) необходима информация о его IP-адресе, а для людей проще запоминать буквенные (обычно осмысленные) адреса, чем последовательность цифр IP-адреса.

  Чтобы мы могли использовать такие удобные имена как sebeadmin, а не адрес вида 91.204.74.143, была давным-давно придумана DNS. В некоторых случаях это позволяет использовать виртуальные серверы, например, HTTP-серверы, различая их по имени запроса.

  Первоначально преобразование между доменными и IP-адресами производилось с использованием специального текстового файла hosts, который составлялся централизованно и автоматически рассылался на каждую из машин в своей локальной сети.

  С ростом Сети возникла необходимость в эффективном и автоматизированном механизме, которым и стала DNS. Хотя этот файл можно использовать и сейчас, он имеет больший приоритет при получении IP адреса чем DNS, т.е. сначала идет обращение в DNS кэш, потом в файл hosts и в самом конце - на внешний сервер DNS.

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

  • Распределённость администрирования. Ответственность за разные части иерархической структуры несут разные люди или организации. Т.е. нельзя так просто взять и отключить целый домен.
     
  • Распределённость хранения информации. Каждый узел сети в обязательном порядке должен хранить только те данные, которые входят в его зону ответственности и (возможно) адреса корневых DNS-серверов. Сервера отвечают только за свою зону или за ее часть.
     
  • Кеширование информации. Узел может хранить некоторое количество данных не из своей зоны ответственности для уменьшения нагрузки на сеть.
     
  • Иерархическая структура, в которой все узлы объединены в дерево, и каждый узел может или самостоятельно определять работу нижестоящих узлов, или делегировать (передавать) их другим узлам.
     
  • Резервирование. За хранение и обслуживание своих узлов (зон) отвечают обычно несколько серверов, разделённые как физически, так и логически, что обеспечивает сохранность данных и продолжение работы даже в случае сбоя одного из них.


Принцип работы рекурсивного DNS сервера.

  Предположим, мы набрали в браузере адрес sebeadmin. Наш клиент спрашивает у первого (указанного в настройках подключения к сети) сервера DNS: «какой IP-адрес у sebeadmin»?

  Однако, сервер DNS может ничего не знать не только о запрошенном имени, но даже обо всём домене sebeadmin. В этом случае он может обратиться к другому серверу, ответственному за зону ru или корневому серверу - например, 198.41.0.4 Предположим, что этот узел сообщает - «У меня нет информации о данном адресе, но я знаю, что 204.74.112.1 является ответственным за зону ru.» Тогда сервер DNS направляет свой запрос к 204.74.112.1, но тот отвечает «У меня нет информации о данном домене, но я знаю, что 207.142.131.234 является ответственным за зону sebeadmin.» Наконец, тот же запрос отправляется к третьему DNS-серверу и находится нужный ответ - IP-адрес, который и передаётся клиенту - браузеру.

  Структура имен напоминает дерево, где корень (root) это его верх, а зоны - его "ветки". Выглядит это примерно так, как показано на схеме (фото ниже - кликабельно):

Структура иерархии DNS серверов

  Из-за существовавших в прошлом ограничений на размеры DNS-пакета (512 байт) в DNS-ответ могло быть помещено всего 13 серверов (от A до M - тринадцатой буквы в алфавите), сейчас за этими 13 именами стоят более 200 серверов. Ближайший (к пользователю) адрес «зеркала» корневого сервера выбирается автоматически благодаря IP AnyCast.

  Так, при обращении к K.root-servers.net, пользователь из Новосибирска, скорее всего, обратится к новосибирскому серверу (в NSK-IX).

  Опровержение распространённых заблуждений:

  1. Не весь интернет-трафик проходит через корневой сервер;
  2. Не каждый DNS-запрос обрабатывается корневым узлом;
  3. Корневые зоны обслуживаются не добровольцами в качестве хобби, а профессионалами, и хорошо финансируются;
  4. Ни одна организация (коммерческая или правительственная) не контролирует всю систему.


  Также есть несколько типов DNS-записей:

  • Запись A (address record) или запись адреса связывает имя компьютера или сервера с адресом IP. Например, запрос A-записи на имя referrals.icann.org вернет его IP адрес - 192.0.34.164
     
  • Запись AAAA (IPv6 address record) связывает имя хоста с адресом протокола IPv6. Например, запрос AAAA-записи на имя K.ROOT-SERVERS.NET вернет его IPv6 адрес - 2001:7fd::1
     
  • Запись CNAME (canonical name record) или каноническая запись имени (псевдоним) используется для перенаправления на другое имя. Например www.sebeadmin на sebeadmin
     
  • Запись MX (mail exchange) или почтовый обменник указывает сервер(ы) обмена почтой для данного домена. Их может быть несколько, для каждого можно выставить приоритет, чем ниже цифра, тем он приоритетнее по сравнению с остальными. По умолчанию - 10
     
  • Запись NS (name server) указывает на DNS-сервера для данного домена.
     
  • Запись PTR (pointer) или запись указателя связывает IP хоста с его каноническим именем. Запрос в домене in-addr.arpa на IP хоста в reverse форме вернёт имя (FQDN) данного хоста (см. обратный DNS-запрос). Например, (на момент написания), для IP адреса 192.0.34.164: запрос записи PTR 164.34.0.192.in-addr.arpa вернет его каноническое имя referrals.icann.org. В целях уменьшения объёма нежелательной корреспонденции (спама) многие серверы-получатели электронной почты могут проверять наличие PTR записи для хоста, с которого происходит отправка. В этом случае PTR запись для IP адреса должна соответствовать имени отправляющего почтового сервера, которым он "представляется" в процессе SMTP-сессии.
     
  • Запись SOA (Start of Authority) или начальная запись зоны указывает, на каком узле хранится эталонная информация о данном домене, содержит контактную информацию лица, ответственного за данную зону, тайминги (параметры времени) кеширования зонной информации и взаимодействия DNS-серверов.
     
  • SRV-запись (server selection) указывает на серверы для сервисов. Используется, в частности, для Jabber (альтернатива ICQ) и Active Directory (групповое администрирование пользователей)


  На этом покончим с теорией и перейдем к практике.
 

Установка и настройка bind9

  Теперь давайте настроим свой DNS сервер для локального домена, например home. Вы можете выбрать любое название, но учтите, что оно не должно пересекаться с настоящими доменами, так как Вы не сможете потом обратиться к настоящим (внешним) сайтам в Интернете. Т.е. создав зону com и в ней запись о сайте vk.com вы не сможете обратиться к настоящему сайту, если конечно не укажете там правильную информацию. Рекомендую использовать выдуманную зону, как например home, office или название организации.

  Так как cамым популярным для *NIX систем сервером DNS является Bind, мы тоже будем использовать его. Установим bind на наш сервер, для этого выполним команду apt-get install bind9 также будет установлен пакет bind9utils. Если все прошло хорошо, то сразу после установки он запустится, о чем будет сообщено в терминале.

* Starting domain name service... bind9        [OK]

  Теперь приступим к настройке сервера Bind. Перейдем в его каталог командой cd /etс/bind/ и создадим там файл с именем myzones.conf, для этого выполним команду touch myzones.conf  и откроем его nano myzones.conf

  Впишем в файл такую строку: zone "home" {type master; file "/etс/bind/db.home";}; эта запись значит, что для нашей зоны home данный сервер будет главным (master), а вcя информация о зоне хранится в файле /etс/bind/db.home который нам нужно будет создать чуть позже.

   Сохраняем этот файл и открываем файл named.conf командой nano named.conf в конец файла дописываем include "/etс/bind/myzones.conf"; и тоже сохраняем. Эта надпись подключит при запуске служб bind файлик myszones.conf в котором мы указали наши зоны (домены).

  Приступим к созданию файла зоны о котором писалось чуть выше. Для этого выполним команду nano db.home и впишем туда следующее:

Создание файла зоны DNS

  Первое что нужно знать при редактировании файла зоны, это то, что при каждом внесении изменении нужно увеличивать значение serial. Общепринято и правильно это делать в таком виде YYYYMMDDRR, где YYYY текущий год, MM месяц, DD день, RR номер правки за текущий день.

  Например, сегодня 9 сентября 2013 года. Это будет наша первая правка зоны за день, получаем serail равный 2013090900, так как в программировании счет начинается с ноля, первая правка будет иметь номер 00, вторая 01 и т.д. Хотя это не принципиально в данном случае, главное чтобы цифра была хотя бы на единицу больше предыдущего значения.

  Строка @ IN NS ns1.home. гласит, что для текущей зоны сервер DNS имеет имя ns1.home, далее строкой ns1 IN A 127.0.0.1 мы указываем что у хоста ns1 IP-адрес равен 127.0.0.1 (т.е. он находится на этом же компьютере).

  Чтобы добавить новую запись об имени хоста, добавим такую строку: server IN A 192.168.0.254 где server это имя хоста (компьютера), а 192.168.0.254 его IP-адрес, т.е. компьютер с этим IP-адресом будет иметь имя server.home. Таких записей может быть сколько угодно. Также можно назначать несколько имен для одного IP. Это бывает необходимо, если нам нужно настроить несколько виртуальных web-серверов. Сохраняем этот файл.

  Для того чтобы DNS сервер применил последние наши настройки, его нужно перезапустить. Для этого используется такая команда /etс/init.d/bind9 restart Если конфигурация оказалась без ошибок, мы увидим следующее

* Stopping domain name service... bind9        [ OK ]
* Starting domain name service... bind9        [ OK ]

  Если сервер не смог запуститься, проверьте конфигурационные файлы, которые мы редактировали.

  Внимание: основная причина ошибок это пропущенные символы вроде точки, двоеточия или точки с запятой. Проверьте синтаксис написания, также заметьте что после все имен, кроме названия хостов, в файле db.home стоят точки, это - важно.

  Если все запустилось, проверим правильно ли работает наш сервер? Для этого воспользуемся утилиткой nslookup, она есть в каждой ОС. Для этого выполним на сервере в командной строке команду nslookup

  Далее введем команду server 127.0.0.1 это укажет, что мы хотим использовать сервер находящийся по адресу 127.0.0.1, после напишем имя какого-нибудь хоста, который мы указали в нашей зоне, например server.home Вот как должны выглядеть правильные ответы сервера:

Утилита командной строки nslookup

roоt@CoоlServ:/etс/bind# nslookup

> server 127.0.0.1
Default server: 127.0.0.1
Address: 127.0.0.1#53

> server.home
Server:         127.0.0.1
Address:        127.0.0.1#53
server.home     canonical name = home.

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

  Также можно использовать наш DNS на нашем же сервере, для этого нужно указать его IP в файле /etс/resolv.conf. Для этого запустим nano /etс/resolv.conf и впишем в самом начале файла строку nameserver 127.0.0.1 , а в следующей строке - nameserver 8.8.8.8

  Первая строчка укажет нашему серверу, что по умолчанию нужно использовать DNS-сервер на локальном хосте, в случае если он перестанет отвечать на запросы, использовать DNS по адресу 8.8.8.8 (это IP публичного DNS от Google). Сохраняем файл и на этом настройка DNS окончена.
 

  Использование ресурсов провайдера/другой сети через свой DNS

  Может возникнуть задача использовать ресурсы провайдера или имена из другой «серой» сети, которые невозможно получить через всемирные DNS. Для ее решения нужно подредактировать конфигурацию нашего сервера.

  Предположим, нужно получить доступ к зоне lan Интернет провайдера. Для этого в файл myzones.conf допишем такую строку zone "lan" IN { type forward; forward only; forwarders { 10.0.0.1; 10.0.0.2;}; }; где lan название зоны, а 10.0.0.1 и 10.0.0.2 DNS сервера провайдера или другой сети. Теперь при запросе к этой зоне, компьютер будет обращаться к ней напрямую, а не тратить время на поиск того же узла в Интернете.
 

  Настройка альтернативного (slave) DNS

  Пришлось мне однажды настраивать slave сервер, чтобы поддержать друга в его начинаниях.

   Slave сервера нужны для обеспечения отказоустойчивости зоны. Например, если с главным сервером что-то случится (он «упадет», повреждение Интернет магистрали и другие неприятные вещи) зона будет продолжать работать дальше на резервном, пока главный сервер не начнет нормально функционировать. Для этого на альтернативном сервере нам потребуется написать вот такую строку в файле /etс/bind9/myzones.conf

  zone "home." IN { type slave; file "/etс/bind/slave/mirror.home"; masters { 192.168.0.254; }; }; где 192.168.0.254 наш первичный DNS сервер, а /etс/bind/slave/mirror.home файл в котором будет храниться копия DNS зоны основного сервера. Также нужно создать папку командой mkdir /etс/bind/slave/ и передать ее пользователю bind, для этого выполним chown bind:bind /etс/bind/slave/

  Здесь меня ждал подводный камень: так как до этого мне не приходилось сталкиваться с такими серверами, я никак не предполагал, что служба не сможет писать временный файл в эту папку даже с полными правами!

  На анализ логов и поиск решения ушла добрая часть ночи, было пролистано пол поисковика, пока на каком-то англоязычном форуме я не наткнулся на такое решение. Нужно открыть файл nano /etс/apparmor.d/usr.sbin.named найти строку /etс/bind/zones/** r, и заменить ее на /etс/bind/zones/** rw, т.е. дописать атрибут w чтобы bind получил право на запись в эту директорию. Перезапустить /etс/init.d/apparmor reload и /etс/init.d/bind9 restart и после этого сервер сразу заработал, как нужно !




Евгений
А где настройки обратных зон?

Евгений
А как настроить ДНС для IPv6?
Попробовал по этой статье ничего не вышло.

Кахович Андрей
А зачем Вам IPv6 для DNS ?! Это же для внутренней (локальной) сети? Зачем?

Евгений
У меня вся сеть IP-v6

Евгений
Видимо ни кто не знает. И ответа не дождаться.

Владимир Седов
Пытался все повторить как у Вас в статье.
У меня
Железо RaspberiPi
ПО Linux Pidora (Fedora remix)

Установлен веб-сервер - все как положено апач и PHP - рабочий
не совсем удобно заходить по 192.168.0.112, хотелось по Olymp55.ххх
Выход в инет не требуется

команда * Stopping domain name service... bind9 [ OK ] не работает
также кажется что в статье что то не дописано.

Кахович Андрей
В разных дистрибутивах Linux некоторые команды отличаются синтаксисом (за это его и не люблю)! Хотя, тут вопрос автору статьи: просто не удержался от комментария  =)

Анатолий
Андрей, у меня "семёрка". Неделю назад перестала работать эл.почта на отправку писем. Принимает нормально, а при отправке выдаёт: «Ошибка сервера: '450 4.7.1 …". До возникновения ошибки отключал некоторые службы из автозагрузки - ПК стал быстрее грузиться. Когда увидел проблему с эл.почтой, вернул отключ. службы, не помогло. Ещё до проблемы пробовал перейти на безопасный режим работы с помощью сервера "яндекс.днс". Потом снова вернулся на автоматическое присвоение "DNS", однако тоже не помогло.

Кахович Андрей
Не думаю, что это связано с работой DNS. Скорее не работает протокол передачи почты (POP3 или IMAP). Не знаю, какой у Вас настроен на отправку почты? Прием (SMTP протокол) работает, я так понимаю. А ДНС я всегда прописываю 8.8.8.8 (бесплатный Гугловский).

elik
POP3 как раз не передаа а прием (110 port)
SMTP - otpravka,peredacha (25 port)

Кахович Андрей
А-а-а... да! Очепяткался маленько. Спасибо за исправление!  =)

Григорий
Доброго времени суток.
Купил VPS и домен. Для домена нужны ns сервера. Какие мне туда прописывать теперь после настроек bind9 по вашей статье? IP моего сервера?
Если да, то там пишет, что нужно два...

Кахович Андрей
Адреса ns (name server) серверов должен сказать регистратор доменного имени. Бывает что и хостер (обратитесь в службу его поддержки).

Сергей
Большое спасибо автору за его старания и труд! А так же за потраченное время на поиск одной маленькой детали (type slave), но облегчившей поиски другим.

vady-ra
Спасибо, собственно для этого я и здесь  :)

Руслан
Доброе утро!! Отличная статья. И самое главное очень доходчиво, большое спасибо!!

Кахович Андрей
Спасибо и Вам, за комментарий! Передам благодарность автору статьи!   !;)

Артем
Автор конечно старался и написал настройку dns в core,а почему бы не написть эту настройку в графическом сервере 2008 р2,-куда проше и понятней и ненадо записывать длинные команды.

vady-ra
Ответ прост до безобразия, Linux бесплатный, Windows платный. Все мои статьи по Linux предназначены для домашнего использования, те на самодельном роутере с ограниченными возможностями железа. Хотя я не против написать эти-же статьи для Windows в будущем.

Кахович Андрей
Это - не Core, Артем, а операционная система Linux. По настройке Dns в графическом режиме + Core у нас есть отдельный большой видеоурок.

valias@inbox.ru
Огромное спасибо! Прояснились многие туманные понятия.

Кахович Андрей
Пожалуйста, человек со столь редким именем!   !;)

Илья
Бесподобно и необходимо!

Кахович Андрей
Спасибо, Илья, автор старался!


Страницы: [1]


Бесплатные авторские уроки !