Свой DNS для домашней сети на основе BIND9

Когда в домашней сети появляется большое количество устройств, то хочется обращаться к ним не по IP, а удобно запоминаемому названию.

Для этого нужно развернуть частный DNS. В качестве него можно использовать BIND9. Все ниже приведенные действия производились на компьютере с ОС ubuntu server 20.04.

Установка BIND9

apt update && apt-get install bind9 bind9utils

В качестве примера добавим зону home, это как аналог, например, зоны ru. В нее буду входить домены второго уровня - host.home, router.home и т.д.

Открываем на редактирование файл /etc/bind/named.conf.local и добавляем следующее содержимое

zone "home" {
    type master;
    file "/etc/bind/zones/db.home"; # путь к файлу с описанием зоны
};
zone "192.168.0.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.192.168.0";
};

У меня локальная сеть использует ip адреса 192.168.0.* если у вас другая, измените под сеть во втором блоке.

Далее настраиваем параметры DNS в файле /etc/bind/named.conf.options

acl "trusted" {
        192.168.0.0/24;   # Домашняя подсеть
        127.0.0.1;
};
options {
        directory "/var/cache/bind";
        recursion yes;                 # разрешить рекурсивные запросы
        allow-recursion { trusted; };  # только от доверенных клиентов
        listen-on { 192.168.0.121; };    # ip адрес сервера с dns
        allow-transfer { none; };      # отключить передачу зон по умолчанию
        #перенаправлять запросы на DNS google если не найдено в домашней сети
        #можно заменить на yandex или другие
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;
        listen-on-v6 { any; };  #если не нужен ipv6 поставить none
};

Теперь создаем файл с описанием зоны home, в конфиге мы указали, что он лежит в папке zones, поэтому нужно предварительно создать папку zones.

Содержимое файла db.home

$TTL    604800
@       IN      SOA     ns.home. admin.home. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.home.          ; название NS сервера
@       IN      A       192.168.0.121     ; ip сервера
ns      IN      A       192.168.0.121     ; ip сервера
router  IN      A       192.168.0.1       ; А это уже первая запись домена в зоне home, писать тут нужно без home, а в браузере будет router.home, последний столбец это ip куда будет перенаправлен браузер
                                          ; Другие доменные записи добавлять ниже по аналогии с router


Файлы зоны для обратного просмотра служат местом, где мы будем определять PTR записей DNS для обратного просмотра DNS. Т. е., когда DNS получает запрос для IP-адреса, например, “192.168.0.1”, она будет выполнять поиск по файлу (файлам) зоны для обратного просмотра, чтобы получить соответствующее полное доменное имя, в нашем случае это “router.home”.

Содержимое файла db.192.168.0

$TTL    604800
@       IN      SOA     ns.home. admin.home. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.home.          ; Название NS сервера
41      IN      PTR     ns.home           ; Название NS сервера
91      IN      PTR     router.home       ; Домен router.home

Проверим созданную конфигурацию

named-checkconf

Должно вернуть в консоль без вывода ошибок

Теперь проверим зоны

named-checkzone home  /etc/bind/zones/db.home
named-checkzone 192.168.0.in-addr.arpa /etc/bind/zones/db.192.168.0

Если ошибок нет, то перезапускаем bind

service bind9 restart

Готово! Сервер DNS настроен. Переходим в браузере на сайт http://router.home и видим ошибку что домен не найден. Чтобы компьютер начал использовать наш DNS можно использовать 2 варианта:

1. Добавить сервер DNS в файл /etc/resolv.conf (для ОС Linux)

На примере ubuntu 20.04 можно сделать через netplan. Заходим в папку /etc/netplan, там будет файлик с конфигурацией сетевых адаптеров. Нужно добавить определение сервера имен в конфигурацию сети

network:
  version: 2
  ethernets:
    enp2s0:  #название сети
      dhcp4: true
            #ниже то что нужно добавить
            nameservers:
                addresses:
                - 191.168.0.121                # ip NS сервера
                search: [ ns.home ]  # DNS зона

При редактировании этого файла будьте очень внимательны - использовать ТОЛЬКО пробелы, ни каких табов!

После сохранения запустите команду

netplan try

В течении 2х минут будет действовать новая конфигурация, и если не нажать enter, то произойдет откат к предыдущей конфигурации. Это поможет избежать проблем если ошибка в конфигурации, так как может отвалиться сеть.

2. Прописать DNS сервер в роутере, это наиболее предпочтительный вариант, так как не нужно заходить на каждое устройство и менять там DNS.

На примере TP-LINK WR841N адрес DNS сервера заполняется в разделе DHCP - Настройка DHCP, поле Первичный DNS. Сохраняем и обязательно перезагружаем роутер.


После выполнения 1 или 2 ого пункта можно перейти в браузере по адресу router.home и увидеть главную страничку роутера!

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

Комментарии