README.md

Для настройки split-DNS на BIND9, который будет перенаправлять запросы в зависимости от подсети клиента, выполните следующие шаги. Предполагается, что BIND9 уже установлен, а его конфигурационные файлы находятся в каталоге /etc/bind.

1. Предварительная подготовка

Имя хоста IP-адрес(а)
client1 100.64.19.6
split-dns1 100.64.0.37
client2 100.64.0.23

Настройки выполняются на внешнем сервере DNS. Для этого необходимо отдельно развернуть ВМ с доступам в необходимые подсети, установить пакет:

apt-get install bind9 bind9utils bind9-doc

Перед началом убедитесь, что в основном файле конфигурации /etc/bind/named.conf нет директивы include "/etc/bind/named.conf.default-zones"; – она закомментирована или удалена. Это необходимо, потому что при использовании view все зоны должны быть определены внутри представлений.

2. Создание списков доступа (ACL)

Создайте файл /etc/bind/named.conf.acl со следующим содержимым:

acl "subnet0" {
    100.64.0.0/24;
};

acl "subnet1" {
    100.64.19.0/24;
};

3. Настройка основного конфигурационного файла

Отредактируйте /etc/bind/named.conf:

// Основные параметры сервера
options {
    directory "/var/cache/bind";
    listen-on { 100.64.0.36; };    // IP самого DNS-сервера
    listen-on-v6 { none; };         // отключаем IPv6, если не нужен
    allow-query { any; };           // разрешаем запросы со всех адресов (фильтрация будет во views)
    recursion yes;                  // разрешаем рекурсию (нужна для пересылки)
    dnssec-validation auto;          // или no, если DNSSEC не требуется
    auth-nxdomain no;                // соответствие RFC1035
};

// Подключаем файл с ACL
include "/etc/bind/named.conf.acl";

// Подключаем файл с представлениями (views)
include "/etc/bind/named.conf.local";

4. Создание представлений (views)

Создайте файл /etc/bind/named.conf.local:

// Представление для клиентов из подсети 100.64.0.0/24
view "subnet0-view" {
    match-clients { "subnet0"; };

    // Все запросы, кроме обслуживаемых локально, пересылаем на ALD Pro 100.64.0.9
    zone "." {
        type forward;
        forward only;                // только пересылка (не обращаемся к корневым серверам)
        forwarders { 100.64.0.9; };
    };

    // Стандартные зоны (обязательны для корректной работы)
    zone "localhost" {
        type master;
        file "/etc/bind/db.local";
    };

    zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
    };

    zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
    };

    zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
    };
};

// Представление для клиентов из подсети 100.64.1.0/24
view "subnet1-view" {
    match-clients { "subnet1"; };

    // Все запросы, кроме обслуживаемых локально, пересылаем на ALD Pro 100.64.19.7
    zone "." {
        type forward;
        forward only;
        forwarders { 100.64.19.7; };
    };

    // Стандартные зоны
    zone "localhost" {
        type master;
        file "/etc/bind/db.local";
    };

    zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
    };

    zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
    };

    zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
    };
};

// (Опционально) Представление для всех остальных клиентов
view "others-view" {
    match-clients { any; };

    // Можно запретить рекурсию (отказ в обслуживании)
    recursion no;

    // Либо тоже настроить пересылку, например на публичные DNS
    // zone "." {
    //     type forward;
    //     forward only;
    //     forwarders { 8.8.8.8; 8.8.4.4; };
    // };
};

Пояснения

  • match-clients – определяет, какие клиенты попадают в представление. Используются ранее созданные ACL subnet0 и subnet1.
  • zone “.” type forward – пересылает все запросы, для которых сервер не является авторитативным, на указанные DNS-серверы.
    forward only гарантирует, что BIND не будет пытаться самостоятельно выполнять рекурсивные запросы, если форвардеры недоступны (запросы будут неудачными).
  • Стандартные зоны (localhost, обратные зоны) необходимы для корректной работы сервера и не должны пересылаться на внешние серверы. Они обслуживаются локально.
  • Порядок представлений важен – BIND обрабатывает их сверху вниз и использует первое совпадение. Поэтому сначала идут представления для конкретных подсетей, а others-view (если он нужен) должен быть последним.

5. Проверка конфигурации и перезапуск BIND

  1. Убедитесь, что файлы стандартных зон существуют, обычно находятся в /etc/bind/ (db.local, db.127, db.0, db.255). Если их нет, можно создать пустые или скопировать из примеров.

  2. Выполните проверку синтаксиса конфигурации:

    sudo named-checkconf
    

    Если ошибок нет, команда ничего не выведет.

  3. Перезапустите BIND9:

    sudo systemctl restart bind9   # или sudo service bind9 restart
    
  4. Проверьте логи на наличие ошибок:

    sudo journalctl -u bind9 -f   # или смотреть /var/log/syslog
    

6. Тестирование

С клиента из подсети 100.64.0.0/24 выполните запрос, например:

nslookup example.com 100.64.0.36

В логах BIND (или на сервере пересылки 100.64.0.9) должно быть видно, что запрос пришёл с вашего DNS-сервера. Аналогично проверьте для клиента из подсети 100.64.1.0/24 – запросы должны уходить на 100.64.1.5.

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

Описание
Конвейеры
0 успешных
0 с ошибкой
Разработчики