- Ubuntu → Настройка кеширующего DNS сервера (BIND) для локальной сети.
- 49 комментариев
- Как настроить локальный DNS-сервер на Linux?
- Как мне поможет локальный DNS-сервер?
- Какой локальный кеширующий DNQS мы будем использовать?
- 1. Как проверить, используете ли вы уже systemd-resolved?
- 2. Включение и настройка systemd-resolved
Ubuntu → Настройка кеширующего DNS сервера (BIND) для локальной сети.
Назначение DNS это перевод доменных имен, легко запоминаемых человеком в IP адреса которые понимают компьютеры, этот процесс называется-Разрешение имен.
Что нам даст установка собственного кеширующего DNS сервера?!
Это немного ускорит отклик сайтов + Linux не очень хорошо воспринимает имена NetBios, а ведь иногда приходится находить компьютеры или принтеры внутри локальной сети, а хочется это делать по именам.
Запоминать IP адреса- не удобно, а постоянно лазить к журнал работы DHCP сервера- тоже не наш метод. Вот для таких случаев и нужен DNS в локальной сети.
Сама установка пакета bind9 не отличается сложностью, затыки, обычно возникают на стадии его конфигурирования, т.к. после легко читаемых конфигурационных файлов системы, на человека сваливается непонятный синтаксис, кстати, очень похожий на язык программирования С. Т.к. сервер будет работать внутри локальной сети, то не имеет смысла переносить его в chroot окружение и вся настройка занимает совсем немного времени.
На этом, лирическую часть, можно завершить, переходим к установке и настройке.
Установим DNS сервер Bind9:
sudo apt-get install bind9
sudo nano /etc/bind/named.conf.options
Находим секцию, она находится в самом начале конфигурационного файла, кроме нее там больше ничего нет…
options < directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. // forwarders < // 0.0.0.0; // >; auth-nxdomain no; # conform to RFC1035 listen-on-v6 < any; >; >;
Секция forwarders, отвечает за то, куда будет передаваться DNS запрос на разрешение имени, в случае если его нет в собственной базе. Последнее время меня совсем не радует, работа этих серверов у провайдера по этому можно подключить сторонние например гугловские, запомнить IP очень легко 8.8.8.8, на его примере я и буду вести настройку, но никто не мешает использовать, те что вам нравятся больше.
Редактируем секцию, для начала с нее нужно снять комментарии и добавить сторонние DNS, если есть необходимость добавить несколько серверов, например на тот случай если сервер google не выдержит ваших запросов и поломается :), то IP других серверов можно написать в столбик, тогда можно добиться более значительной отказоустойчивости.
В эту секцию лучше вписать IP того сервера который у вас указан в файле /etc/resolv.conf или вписать туда в секцию nameserver этот IP
Сохраняем изменения и выходим
Перезапускаем сервер и проверяем
Набираем в командной строке nslookup mail.ru
Должно выдать:
Non-authoritative answer: Name: mail.ru Addresses: 94.100.191.202
Это говорит о том, что наш сервер не является, главным в обслуживании этой зоны (mail.ru), но запросы добавил в кеш!
Теперь нужно создать ДНС зону для нашей сети чтобы машины могли находить различные сетевые сервисы — могут быть, например, сетевые принтеры, они могут быть как самостоятельными так и расшаренными на других рабочих станциях.
Нашу зону можно назвать orgname –т.е. название организации.
Первым делом создаем зону, для этого отредактируем named.conf.local
sudo nano /etc/bind/named.conf.local
sudo nano /etc/bind/db.orgname
и вставляем в него следующее:
(Прошу отнестись внимательно к синтаксису конфигурационного файла, даже точки имеют значение)
@ IN SOA orgname. root.orgname. ( 20101015 4h ; время обновления -4 часа 1h ; повтор каждый час 1w ; как долго хранить информацию -1 неделю 1d ) ; TTL (время жизни ) записи - 1 день @ IN NS orgname. ; имя сервера имен @ IN A 192.168.10.1 ; A - запись - IP адрес нашего ДНС сервера который обслуживает эту зону, @ означает что это корневая зона. * IN CNAME @ printer IN A 192.168.10.25 ; Можно создать ДНС запись сетевого принтера который находится по адресу 192.168.10.25
Теперь, при добавлении нового сетевого устройства, вам необходимо сделать 2 вещи:
1) Зарезервировать IP адрес на DHCP сервере, о том, как это сделать, можно прочитать в статье- Настройка DHCP сервера
2) Создать DNS зону для этого IP, вида devicename IN A XXX.XXX.XXX.XXX. Где: devicename-сетевое имя устройства; XXX.XXX.XXX.XXX-его IP адрес который зарезервирован на DHCP сервере.
теперь нам необходимо отредактировать файл resolv.conf
все что там было можно закоментировать поставив #
Сделано это для того чтобы сервер искал все в собственной базе, а уже потом BIND будет перенаправлять запросы к серверу 8.8.8.8 IP которого вписан в директиве forwarders.
Теперь можно проверять работоспособность:
Если тестирование происходит из под Windows:
Если тестируем из под Linux:
ping devicename.orgname -c 4
Должны пойти пинги на тот IP который вы указали вместо XXX.XXX.XXX.XXX
На этом настройку DNS сервера можно завершить.
Если возникла необходимость, интегрировать работу DNS с DHCP сервером, то можно воспользоваться статьей: Настройка DNS+DHCP сервера для локальной сети+динамическое обновление DNS зон
49 комментариев
Теперь, при добавлении нового сетевого устройства, вам необходимо сделать 2 вещи: и поехали… и что то не совсем точно перекликается эта статья и настройка dhcp сервера. Статья написана не для гиков — написана доходчиво! Но хотелось бы с Биндом по подробнее) + днс сервер я повесил на 192.168.0.1 в dhcpd.conf и в /etc/network/interfaces gateway у меня 192.168.0.1/ gateway+dhcp+dns — роли сервера.
потом: /etc/bind/db.zonder
@ IN SOA zonder. root.zonder. (
20101015
4h;
1h;
1w;
1d );
@ IN NS zonder.;
@ IN A 192.168.0.1; — адрес указал который указывал dhcpd.conf option domain-name-servers 192.168.0.1; # IP DNS-сервера
* IN CNAME @
— потом:
на человека сваливается непонятный синтаксис, кстати, очень похожий на язык программирования С
согласен видел С++, написал три програмки-! ки! для консоли: комменты в С идут после косых что видно отсюда /etc/bind/named.conf.options так и есть, НО! /etc/bind/db.orgname после точек с запятой идут комменты, точки находятся в табуляции от написанных настроек.Вопрос точки с запятой являются окончанием выражения? или обозначением комментов?
Попробую рассказать подробнее.
Чтобы сразу было понятно -службы DNS и DHCP работают независимо друг от друга! И им безразлично что делает другая служба и работает она вообще.
Если на этот IP мы повесим не принтер, а ПК -без принтера, но при этом, оставим запись вида Printer.orgname на DNS, не изменив настройки клиентов, то отправка на печать завершится ошибкой-принтера то нет по указанному адресу. Вот для того чтобы принтер всегда получал один и тот же IP и необходимо его резервирование на DHCP, непосредственно за этим устройством.
Если мы имеем постоянный IP за этим устройством, мы можем его добавить в DNS. Cлужбе DNS, также безразлично, что за устройство висит на этом IP, она не занимается проверкой, ей даже безразлично включено это устройство в сеть или нет. Она просто сопоставляет присланное имя и сверяет его с базой, если к этому имени привязан IP то его и отправляют клиенту.
Но если IP не зарезервировать за определенным MAC адресом, то он будет доставаться, кому ни попадя, и работа службы печати будет невозможна! Пока IP не достанется нашему принтеру, а когда это произойдет-вопрос сложный.
Это что касалось взаимодействия служб.
По поводу выдачи серверов ДНС клиентам с помощью DHCP.
DHCP сервер выдает клиенту адрес DNS сервера, можно выдать адрес гугловсгого сервера, а можно и собственного. Если мы даем клиентам через DHCP, сервер гугла, то тут все понятно, все запросы идут на 8.8.8.8, но если мы даем наш DNS, то все запросы на разрешение имен начинают идти к нему. Наш сервер сверяет их со своей базой если имя и IP в ней найдены, то клиенту выдается IP и все нормально. Но если в базе ничего не найдено, то запрос пересылается (процесс называется форвардинг) более вышестоящему серверу который определяется в секции:
Далее схема прежняя -гугловский сервер ищет в своей базе имя и если оно там есть, присылает нашему серверу IP, эти данные, в свою очередь, наш сервер добавляет в кеш и после этого начинает отдавать всем клиентам при повторном запросе. Что экономит время.
По поводу синтаксиса файла db.orgname
IN SOA orgname. root.orgname. (
20101015
4h; время обновления -4 часа
1h; повтор каждый час
1w; как долго хранить информацию -1 неделю
1d ); TTL (время жизни ) записи — 1 день
Точка с запятой- комментарий. Начало выражения – (, а его завершение — )
К сожалению мне пока не удалось найти способа добавлять данные (имена ПК) из DHCP сервера в DNS, так как это реализовано в Active Directory, в автоматическом режиме, хотя возможно плохо искал.
Как настроить локальный DNS-сервер на Linux?
Если у вашего домашнего или офисного интернет-провайдера медленные серверы имен или ваш сервер выполняет много операций поиска, то вам нужен локальный кеширующий DNS-сервер.
Как мне поможет локальный DNS-сервер?
Кеширующий DNS-сервер работает, выполняя все DNS-запросы, которые обрабатывает ваша система, а затем сохраняя или кэшируя результаты в памяти. Как только результаты кэшируются в памяти, каждый раз, когда вы делаете повторный запрос для домена, результат будет почти мгновенно получен из памяти.
Локальный DNS-сервер не только поможет в вашем доме или офисе, но и на вашем сервере. Если у вас есть приложение, которое выполняет множество операций поиска DNS, например, почтовый сервер, на котором запущено антиспамовое программное обеспечение, оно получит повышение скорости от локального кэширующего DNS-сервера.
Наконец, утилита systemd-resolved поддерживает самые последние, безопасные стандарты DNS DNSSEC и DNSoverTLS или DoT. Они помогают защитить вас и сохранить вашу конфиденциальность в Интернете.
Какой локальный кеширующий DNQS мы будем использовать?
Локальный кеширующий DNS-сервер, который мы включим и настроим в этом руководстве, это systemd-resolved. Данный инструмент является частью Systemd набора инструментов управления системой. Если ваша система использует systemd , и почти все основные дистрибутивы Linux используются, то у вас уже будет установлен systemd-resolved , но он не будет работать. Большинство дистрибутивов не используют systemd-resolved, даже если он присутствует.
systemd-resolved работает, запустив небольшой локальный кеширующий DNS-сервер, который мы настроим для запуска при загрузке. Затем мы перенастроим остальную часть системы, чтобы направлять их DNS-запросы в DNS-систему с локальным кэшированием.
1. Как проверить, используете ли вы уже systemd-resolved?
В некоторых дистрибутивах Linux по умолчанию уже используется systemd-resolved, например Ubuntu 19.04.
Если вы уже запустили systemd-resolved, вам не нужно включать его или настраивать систему для его использования. Однако вам может потребоваться убедиться, что инструменты управления сетью, такие как NetworkManager, настроены правильно, поскольку они могут игнорировать конфигурацию сети системы.
Прежде чем перейти к следующему разделу, выполните следующую команду, чтобы проверить, запущен ли уже systemd-resolved:
Если вы получили сообщение:
$ resolvectl status Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.
Вы не используете systemd-resolved и должны перейти к следующему разделу. Если вместо этого вы видите вывод, который начинается примерно так:
Global LLMNR setting: yes MulticastDNS setting: yes DNSOverTLS setting: opportunistic DNSSEC setting: allow-downgrade DNSSEC supported: no Current DNS Server: 1.1.1.1 DNS Servers: 1.1.1.1 1.0.0.1
Тогда вы уже используете systemd-resolved и вам не нужно его включать.
2. Включение и настройка systemd-resolved
Нам не нужно устанавливать systemd-resolved как часть systemd. Все, что нам нужно сделать, — это запустить его, чтобы запустить сервер кэширования DNS, а затем включить его при загрузке.
Запустите следующую команду в терминале от имени пользователя sudo для запуска systemd-resolved:
$ sudo systemctl start systemd-resolved.service
Затем выполните следующую команду, чтобы запустить systemd-resolved при загрузке системы: