LINUX.ORG.RU
решено ФорумAdmin

Настройка DNS-зон в Bind9

 , ,


0

4

Коллеги, нужна Ваша помощь. С DNS настраиваю первый раз, столкнулась с ошибкой, подскажите, куда копать.

Есть два домена, site1.ru и site2.ru.

site1 делегирован на dns-хостинг провайдера. На входе в сеть стоит Роутер, на котором прокинут порт 53/tcp на 192.168.1.163, являющийся мастер-сервером для site1 (стоит Centos 7 + bind9 и развернута зона site1). В записи зоны site1 прописаны ns1.site1.ru и ns2.site1.ru. Slave-сервер (Centos 7 + bind9) стоит по адресу 192.168.1.164.

В доменном имени site2.ru прописаны ns-адреса – ns1.site1.ru и ns2.site1.ru NS-адреса site2.ru сменяны на наши. Команда dig site2.ru выдает:

 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> site2.ru 
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 2022
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;site2.ru.           IN      A

;; Query time: 2 msec
;; SERVER: 192.168.1.163#53(192.168.1.163)
;; WHEN: Вс ноя 06 15:34:31 MSK 2016
;; MSG SIZE  rcvd: 48
Вывод dig @ns1.site1.ru site2.ru
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> @ns1.site1.ru site2.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 43620
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;site2.ru.           IN      A

;; Query time: 1 msec
;; SERVER: 192.168.1.163#53(192.168.1.163)
;; WHEN: Вс ноя 06 15:44:41 MSK 2016
;; MSG SIZE  rcvd: 48
В cat /etc/resolv.conf прописан мой локальный IP, 192.168.1.163

/etc/named.conf

