NB Это репостмой предыдущий вопрос, который был отложен и предложено переформулировать для большей ясности (надеюсь, это имеет больше смысла)
У меня установлен один DNS-сервер bind
, который я пытаюсь настроить для размещения родительского домена ( example.org
) и двух поддоменов ( cnc.example.org
и report.example.org
), чтобы устройства в любом из доменов могли получать DNS-запросы, обслуживаемые одним DNS-сервером.
Мой первый вопрос: возможно ли это?
Если да, то почему я получаю следующие ошибки?
Когда я делаю это nslookup host1
с report.example.org
домена, я получаю
server can't find host1: SERVFAIL
Когда я делаю это nslookup host2
с cnc.example.org
домена, я получаю
server can't find host1: SERVFAIL
Настройка выполняется следующим образом:
хост1:
- IP-адрес 192.168.252.21/24
- DNS-сервер 192.168.252.22
/etc/hosts
содержитhost1.cnc.example.org
хост2:
- IP-адрес 192.168.252.20/24
- DNS-сервер 192.168.252.22
/etc/hosts
содержитhost2.report.example.org
DNS-сервер:
- IP-адрес 192.168.252.22/24
- DNS-сервер 127.0.0.1
/etc/hosts
содержитDNSServer.example.org
named.conf.local
конфигурация
/
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "example.org" {
type master;
file "/etc/bind/zones/example.org";
# allow-transfer { 192.168.252.22; };
};
zone "cnc.example.org" {
type master;
file "/etc/bind/zones/cnc.example.org";
# allow-transfer { 192.168.252.22; };
};
zone "report.example.org" {
type master;
file "/etc/bind/zones/report.example.org";
# allow-transfer { 192.168.252.22; };
};
zone "252.168.192.in-appr.arpa" {
type master;
file "/etc/bind/zones/reverse/rev.252.168.192";
allow-transfer { 192.168.252.22; };
};
example.org
конфигурация
;
; BIND data for example.org or report.example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
IN NS DNSServer.example.org.
; main domain name servers - A records
DNSServer IN A 192.168.252.22
;delegated zones
cnc.example.org. IN NS DNSServer.example.org.
report.example.org. IN NS DNSServer.example.org.
* вывод из /etc/resolv.conf на DNSServer *
# Generated by NetworkManager
search example.org
nameserver 127.0.0.1
* вывод из /etc/resolv.conf на хосте 1 *
# Generated by NetworkManager
search report.example.org
nameserver 192.168.252.22
* вывод из /etc/resolv.conf на хосте2 *
# Generated by NetworkManager
search cnc.example.org
nameserver 192.168.252.22
* вывод от dig DNSServer на DNSServer *
root@DNSServer:/etc/bind/zones/reverse# dig DNSServer
; <<>> DiG 9.10.3-P4-Debian <<>> DNSServer
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 45573
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;DNSServer. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov 27 10:47:23 GMT 2017
;; MSG SIZE rcvd: 38
* вывод с использованием dig DNSServer.example.org *
root@DNSServer:/home/osboxes# dig DNSServer.example.org
; <<>> DiG 9.10.3-P4-Debian <<>> DNSServer.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12335
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;DNSServer.example.org. IN A
;; ANSWER SECTION:
DNSServer.example.org. 10800 IN A 192.168.252.22
;; AUTHORITY SECTION:
example.org. 10800 IN NS DNSServer.example.org.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov 27 11:01:19 GMT 2017
;; MSG SIZE rcvd: 79
* вывод с dig host1 на DNSServer *
root@DNSServer:/etc/bind/zones/reverse# dig host1
; <<>> DiG 9.10.3-P4-Debian <<>> host1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 19414
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host1. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov 27 10:48:15 GMT 2017
;; MSG SIZE rcvd: 40
cnc.example.org
конфигурация
;
; BIND data for example.org or report.example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
@ IN NS DNSServer.example.org.
; main domain name servers - A records
;DNSServer IN A 192.168.252.22
;192.168.252.0/24 - A Records
host1.cnc.example.org. IN A 192.168.252.21
report.example.org
конфигурация
;
; BIND data for example.org or report.example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
@ IN NS DNSServer.example.org.
; main domain name servers - A records
DNSServer IN A 192.168.252.22
;192.168.252.0/24 - A Records
host2.report.example.org. IN A 192.168.252.20
Спасибо
решение1
Вы можете использовать делегирование, но если вам это действительно не нужно, я бы посоветовал вам не усложнять задачу и использовать одну зону, содержащую example.org
, cnc.example.org
и report.example.org
.
;
; BIND data for example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
IN NS DNSServer.example.org.
; main domain name servers - A records
DNSServer IN A 192.168.252.22
; public targets
cnc IN CNAME host1.cnc
report IN CNAME host2.report
; hosts delivering services
host1.cnc IN A 192.168.252.21
host2.report IN A 192.168.252.20
Цитата из комментариев:
На DNS-сервере, когда я это делаю,
nslookup host1
я получаюroot@host1:/home/osbixes# nslookup host2 Server: 127.0.0.1 Address 127.0.0.1#53 ** server can’t find host2: SERVFAIL
На DNSServer нет пути поиска, но домен — example.org
, что означает, что все неквалифицированные имена должны быть в этом домене. Нет , host2.example.org
поэтому nslookup
правильно не возвращает вам ответ. В этом случае вам нужно либо заменить domain example.org
в вашем /etc/resolv.conf
на search example.org report.example.org
, либо искать nslookup host2.report
.
От хоста1 или хоста2 я получаю
root@host1:/home/osbixes# nslookup host2 Server: 192.168.252.22 Address 192.168.252.22#53 ** server can’t find host2: SERVFAIL
Та же причина. Ваш домен (путь поиска) /etc/resolv.conf
не включает компонент, который содержит, host2
поэтому нигде nslookup
не видно неполного имени host2
.
Я предполагаю, что файлы
/etc/hosts
и/etc/hostname
на хостах host1 и host2 должны бытьhost1.cnc.example.org
иhost2.report.example.org
Я понятия не имею, что вы имеете в виду, когда говорите, что это /etc/hosts
должно быть host1.cnc.example.org
. /etc/hosts
Файл представляет собой альтернативный способ сопоставления имен хостов и IP-адресов. Если у вас всего два или три имени хоста, вы можете также избежать сложности внутреннего DNS и просто поместить эти записи в /etc/hosts
. С другой стороны, если у вас разумное количество хостов, то DNS является хорошим централизованным решением для локальной сети. (Однако имейте в виду, что он nslookup
намеренно игнорирует /etc/hosts
.)
С любого из хостов, когда я это делаю,
nslookup host1.cnc.example.org
илиnslookup host2.report.example.org
он правильно разрешает IP-адрес
Да. Вы указали полностью определенное имя, которое nslookup
(и bind
) может быть правильно решено. Это доказывает, что DNS работает хорошо.
Мне нужен один DNS-сервер для обработки любых запросов
example.org
иcnc.example.org
поэтомуreport.example.org
, когда новое устройство обращается к сети с просьбой выполнить новые команды, оно запрашиваетcnc.example.org
и направляется наhost1.cnc.example.org
(192.168.252.21), но когда оно хочет отправить отчеты обратно в сеть, оно запрашивает доменreport.example.org
и направляется наhost2.report.example.org
(192.168.252.20)
Для этого вам следует использовать CNAME
запись (псевдоним) в DNS, чтобы запрос для report.example.org
был сопоставлен с хостом host2.report.example.org
. Обратите внимание, что в вашем вопросе нет технической причины, по которой host2
не следует называть host2.example.org
. CNAME
записи могут указывать куда угодно, а не только на хосты в текущем (под)домене.
решение2
Да. Но нет необходимости создавать отдельную конфигурацию для поддомена.
Буква «А» .
на конце означает полное доменное имя, а без нее .
— поддомен исходного домена.
Добавляйте такую запись только для cnc.example.com
конфигурации example.com
.
host1.cnc IN A 192.168.252.21
Итак, вам нужны следующие обновления
- Удалить
cnc.example.org
иreport.example.com
изnamed.conf.local
Добавьте все записи, соответствующие поддомену без
.
at в конце конфигурации родительского домена. Вы также можете явно указать их в родительской зоне, напримерhost1.cnc.example.com. IN A 192.168.252.21
- Удалите соответствующие файлы зоны
cnc.example.com
иreport.example.com
перезапуститеBIND
сервер.