Настройка Split DNS на одном сервере Bind

Обновлено и опубликовано Опубликовано:

Используемые термины: DNS, Bind, CentOS, Ubuntu.

В двух словах, Split DNS (или split-horizon, или split-brain) — это конфигурация, позволяющая отдавать разные записи зон DNS в зависимости от подсети источника запроса. Ее можно реализовать с применением нескольких разных серверов DNS, однако, Bind позволяет сделать нужную нам настройку на одном единственном сервере с помощью view. В данной инструкции мы рассмотрим пример настройки зоны dmosk.ru в 3-х направлениях. Команды будут применимы для Linux CentOS (Red Hat) и Ubuntu (Debian).

Настройка Bind

Первым делом настроим view. Открываем конфигурационный файл. В зависимости от типа операционной системы, его местоположение будет разным.

а) в CentOS / Red Hat:

vi /etc/named.conf

б) в Ubuntu / Debian:

vi /etc/bind/named.conf.default-zones

* в вашей инфраструктуре для описания зон могут использоваться другие файлы. Стоит это учитывать при настройке view.

Пример конфигурации для зон в 3-х представлениях — 2 внутренние сети и все остальные:

  1. ...
  2. acl "internal-01" {192.168.0.0/24; };
  3. acl "internal-02" {192.168.1.0/24; };
  4.  
  5. view "internal-01" {
  6.     match-clients { "internal-01"; };
  7.  
  8.     zone "dmosk.ru" IN {
  9.         type master;
  10.         file "master/dmosk.ru.in01";
  11.     };
  12. };
  13.  
  14. view "internal-02" {
  15.     match-clients { "internal-02"; };
  16.  
  17.     zone "dmosk.ru" IN {
  18.         type master;
  19.         file "master/dmosk.ru.in02";
  20.         allow-transfer { 192.168.1.15; };
  21.     };
  22. };
  23.  
  24. view "external" {
  25.     match-clients { "any"; };
  26.  
  27.     zone "dmosk.ru" IN {
  28.         type master;
  29.         file "master/dmosk.ru.any";
  30.     };
  31. };

* для удобства восприятия, разные блоки конфигурации отмечены разными цветами. Рассмотрим их подробнее:

  • 2, 3 — создаем 2 acl, в которых описываем подсети наших внутренних сетей. После мы их будем использовать для определения доступа к view.
  • 5 - 12 — наш первый view для первой внутренней сети. В опции match-clients мы должны перечислить acl, для клиентов которой нужно отдавать записи зон, входящих в данный view.
  • 14 - 22— view для второй внутренней сети. Обратите внимание, что здесь мы указали другие acl, файл с настройками зоны. Также для данной зоны мы разрешили трансфер на адрес 192.168.1.15.
  • 24 - 31 — последняя view для всех остальных клиентов (как правило, из сети Интернет).

Особенности настройки

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

1. Any должен быть внизу.

Наши блоки view читаются системой сверху вниз. Если сервер DNS при поиске нужной зоны натыкается на подходящий вариант, он использует его. Таким образом, если view с match-clients { "any"; }; поместить в самый верх, будет использоваться только этот блок, а другие так и не задействуются.

2. Настройка зон внутри view.

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

3. Вне view не должно быть зон.

Как только мы начали применять view, вне этих блоков не должно быть ни одной зоны. Мы не можем сделать общие настройки для одних зон, а другие поместить внутрь представлений. В противном случае, bind при попытке перезапуска выдаст ошибку.

Создание зон

В нашей конфигурации мы описали зону dmosk.ru в трех view. Соответственно, нам нужно создать 3 файла. В зависимости от типа операционной системы, их местоположение будет различаться.

а) CentOS / Red Hat:

mkdir /var/named/master

б) Ubuntu / Debian:

mkdir /var/cache/bind/master

* если мы еще не создавали зоны, то создаем данные каталоги.

Теперь можно создавать сами файлы для зон.

а) CentOS / Red Hat:

vi /var/named/master/dmosk.ru.in01

б) Ubuntu / Debian:

vi /var/cache/bind/master/dmosk.ru.in01

Пример файла с минимально необходимым набором записей:

$TTL 14400

dmosk.ru.     IN      SOA     ns1.dmosk.ru. admin.dmosk.ru. (
        2020120401      ; Serial
        10800           ; Refresh
        3600            ; Retry
        604800          ; Expire
        604800          ; Negative Cache TTL
)

                IN      NS      ns1.dmosk.ru.

@               IN      A       192.168.0.20
ns1             IN      A       192.168.0.2