options {
        listen-on port 53 { localhost; 88.99.88.88; }; //тут мой внешний стат.IP
        listen-on-v6 port 53 { none; };
        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";
        allow-query     { any; };
        allow-transfer     { localhost; 192.168.1.164; }; //slave-сервер стоит рядом в локалке
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "site1.ru" IN {
        type master;
        file "/var/named/site1.ru.zone";
        allow-update { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "." IN {
        type hint;
        file "named.ca";
};

Конфиг зоны site1.ru.zone

$TTL 86400
@   IN  SOA     ns1.site1.ru. root.site1.ru. (
        2016110501  ;Serial ВАЖНО !!! серийный номер должен меняться в большую с$
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
; Указываем два name сервера
                IN      NS              ns1.site1.ru.
                IN      NS              ns2.site1.ru.
; Определяем IP адреса name серверов
ns1             IN      A               192.168.1.163
ns2             IN      A               192.168.1.164
; Define hostname -> IP нашего сервера для этого домена
@               IN      A               192.168.1.166
www             IN      A               192.168.1.166

Так у вас зона site2.ru нигде не описана. Вы завернули ее на свои NS'ы, но на них то этой зоны не видно.

alozovskoy ★★★★★ ()

Какая-то каша.

site1 делегирован на dns-хостинг провайдера.

Зачем если у вас адреса в зоне прописаны серые?

listen-on port 53 { localhost; 88.99.88.88; }

Причем тут внешний ip если это комп в локалке?

anc ★★★★★ ()
Ответ на: комментарий от alozovskoy

Спасибо! Добавила в /etc/named.conf

zone "domen2.ru" IN {
        type master;
        file "domen2.ru.zone";
        allow-update { none; };
};

Скопировала файл зоны domen1.ru.zone в domen2.ru.zone, привела файл /var/named/domen2.ru.zone к виду:

TTL 86400
@   IN  SOA     ns1.domen2.ru. root.domen2.ru. (
        2016110302  ;Serial 
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
; Указываем два name сервера
                IN      NS              ns1.domen2.ru.
                IN      NS              ns2.domen2.ru.
; Определяем IP адреса name серверов
ns1             IN      A               192.168.1.163
ns2             IN      A               192.168.1.164

; Define hostname -> IP нашего сервера для этого домена
@               IN      A               192.168.1.166
www             IN      A               192.168.1.166

Named перезагрузила. Теперь dig domen2.ru показывает следующее:

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> domen2.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33735
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;domen2.ru.           IN      A

;; ANSWER SECTION:
domen2.ru.    86400   IN      A       192.168.1.166

;; AUTHORITY SECTION:
domen2.ru.    86400   IN      NS      ns2.domen2.ru.
domen2.ru.    86400   IN      NS      ns1.domen2.ru.

;; ADDITIONAL SECTION:
ns1.domen2.ru. 86400  IN      A       192.168.1.163
ns2.domen2.ru. 86400  IN      A       192.168.1.164

;; Query time: 1 msec
;; SERVER: 192.168.1.163#53(192.168.1.163)
;; WHEN: Вс ноя 06 22:27:07 MSK 2016
;; MSG SIZE  rcvd: 132

При запросе в браузере 192.168.1.166 – выдаёт то, что нужно, а при запросе – domen2.ru – страница не найдена. На 192.168.1.166 DNS`ом прописан 192.168.1.163 Где я недоглядела?...

manik207 ()
Ответ на: Спасибо! Добавила в /etc/named.conf от manik207

А dig запускали с той же машины, где потом в браузере пытаетесь адрес открыть? Если нет, проверьте там параметры dns и dig'ом посмотрите возвращает ли сервер адрес (чтобы сказать dig'у какой сервер dns использовать его надо через собаку указать, пример: dig site2.ru @8.8.8.8).

Если клиент смотрит на какие-то внешние dns (не ваши), то может быть задержка, да (то есть пока от вашего dns обновления докатятся на те, куда смотрит клиент). Тут по времени сложно прогнозировать, везде может быть по-разному настроено - как пример раньше NIC зоны ru подхватывал изменения только емнип 4 раза в сутки (сейчас отрабатывает сразу).

alozovskoy ★★★★★ ()
Ответ на: Спасибо! Добавила в /etc/named.conf от manik207

Re: Спасибо! Добавила в /etc/named.conf

Где я недоглядела?...

Или не распарсил. Или проблема уж простите в ДНК. Смотрите мой пост выше.

anc ★★★★★ ()
Ответ на: комментарий от anc

Зачем если у вас адреса в зоне прописаны серые?

Если я вас правильно поняла, то вы говорите, что лучше вписать для domen2.ru его ns-адреса с серыми IP.

Попробовала: в настройках домена domen2.ru (в панели управления доменом) прописываю ns1.domen2.ru и ns2.domen2.ru, диалоговое окно выдает ошибку «ns-адреса имеют неверное значение». Или я неправильно вас поняла?

Причем тут внешний ip если это комп в локалке?

Да, правильно, хотела указать внутреннюю сеть, 192.168.1.0/24, исправила

/etc/named.conf
options {
        listen-on port 53 { 192.168.1.0/24; };

manik207 ()
Ответ на: комментарий от manik207

Если я вас правильно поняла, то вы говорите, что лучше вписать для domen2.ru его ns-адреса с серыми IP.

Нет, не правильно поняли, зачем вообще в инет публиковать домен на котором Только серые адреса? Работать один фиг не будет. Если это внутренний корпоративный домен, так и забейте на инет.

Да, правильно, хотела указать внутреннюю сеть, 192.168.1.0/24, исправила

«Мама, роди меня обратно.» Вам слова «listen-on port» ничего не говорят? Простите не сдержался. Выдохнул, для начала уберите вообще эту строку, а потом читайте долго и нудно информацию по сетям, а потом и по bind в частности.

anc ★★★★★ ()
Ответ на: комментарий от PunkoIvan

Нет. Но замечание верное!
ЗЫ Тащето оба протокола работают.

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от alozovskoy

А dig запускали с той же машины, где потом в браузере пытаетесь адрес открыть?

Нет, dig запускала со 163, который мастер-DNS-сервер. Браузер - другой комп из локалки, Win7 c гугловскими dns. С него в командной строке делаю запрос nslookup domen2.ru @8.8.8.8, получаю ответ:

C:\Users\admin> nslookup domen2.ru @8.8.8.8
*** Не найден адрес сервера для "@8.8.8.8":
╤хЁтхЁ:  google-public-dns-a.google.com
Address:  8.8.8.8

Не заслуживающий доверия ответ:
╚ь :     domen2.ru
Address:  192.168.1.166
Т.е., как я понимаю, гугл выдает мой локальный IP, хотя я рассчитывала, что гугловский DNS будет направлять запрос на мой DNS, а уже мой DNS будет передавать в ответ на этот запрос перенаправление к локальной машине по адресу 192.168.1.166.

Если же я меняю 192.168.1.166 (свой локальный IP) на свой внешний IP, то как мой DNS перенаправит входящий запрос именно на эту, 166-ую машину? Потому что я планирую разные домены перенаправлять на разные машины в сети. Как тогда должны выглядеть записи?

manik207 ()
Ответ на: комментарий от manik207

У вас какая-то каша. Честно говоря я не совсем понимаю описание вашего стенда (вы какие-то машины называете по ip, какие-то по ОС, какие-то по запущеным сервисам, я не въезжаю). При чем тут откуда пришел запрос в данном случае? Если у вас в зоне (в bind) прописан локальный адрес (192.168...), то при запросе записи dns отдаст именно этот локальный адрес. Чтоб он отдал внешний - прописывайте внешний. Если вам надо чтоб при запросе из локальной подсети отдавался «серый» адрес, а при запросе из Интернета (в том числе и через dns Google) отдавался «белый» адрес - вам надо вьюхи настраивать (views) в bind, то есть говорить ему какие записи для запросов из каких подсетей возвращать.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Я совсем запуталась… Вы правы, надо с описания ситуации начинать. Изначальные данные: есть статичный IP и domen2.ru, на входе статичного IP стоит роутер, за ним - несколько серверов в локалке:

192.168.1.163 - master-DNS-сервер, СentOS 7, BIND9, его конфиги - ниже

192.168.1.164 - slave-DNS-сервер, СentOS 7, BIND9, конфиг - ниже

192.168.1.165 - веб-сервер

192.168.1.166 - другой веб-сервер с ruby

192.168.1.167 - сервер VoIP

Сервера нужны именно на разных машинах, совмещение не подходит. Задача: на каждый локальный сервер прицепить поддомены вида 166.domen2.ru, 165.domen2.ru и т.д., где 166 и 165 - это серые адреса локальных серверов. Доступ к ним нужен из внешки, из локалки - не нужен.

Как решение увидела, что нужно поднять DNS-сервер (192.168.1.163), который при обращении извне по запросу 166.domen2.ru, перенаправлял на локальный адрес 192.168.1.166.

Начала ее решать поднятием BIND’а на 192.168.1.163, но запуталась как в зонах, так и в первую очередь в ns-адресах для domen2.ru.

Такая задача с поддоменами, на одном статичном IP и несколькими серверами вообще реализуема? Если да, то подскажите как?

Конфиги с master-server (192.168.1.163)]

/etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { none; };
        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";
        allow-query     { any; };
        allow-transfer     { localhost; 192.168.1.164; };
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "domen2.ru" IN {
        type master;
        file "domen2.ru";
        allow-update { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "." IN {
        type hint;
        file "named.ca";
};

/var/named/domen2.ru
$TTL 86400
@   IN  SOA     ns1.domen2.ru. root.domen2.ru. (
        2016110302  ;Serial ВАЖНО !!! серийный номер должен меняться в большую стро$
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
                IN      NS              ns1.domen2.ru.
                IN      NS              ns2.domen2.ru.
ns1             IN      A               192.168.1.163
ns2             IN      A               192.168.1.164

@               IN      A               192.168.1.166
www          IN      A               192.168.1.166

Конфиг slave-сервера (192.168.1.164)

/etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        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";
        allow-query     { any; };
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;

        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
};
};

zone "domen2.ru" IN {
type slave;
masters { 192.168.1.163; };
file "domen2.ru";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
manik207 ()
Ответ на: комментарий от anc

Если это внутренний корпоративный домен, так и забейте на инет.

Забить на инет не могу, мне этот домен domen2.ru нужен из инета.

Получается, что сейчас по запросу domen2.ru из вне, отзывается мой внешний стат-IP, запрос перенаправляется на мой серый локальный ДНС-сервер (192.168.1.163), который сообщает, что domen2.ru записан у него по адресу 192.168.1.166. И если у клиента, который прислал запрос, в ЕГО локалке есть машина с серым же IP 192.168.1.166, то запрос и будет тыркаться в этот адрес. Но никак не в мой. Это я поняла, спасибо)))

Какой этому домену присвоить внешний ns, но не провайдерский, а моего стат-IP? Как это прописать?

для начала уберите вообще эту строку, а потом читайте долго и нудно информацию по сетям, а потом и по bind в частности.

Книгу «DNS и BIND» читать начала, сейчас заканчиваю вторую главу. По сети что-то конкретное посоветуете?

manik207 ()
Ответ на: комментарий от slapin

А вот теперь стоит подумать, а стоило ли начинать с DNS? Как снаружи на серые адреса попадать будете?

А вот теперь стоит подумать, а стоило ли начинать с DNS?

А с чего нужно начинать?

Как снаружи на серые адреса попадать будете?

В доменном имени прописан мой IP. По IP находится роутер, который переадресовывает запросы по 53 порту на 192.168.1.163 (мастре-днс), а уже мастер-днс объясняет ему, на каком серой IP искать эту зону.

manik207 ()
Ответ на: комментарий от manik207

Задача: на каждый локальный сервер прицепить поддомены вида 166.domen2.ru, 165.domen2.ru и т.д., где 166 и 165 - это серые адреса локальных серверов. Доступ к ним нужен из внешки, из локалки - не нужен.

Дальше можно не читать.

В общем, суть такова - у вас есть всего один адрес во внешней сети. Сколько у вас серверов стоит за вашим шлюзом (роутером) абсолютно не важно - вы не можете раздавать серые адреса в Интернет, у вас для всех ресурсов внутри сети должен быть указан один адрес.

Давайте представим что адрес вашего шлюза в Интернете 178.248.233.6. Сервер 192.168.1.165 будет у нас webserver1, 192.168.1.166 - webserver2. Добавляете в dns записи (в зону site2.ru если я правильно понял, но не суть важно)

webserver1 A 178.248.233.6
webserver2 A 178.248.233.6

Когда вы из браузера открываете URL http://webserver1.site2.ru и http://webserver2.site2.ru вы попадаете на ваш шлюз, потому что другой точки входа в вашу сеть просто быть не может. Тут у нас проблема - серверов voip и dns у вас по одному (хотя вот с dns я не совсем понял роль слейва, ну да ладно, представим что он один), прокинули порты на роутере и все ОК, попадаете на нужные сервера. В случае вебсерверов немного сложнее, так как их у вас два, и прокинуть стандартный 80 порт тут не получится. Варианта два - либо вы всем даете ссылки вида http://webserver1.site2.ru:81 http://webserver2.site2.ru:82 и соответствующие порты на роутере прокидываете на машины в локальной сети, либо поднимаете еще один балансировщик. Первый вариант, очевидно, не является хорошим, потому что ваши клиенты\пользователи постоянно будут про порты забывать, да и вообще это «не красиво». Остается вариант с балансировщиком: на еще одной машине в локальной сети или на существующей ставите nginx, apache или что вам там больше нравится. Все запросы по 80 порту на роутере заворачиваете на этот балансировщик. Балансер принимает запрос от пользователя, смотрит какое имя сервера (webserver1.site2.ru или webserver2.site2.ru) запросил пользователь, на основании этого отправляет запрос на нужный вебсервер, ждет ответ и возвращает его пользователю. В случае с nginx чтоб сделать это вам надо погуглить «proxy_pass» и «upstream», как там в апаче не в курсе. Вот как-то так. DNS это сейчас не основная ваша проблема.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Все запросы по 80 порту на роутере заворачиваете на этот балансировщик.

По вашему совету, на nginx подняла балансер, в конфиге прописала переадресацию - поддомены работают, запросы переадресуются на локальные сервера. Это то, что нужно! Спасибо огромное!!! Всё, на удивление, получилось без BIND’а.

Дальше можно не читать.
В общем, суть такова - у вас есть всего один адрес во внешней сети.

Да, адрес один. И развернуть полноценный DNS-сервер с прописанием моих ns-адресов и зон, если я правильно поняла, не получится, верно? И DNS-сервер, свой собственный, получится поставить при наличии двух белых IP, один мастер, другой слейв? Только тогда я смогу прописать собственную зону, свои ns-ы и закрепить их за своими IP-шниками?

manik207 ()
Ответ на: комментарий от manik207

Рад что все получилось! =)

DNS-сервер, свой собственный, получится поставить при наличии двух белых IP

Ну технически это не обязательно. Вообще можно все поднять только на одном сервере и все будет работать. Но тут могут быть какие-то особенные требования вашего доменного регистратора, да и вообще «класть все яйца в одну корзину» не очень правильно - ляжет ваш сервер и приехали.

Если у вас какой-то небольшой проект с малым кол-вом записей в зоне (и редким их изменением) - оставте вашу зону у регистратора домена. Эта процедура бесплатная (обычно), минус - для правки зоны нужно будет заходить в веб-панель регистратора (опять же обычно, может кто-то предоставляет API и подобные механизмы, я не сталкивался). Если вам необходимо все-таки иметь зону полностью под своим контролем - получите еще один адрес (можно поискать дешевые vps или как-то решить вопрос с ISP) или воспользуйтесь бесплатными вторичными dns-серверами (можно нагуглить). В целом могу сказать что на крупных проектах у меня не возникает проблемы с тем чтоб поднять еще один сервер, а на мелких «домашних страничках» я еще ни разу не сталкивался с проблемами при нахождении зоны у доменного регистратора (случаи с бесплатными доменами .tk и подобными не рассматриваем, там другая кухня).

alozovskoy ★★★★★ ()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от alozovskoy

Но тут могут быть какие-то особенные требования вашего доменного регистратора

Когда-то давно, когда требования двух серверов еще активно были в ходу, но при этом тестирование уже отменили, я использовал грязный хак: прописал вторым ns самого регистратора (мне было пофиг что он не ответит т.к. ситуация была похожая с ситуацией ТС, один ip все сервисы на нем).

anc ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.