Для настройки 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
-
Убедитесь, что файлы стандартных зон существуют, обычно находятся в
/etc/bind/(db.local, db.127, db.0, db.255). Если их нет, можно создать пустые или скопировать из примеров. -
Выполните проверку синтаксиса конфигурации:
sudo named-checkconfЕсли ошибок нет, команда ничего не выведет.
-
Перезапустите BIND9:
sudo systemctl restart bind9 # или sudo service bind9 restart -
Проверьте логи на наличие ошибок:
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 с перенаправлением запросов на разные внутренние серверы в зависимости от подсети источника.