* это файл для зоны dmosk.ru во view «internal-01». Он будет возвращать IP для записи 192.168.0.20. Предполагается, что адрес DNS-сервера в данном сетевом сегменте 192.168.0.2.

Создаем описание для зоны в следующем view.

а) CentOS / Red Hat:

vi /var/named/master/dmosk.ru.in02

б) Ubuntu / Debian:

vi /var/cache/bind/master/dmosk.ru.in02

Содержимое:

$TTL 14400

dmosk.ru.     IN      SOA     ns1.dmosk.ru. admin.dmosk.ru. (
        2020120401      ; Serial
        10800           ; Refresh
        3600            ; Retry
        604800          ; Expire
        604800          ; Negative Cache TTL
)

                IN      NS      ns1.dmosk.ru.

@               IN      A       192.168.1.20
ns1             IN      A       192.168.1.2

* файл для зоны во view «internal-02». Он будет возвращать IP для записи 192.168.1.20. Предполагается, что адрес DNS-сервера в данном сетевом сегменте 192.168.1.2.

Наконец, создаем последний файл.

а) CentOS / Red Hat:

vi /var/named/master/dmosk.ru.any

б) Ubuntu / Debian:

vi /var/cache/bind/master/dmosk.ru.any

Его содержимое:

$TTL 14400

dmosk.ru.     IN      SOA     ns1.dmosk.ru. admin.dmosk.ru. (
        2020120401      ; Serial
        10800           ; Refresh
        3600            ; Retry
        604800          ; Expire
        604800          ; Negative Cache TTL
)

                IN      NS      ns1.dmosk.ru.

@               IN      A       92.53.123.166
ns1             IN      A       92.53.123.165

* файл для зоны во view «external». Он будет возвращать IP для записи 92.53.123.166. Предполагается, что адрес DNS-сервера в данном сетевом сегменте 92.53.123.165.

Проверка

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

named-checkconf

* команда должна вернуть пустую строку.

После проверяем корректность настройки зон:

named-checkconf -z

Команда должна вернуть что-то на подобие:

zone dmosk.ru/IN: loaded serial 2020120401
zone dmosk.ru/IN: loaded serial 2020120401
zone dmosk.ru/IN: loaded serial 2020120401

* в данном примере для зоны dmosk.ru проверены все файлы. Они корректны.

Теперь можно перезапустить сервер DNS.

а) CentOS / Red Hat:

systemctl restart named

б) Ubuntu / Debian:

systemctl restart bind9

Переходим на клиентский компьютер в первом сетевом сегменте (192.168.0.0/24). Для проверки работы нашего сервера вводим команду (на Linux или Windows клиенте):

nslookup dmosk.ru 192.168.0.2

Мы должны увидеть IP из нашей зоны во view internal-01:

Server:         192.168.0.2
Address:        192.168.0.2#53

Name:   dmosk.ru
Address: 192.168.0.20

Переходим на другой компьютер в сетевом сегменте 192.168.1.0/24. Вводим:

nslookup dmosk.ru 192.168.1.2

В моем случае был получен уже другой ответ:

Server:         192.168.1.2
Address:        192.168.1.2#53

Name:   dmosk.ru
Address: 192.168.1.20

Выполняем команду с компьютера вне диапазонов 192.168.0.0/24 или 192.168.1.0/24:

nslookup dmosk.ru 92.53.123.165

Пример ответа:

Server:         92.53.123.165
Address:        92.53.123.165#53

Name:   dmosk.ru
Address: 92.53.123.166

Мы настроили Split DNS на Linux сервере с Bind.

Альтернативы

Немного слов о других реализациях, которые позволят развернуть Split DNS на едином устройстве/сервере.

  • DNS сервер на Microsoft Windows Server 2016. Позволяет использовать ZoneScope для разделения ответов для одной и той же зоны в зависимости от источника запроса.
  • Mac OS X Server. Но это тот же Bind.
  • На роутерах Mikrotik (с версии прошивки 6.47).

Наверняка, есть и другие реализации, которые позволят настроить сервер DNS с разделяемыми ответами для одних и тех же зон.

Читайте также 

Вам могут быть полезны следующие инструкции про DNS:

1. Как установить и настроить DNS-сервер BIND на Linux CentOS

2. Установка и настройка bind на Ubuntu

3. Создание и настройка первичной зоны в BIND

4. Как создать и настроить вторичную (slave) зону в BIND сервере

5. Настройка Stub и Forward зон на сервере Bind для перенаправления запросов

# Linux # Серверы # Сети
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет