
Я настроил DNS-сервер в Linux как пересылающий.
Он пересылает DNS-запросы только на главный DNS-сервер организации.
В клиентах Windows (в филиалах организации) основной DNS настроен на их собственный DNS-сервер,
а альтернативный — на мой (DNS пересылки).
Если мой DNS-сервер настроен как альтернативный, он не может разрешить.
Но когда мой DNS-сервер настроен как основной, разрешение работает.
Как мне заставить мой DNS-сервер работать, если он настроен как альтернативный DNS?
решение1
Базовый DNS-резолвер (например, в клиенте Windows) предполагает, чтокаждый настроенный для этого DNS-сервер знает или может узнать все, что нужно знать, и если один сервер скажет, что чего-то не существует, то нет смысла спрашивать у другого сервера второе мнение.
DNS-сервер может иметь больше гибкости в том, откуда он получает информацию. Многие DNS-серверы можно настроить на выборочную пересылку запросов: «если запрос касается домена X.Y.example
, пересылать запрос на сервер A, если касается любого другого Y.example
, пересылать на сервер B, в противном случае попытаться решить его самостоятельно, обратившись к DNS-серверам Интернета».
Но это не обычный способ настройки разрешения DNS.
Если информация на первичном DNS-сервере относится к домену Y.example
, а на вашем DNS-сервере есть информация о поддомене X.Y.example
, то на первичном DNS-сервере должна быть так называемаяклейкие пластинкив его информации о Y.example
домене. Что-то вроде:
X.Y.example. IN NS <your.DNS.server.name.>
и если ваш DNS-сервер находится внутри Y.example
домена (т.е. является частью либо домена X.Y.example
, либо домена Y.example
или любого из его других поддоменов), также:
<your.DNS.server.name.> IN A <your DNS server IP address>
Запись NS сообщит основному DNS-серверу о необходимости связаться с вашим DNS-сервером для получения любой информации о X.Y.example
домене. Это называетсяDNS-делегирование. Запись A нужна только для предоставления адреса для подключения: aклейкая пластинка.
Если информация на вашем сервере имен относится к несвязанному домену, например Z.other.example
, , то есть три варианта:
- Основной сервер имен может иметь особую связь с вашим DNS-сервером, чтобы он мог загружать полную копию
Z.other.example
содержимого домена и автоматически обновлять ее, периодически сверяясь с вашим DNS-сервером. Обычно это называется связьюmaster/slave
: ваш сервер будет главным авторитетом наZ.other.example
, но основной DNS-сервер будет иметь полную информацию о содержимом этого домена и сможет дать авторитетный ответ на основе загруженных данных.
С BIND это означает, что на вашем сервере будет что-то вроде:
options {
allow-transfer { <IP address of primary DNS server>; };
# The next line is not absolutely necessary but speeds up propagation of updates:
also-notify { <IP address of primary DNS server>; };
<... any other options here...>
};
а основной сервер будет иметь:
zone "Z.other.example" {
type slave;
masters { <IP address of your DNS server>; };
};
И да, это означает, что организацияначальныйDNS-сервер будет подчиненным серверомZ.other.example
только для домена. Для других доменов/зон это не будет иметь никакого эффекта.
Обычно этот тип отношений означает, что первичный DNS-сервер также может быть указан в записях NS для Z.other.example
домена, нотебе не обязательно этого делатьесли домен предназначен только для внутреннего использования пользователями основного DNS-сервера.
- Или основной DNS-сервер может быть настроен на условную пересылку запросов: «если запрос касается Z.other.example, пересылайте его на свой DNS-сервер, а не делайте ничего другого». Иногда это делается, например, с внутренними DNS-доменами организации, существование которых не должно быть раскрыто ни в одной публичной записи NS.
Для этого основной сервер должен иметь:
zone "Z.other.example" {
type forward;
forwarders { <IP of your DNS server>; };
forward only;
};
- Или, если специальной конфигурации нет, то для того, чтобы DNS-серверы нашли ваш
Z.other.example
домен, должна существовать цепочка записей NS:- корневые DNS-серверы должны иметь записи NS (и соответствующие записи A), указывающие на DNS-серверы
example
домена верхнего уровня - на серверах домена
example
должны быть записи NS, указывающие на DNS-серверыother.example
домена второго уровня - и DNS-серверы домена
other.example
должны иметь записи NS, указывающие на ваш DNS-сервер как на ответственный заZ.other.example
.
- корневые DNS-серверы должны иметь записи NS (и соответствующие записи A), указывающие на DNS-серверы
Благодаря этому основной DNS-сервер сможет найти ваш домен, как и любой другой домен в Интернете.
Если вы пытаетесь заставить свой DNS-сервер предоставить всего несколько дополнительных записей для домена Y.example
,это не сработает.
Если DNS-сервер является полномочным для определенного домена (исключая делегированные поддомены, если таковые имеются), то он всегда должен иметь полное знание содержимого этого домена; для DNS-сервера, занимающего полномочную позицию, не существует такого понятия, как «может быть». Если первичный DNS-сервер является полномочным для Y.example
и при запросе о X.Y.example
нем не имеет записи для этого и соответствующего делегирования поддомена, его ответ «no such host/domain» будет выражен в человеческих терминах:
«Я знаю все, что нужно знать о Y.example, и такого понятия, как XYexample, определенно не существует».
Технически возможно заставить основной сервер отклонять запросы для вашего домена, чтобы клиент вместо этого обращался к альтернативному DNS-серверу, ноЯ бы настоятельно не рекомендовал этого делать..
Такие настройки могут сначала казаться работающими, но, как правило, дают сбой неожиданным образом, особенно когда один или другой из серверов имен становится временно недоступным. Многие пробовали такие настройки и терпели неудачу. Опыт обучения, как правило, включает в себя болезненный сеанс устранения неполадок во времянетпо вашему выбору и/или фейспалмы от более опытных администраторов DNS, которые будут уведомлены о помощи в устранении проблемы.