- Вопрос или проблема
- Ответ или решение
- Разделение домена между частным и публичным DNS-сервером BIND: детальный анализ и решение
- Основные Проблемы
- Рекомендации по Решению
- 1. Создание Поддомена для Внутренних Ресурсов
- 2. Настройка Конфигурации BIND
- a. Измените файл named.conf
- b. Создание нового файла зоны для поддомена
- 3. Конфигурация Рекурсии и Пересылки
- 4. Примеры и Тестирование
- Заключение
Вопрос или проблема
У меня есть домен (foo.com в этом примере), который в настоящее время имеет публичный DNS-сервер (namecheap), на котором есть записи для www.foo.com и связанных с ним MX-записей.
Я хотел бы иметь частный DNS, который будет обрабатывать мои внутренние серверы для внутренних пользователей (wiki.foo.com, postgres.foo.com и т.д.) и перенаправлять любые другие запросы на публичный DNS. Внешние пользователи в интернете не будут взаимодействовать с частным DNS и будут продолжать работать как обычно.
На данный момент мой внутренний DNS разрешает частные подсети (wiki и т.д.), но не разрешает публичные (www). Похоже, что bind не любит делить зону между двумя серверами, если я не упускаю что-то важное.
У меня есть конфигурация named.conf и файлы зон ниже, а также рисунок того, что я хотел бы достичь, если я не описал свои цели достаточно ясно.
Есть ли способ сделать то, что я хочу, или я смотрю на это под неправильным углом?
named.conf
options {
listen-on port 53 {
127.0.0.1;
10.0.2.81;
};
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; 10.0.1.0/24; 10.0.2.0/24; };
allow-query-cache { localhost; 10.0.1.0/24; 10.0.2.0/24; };
recursion yes;
dnssec-validation auto;
forwarders {
1.1.1.1; // Cloudflare
1.0.0.1; // Cloudflare
8.8.8.8; // Google
8.8.4.4; // Google
};
forward first;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
channel query_log {
file "data/named_query.log" versions 3 size 5m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category queries { query_log; };
};
zone "foo.com" IN {
type master;
file "/var/named/foo.com.zone";
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
Файл зоны
$TTL 86400
@ IN SOA ns1.foo.com. admin.foo.com. (
2023122001 ; Серийный номер (ГГГГММДДNN)
3600 ; Обновление
1800 ; Повторная попытка
1209600 ; Истечение
86400 ) ; Минимальное TTL
IN NS ns1.foo.com.
; Определите запись A для внутреннего DNS-сервера
ns1 IN A 10.0.2.81
; Внутренние записи A для разрешения внутреннего DNS
system IN A 10.0.1.32
xmpp IN A 10.0.1.24
Внутренний сервер имен считает себя авторитетным для example.com
, что приводит к тому, что он не выполняет рекурсию для этого домена. Рекомендуется использовать поддомен (например, internal.example.com
или int.example.com
) для внутренних ресурсов. Если внутренний сервер имен является авторитетным только для поддомена, это не будет мешать другим записям в родительской зоне.
Если вы не используете поддомен, вам придется добавить все внешние записи в внутреннюю зону и поддерживать их в актуальном состоянии.
Ответ или решение
Разделение домена между частным и публичным DNS-сервером BIND: детальный анализ и решение
Ваша цель — эффективно управлять DNS-запросами для домена foo.com
, разделив управление записями на частный и публичный DNS-сервера. В результате вы хотите, чтобы внутренние пользователи могли обращаться к внутренним ресурсам (таким как wiki.foo.com
, postgres.foo.com
) через частный DNS-сервер, при этом внешние пользователи продолжали пользоваться существующими записями публичного DNS-сервера, обеспечивающего доступ к www.foo.com
и связанным MX-записям.
Основные Проблемы
Ваша текущее решение вызывает некоторые сложности, поскольку внутренний сервер считает себя авторитетным для foo.com
, что мешает ему выполнять рекурсивные запросы для публичного DNS. Это часто приводит к путанице в конфигурации и требует переосмысления.
Рекомендации по Решению
1. Создание Поддомена для Внутренних Ресурсов
Вместо того чтобы использовать домен foo.com
для внутренних ресурсов, рекомендуется создать отдельный поддомен, например internal.foo.com
или int.foo.com
. Это обеспечит разделение между внутренними и внешними ресурсами, избавляя вас от необходимости поддерживать полную запись всех внешних ресурсов на вашем частном DNS:
- Преимущества:
- Облегчает администрирование, поскольку вам не нужно обновлять внутренние записи при изменениях во внешних.
- Исключает конфликты имен и гарантирует, что внутренний DNS может выполнять рекурсивные запросы для
foo.com
.
2. Настройка Конфигурации BIND
a. Измените файл named.conf
Вы можете настроить ваш конфигурационный файл, добавив поддомен, чтобы различать внутренние и внешние ресурсы:
zone "internal.foo.com" IN {
type master;
file "/var/named/internal.foo.com.zone";
};
b. Создание нового файла зоны для поддомена
Создайте новый файл зоны /var/named/internal.foo.com.zone
, добавив необходимые записи:
$TTL 86400
@ IN SOA ns1.internal.foo.com. admin.internal.foo.com. (
2023122001 ; Serial (YYYYMMDDNN)
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.internal.foo.com.
; Записи для внутренних ресурсов
system IN A 10.0.1.32
xmpp IN A 10.0.1.24
3. Конфигурация Рекурсии и Пересылки
Вам также нужно убедиться, что ваш внутренний DNS-сервер настроен на использование рекурсии для всех запросов к основному домену foo.com
. Убедитесь, что ваш параметр forward
настроен на first
, чтобы он сначала проверял локальные записи, а затем перенаправлял запросы к публичным DNS-серверам:
forward first;
4. Примеры и Тестирование
После настройки введите примеры запросов в вашем командном терминале:
nslookup wiki.internal.foo.com
nslookup www.foo.com
Проверьте, что запросы к wiki.internal.foo.com
разрешаются через частный DNS, в то время как запросы к www.foo.com
успешно обрабатываются через публичные DNS.
Заключение
Следуя этим рекомендациям, вы сможете успешно разделить управление доменами между частным и публичным DNS-серверами. Это решение облегчит вашу администрирование и повысит гибкость управления DNS-записями. Вы получите качество и надежность, необходимые как для внутреннего, так и для внешнего разрешения имен.
Если у вас возникнут вопросы или вам потребуется помощь с реализацией, не стесняйтесь обращаться за дополнительной информацией.