У меня есть домен example.com
, и я использую Azure DNS для разрешения всех имен хостов, которые должны быть видны из интернета. Я определил, mail.example.com
что нужно указать 198.51.100.123
, и это может быть разрешено внешними клиентами без каких-либо проблем.
Также используется example.com
в моей локальной сети, и использование bind разрешает все локальные IP-адреса, что отлично работает для локальных имен хостов. Мой DHCP-сервер также знает, как с этим справиться, и обновляет файлы зон должным образом. Все DNS-запросы для других зон перенаправляются в Cloudflare DNS.
Я хотел бы, чтобы мой сервер использовал локальный сервер имен, и если он не может найти запись в локальном файле зоны, он должен связаться с сервером Azure и проверить ее. Когда я добавляю следующие записи в свой файл зоны, то он работает для этих имен хостов:
external-dns A 1.1.1.1
vpn NS external-dns
www NS external-dns
ftp NS external-dns
Подстановочные знаки больше не работают в Bind9, поэтому я не могу использовать * NS external-dns
. Есть ли другой способ сделать это?
решение1
Используйте response-policy
зону вместо главной зоны дляexample.com
При попытке определить имя хоста bind сначала просматривает response-policy
файл зоны и, если не находит ответа, продолжает поиск.
Вот пример настройки:
options {
# Your normal options
response-policy { zone "local_example_com"; };
};
zone "local_example_com" {
type master;
file "master/local_example.zone";
allow-query {none;};
};
Затем добавьте файл зоны с именем, master/local_example.zone
содержащий следующее:
$TTL 24H
@ SOA LOCALHOST. named-mgr.example.com (1 1d 1h 30d 2h)
NS LOCALHOST.
host1.example.com A 192.168.1.1
host2.example.com A 192.168.1.2
host3.example.com A 192.168.1.3
host4.example.com A 192.168.1.4
При попытке разрешения host1.example.com
он получит ответ из response-policy
зоны, а при попытке разрешения mail.example.com
он разрешит его с помощью example.com
серверов имен.
решение2
Подстановочный знак использовать невозможно, поэтому я решил использовать другой подход:
- Все внешние сайты размещены на
example.com
домене. - Все внутренние сайты размещены на
int.example.com
домене.
Не изменяется example.com
никаким образом и по-прежнему доступен в Azure DNS (как и всегда). Внутренний сервер Bind теперь размещает домен int.example.com
, а сервер DHCP также обновляется для push int.example.com
в качестве локального домена.
Я хочу, чтобы мои внутренние сайты были доступны через HTTPS, поэтому мне нужно иметь возможность создавать сертификаты с помощью LetsEncrypt для домена int.example.com
. LetsEncrypt не может получить доступ к моим внутренним сервисам, поэтому мне приходится возвращаться к проверке DNS.
Я добавил int.example.com
зону как дочернюю зону example.com
в Azure DNS. Эта зона не будет иметь никаких записей DNS, потому что мы используем для этого локальный сервер. Мы не хотим раскрывать какую-либо внутреннюю информацию внешним DNS-серверам. Ее единственное назначение — проверка DNS для LetsEncrypt, поэтому AcmeSh должен иметь соответствующие учетные данные для создания/удаления записей TXT. Я следовалэто руководстводля создания правильных учетных данных. Моя настройка использует Azure DNS, но она должна работать для любого DNS, поддерживающего подзоны.