![DNS: делегировать разрешение поддомена другому серверу имен](https://rvso.com/image/1502893/DNS%3A%20%D0%B4%D0%B5%D0%BB%D0%B5%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%BC%D1%83%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%83%20%D0%B8%D0%BC%D0%B5%D0%BD.png)
Я настраиваю DNS-сервер дома, чтобы мне было проще создавать псевдонимы для некоторых моих локальных серверов, а также в качестве проекта для лучшего понимания DNS. Поскольку я новичок в этом деле, пожалуйста, простите (и исправьте, если хотите) любые ошибки в терминологии!
Цель моего локального DNS-сервера — использовать мой домен для доступа к некоторым моим локальным машинам. Итак, предположим, что мой домен — my-domain.com
. У меня дома есть медиа-сервер, к которому я хочу получить доступ как media.my-domain.com
, и у меня есть два локальных DNS-сервера, которые я использую для этой цели. Эти DNS-серверы делегируют Google DNS другие запросы.
Вот мой файл зоны для my-domain.com
, который хранится /etc/bind/zones/db.my-domain.com
на моем локальном DNS-сервере ns1
:
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.my-domain.com. admin.my-domain.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; name servers - NS records
@ IN NS ns1.my-domain.com.
@ IN NS ns2.my-domain.com.
;
; name servers - A records
ns1.my-domain.com. IN A 10.55.55.55
ns2.my-domain.com. IN A 10.55.55.56
;
; 10.55.55.0/24 - A records
media.my-domain.com. IN A 10.55.55.100
Вот мой файл параметров, который хранится /etc/bind/named.conf.options
на моем локальном DNS-сервере ns1
:
acl "trusted" {
10.55.55.0/24; # home network
};
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { trusted; };
listen-on { 10.55.55.55; };
allow-transfer {none; }; # disable zone transfers
forwarders {
8.8.8.8; # google1
8.8.4.4; # google2
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
Вот 10.55.55.0/24
моя локальная подсеть, а ns1
и ns2
— мои основной и дополнительный DNS-серверы соответственно.
Я использую его my-domain.com
для других целей в Интернете, поэтому, например, когда я получаю доступ, admin.my-domain.com
он переносит меня в консоль администратора публично видимого веб-сайта. Это означает, что если вы выполните nslookup
on admin.my-domain.com
с DNS-серверов Google, вы увидите, что он сопоставлен с глобально доступным публичным IP-адресом.
К сожалению, после того, как я внедрил свои локальные DNS-серверы, я не могу admin.my-domain.com
правильно разрешить. Мои nslookup
запросы попадают на мои локальные DNS-серверы, которые не настроены для этого поддомена, и я получаю "Нет ответа" от моего локального DNS.
Вместо этого я хотел бы, чтобы мои DNS-серверы перенаправляли запросы на my-domain.com
Google DNS и предоставляли ответы только на ns1.my-domain.com
, ns2.my-domain.com
и media.my-domain.com
. Я видел несколько вопросов, похожих на мой, но ответы, как правило, заключаются в создании одного файла зоны для каждого поддомена. Это действительно единственный способ? Я бы очень хотел иметь возможность сказать: «Если я указал правило для , x.my-domain.com
то следуйте этому правилу. В противном случае делегируйте вверх по цепочке (в моем случае Google DNS)».
Я не уверен, как устранить эту неполадку с помощью Google, поскольку я не совсем понимаю терминологию, и поскольку я полный нуб, я не знаю, с чего начать, чтобы исправить это самостоятельно. Возможно ли вообще то, о чем я прошу? Любая помощь в том, как я могу реализовать это поведение или найти его, будет очень признательна. Спасибо!
решение1
Проблема в том, что вы настроили Bind так, чтобы он был полномочным для всего example.com
.
Поэтому вам необходимо либо настроить локальный Bind для хранения не только внутренних записей DNS, но и копий всех ваших публичных записей DNS в файле зоны для example.com
.
В качестве альтернативы вместо того, чтобы сделать Bind авторизованным для example.com
вас, зарезервируйте поддомен example.com для вашего внутреннего использования, сделайте свой внутренний DNS авторизованным только для него. т. е. создайте зону с именем home.example.com
и используйте media.home.example.com
. Таким образом, вы не сможете иметь конфликтующие записи во внутреннем и публичном DNS.