[Solved] Restricted bind и разрешение имён из корневой зоны

Есть локальная сеть.
В ней локализуется некий DNS-сервер (у которого есть и "белый" IP-адрес, но ничего не изменится, если буду считать его адресом 192.168.1.1). Который в том числе держит зону для локальной сети, состоящей из нескольких подсетей (допустим 192.168.1.0/24 и 192.168.2.0/24).

Доступ к кэшу ограничен:

acl machines { 127.0.0.0/8;
                192.168.1.0/24;
                192.168.2.0/24;
                !any;
                };

И соответственно в объявлении зон:

zone "mydomain.ru" {
        type master;
        file "master/mydomain.ru";
        allow-query { machines; };
        allow-transfer { none; };
        };

Когда с кэшем работает машина из сети, где у сервера есть интерфейс (192.168.1.0/24) --- всё замечательно работает.
Когда машина из сети, где у сервера нет интерфейса (192.168.2.0/24) спрашивает адрес локальной зоны --- всё тоже работает замечательно.
Но когда машина из сети 192.168.2.0/24 запрашивает внешний адрес (nslookup www.ru или nslookup ya.ru), то получает облом.
На терминале клиента (M$ Window$) оно выглядит следующим образом:

nslookup ya.ru
Server:  bind.mydomain.ru
Address:  192.168.1.1

*** bind.mydomain.ru can't find ya.ru: Query refused

В логах сервера:

Sep 14 09:19:02 bind named[2778]: client 192.168.2.105#2802: query (cache) 'ya.ru/A/IN' denied
Sep 14 09:19:52 bind named[2778]: client 192.168.2.105#2806: query (cache) 'www.ru/A/IN' denied

Оно так и должно быть???

А какой allow-query в глобал?

А какой allow-query в глобал?
А лучше сразу покажите /etc/bind/named.conf

SysA написал(а): А какой

SysA написал(а):
А какой allow-query в глобал?
А лучше сразу покажите /etc/bind/named.conf

Его (в смысле named.conf) я и цитировал.

Гугл, если его правильно спросить (самое сложное --- в подборе правильной формулировки вопроса) --- замечательнейшая штука :)
Проблема решена добавлением в список глобальных опций параметра allow-recursion:

allow-recursion { 127.0.0.0/8;
                192.168.1.0/24;
                192.168.2.0/24;
};

Или, ИМХО более изящно, с использованием Access Control List'а:

acl mylocalnet { 127.0.0.0/8;
                192.168.1.0/24;
                192.168.2.0/24;
                !any;
                };

И далее в опциях:
allow-recursion { mylocalnet; };

ЗЫ: Причём разрешать надо не только для исключения, а для всех. Иначе может быть облом.
Который на строне Gentoo Linux (IP например 192.168.1.13) выглядит следующим образом:

$ nslookup          
> server 192.168.1.1
Default server: 192.168.1.1
Address: 192.168.1.1#53
> www.ru
Server:        192.168.1.1
Address:    192.168.1.1#53

** server can't find www.ru: NXDOMAIN

:wq
--
Live free or die

Anarchist написал(а): SysA

Anarchist написал(а):
SysA написал(а):
А какой allow-query в глобал?
А лучше сразу покажите /etc/bind/named.conf

Его (в смысле named.conf) я и цитировал.

Вы цитировали описание ЗОНЫ (конечно же из named.conf, что же еще :)), а я просил ГЛОБАЛ!
Собственно вы сами нашли ошибку, которую я предполагал, но не стал озвучивать, поскольку не был уверен, что вы ошиблись... ;)
Кроме того у меня allow-query в глобал и в зонах разные...

/

SysA написал(а):
Вы цитировали описание ЗОНЫ (конечно же из named.conf, что же еще :)), а я просил ГЛОБАЛ!
Собственно вы сами нашли ошибку, которую я предполагал, но не стал озвучивать, поскольку не был уверен, что вы ошиблись... ;)
Кроме того у меня allow-query в глобал и в зонах разные...

На самом деле ошибка была немного другая :)
В списке глобальных опций allow-query отсутствовал.
Соответственно ИМХО более правильным будет прописать его туда:
allow-query { machines; };

Так тоже всё, что нужно, работает. Пошёл думать...

:wq
--
Live free or die

а разве не достаточно в

а разве не достаточно в resolv.conf указать

nameserver 127.0.0.1
nameserver внешний_dns_сервер

или

        // uncomment the following lines to turn on DNS forwarding,
        // and change the forwarding ip address(es) :
        //forward first;
        //forwarders {
        //      123.123.123.123;
        //      123.123.123.123;
        //};

?

или у anarchist'a поставлена более тонкая задача (суть которой я не уловил) ?

что-то добрый я сегодня ....

/

leryc написал(а):
или у anarchist'a поставлена более тонкая задача (суть которой я не уловил) ?

На клиенте нет кэширующего DNS-сервера. И доступа к внешним DNS-серверам тоже нет.

Задача формулировалась: настроить данный конкретный DNS-сервер так, чтобы он корректно отрабатывал все запросы локальных клиентов.

:wq
--
Live free or die

простите, не

простите, не догнал...

Anarchist написал(а):
На клиенте нет кэширующего DNS-сервера.

под "клиентом" понимается машинка, где установлен bind?
но ведь bind - кеширующий сервер ?

Anarchist написал(а):
И доступа к внешним DNS-серверам тоже нет.

а как же "белый IP" ? он в дауне?
а как же тогда резолвятся имена ya.ru и www.ru ?
прописываются локально ручками?
или дампится база 1 раз с внешнего ns-сервера?

Anarchist написал(а):
Задача формулировалась: настроить данный конкретный DNS-сервер так, чтобы он корректно отрабатывал все запросы локальных клиентов.

я хочу понять (для себя) - чем обусловлено применение ACL как класса?
если лок.сетей больше 2-х и хочется одним дать, другим - нет , то оно - понятно.
а иначе - зачем?
чтоб не принимать запросы на bind с внешнего интерфейса?
но, ЯТД, проще бинду указать не слушать этот интерфейс, а еще лучще - iptables запретить NEW INPUT на 53 порт внешнего адреса.

я не могу понять целесообразность применения ACL - зачем дополнительно нагружать bind на обработку этой логики на каждом запросе?
смысл?
обслуживать только две сетки из сеток числом больше двух?

что-то добрый я сегодня ....

/

leryc написал(а):
Anarchist написал(а):
На клиенте нет кэширующего DNS-сервера.

под "клиентом" понимается машинка, где установлен bind?
но ведь bind - кеширующий сервер ?

Нет.
Под клиентом здесь понимается рабочая станция локальной сети.

leryc написал(а):
Anarchist написал(а):
Задача формулировалась: настроить данный конкретный DNS-сервер так, чтобы он корректно отрабатывал все запросы локальных клиентов.

я хочу понять (для себя) - чем обусловлено применение ACL как класса?
если лок.сетей больше 2-х и хочется одним дать, другим - нет , то оно - понятно.
а иначе - зачем?
чтоб не принимать запросы на bind с внешнего интерфейса?

Если локальных сетей больше, чем интерфейсов, которые слушает сервер, то для обслуживания запросов из сети, где у него нет интерфейса, ACL и нужен. По крайней мере в случае обсуждаемой/препарируемой сборки.
Где, как и насколько глубоко зашито это умолчание в бинд --- я не знаю. И сейчас мне немного не до того, чтобы туда закапываться...

leryc написал(а):
но, ЯТД, проще бинду указать не слушать этот интерфейс, а еще лучще - iptables запретить NEW INPUT на 53 порт внешнего адреса.

Грамотно настроенный файрволл не отменяет необходимости корректной настройки демона.

leryc написал(а):
я не могу понять целесообразность применения ACL - зачем дополнительно нагружать bind на обработку этой логики на каждом запросе?
смысл?
обслуживать только две сетки из сеток числом больше двух?

Меня здесь интересует скорее величина потери производительности на необходимости отработки ACL'а.

Необходимость обсуловлена тем, что без него запросы, приходящие из сети 192.168.2.0/24, в которой у сервера по условиям задачи интерфейса нет, (на адрес 192.168.1.1) обламываются (виндавс пишет Refused).

:wq
--
Live free or die

у меня эта "кухня" настроена

у меня эта "кухня" настроена так:

bind слушает 127.0.0.1
на клиенте (винде) настроен внешний dns 192.168.0.1
на сервере (192.168.0.1) в resolv.conf прописано

nameserver 127.0.0.1
nameserver внешний_dns_сервер

и всё работает безо всяких ACL'ов, хотя до сервера добираются клиенты из 3-х разных сетей.

может я что-то сделал не так, но всё работает...(и локальные "разводки", и внешние...)

что-то добрый я сегодня ....

leryc написал(а): у меня эта

leryc написал(а):
у меня эта "кухня" настроена так:

bind слушает 127.0.0.1
на клиенте (винде) настроен внешний dns 192.168.0.1
на сервере (192.168.0.1) в resolv.conf прописано

nameserver 127.0.0.1
nameserver внешний_dns_сервер

и всё работает безо всяких ACL'ов, хотя до сервера добираются клиенты из 3-х разных сетей.

Не понял.
bind на сервере какие интерфейсы слушает?
Из каких сетей к нему обращаются клиенты?

:wq
--
Live free or die

Anarchist написал(а): Не

Anarchist написал(а):
Не понял.
bind на сервере какие интерфейсы слушает?
Из каких сетей к нему обращаются клиенты?

#/etc/bind/named.conf

options {
        directory "/var/bind";
       forward first;
       forwarders {
             212.122.1.2
       };
        listen-on-v6 { none; };
        listen-on { 127.0.0.1; };

};
#/squid/squid.conf

dns_nameservers  127.0.0.1

#/etc/resolv.conf
nameserver 127.0.0.1
trustme # nslookup mail.ru
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   mail.ru
Address: 94.100.191.201
Name:   mail.ru
Address: 94.100.191.202
Name:   mail.ru
Address: 94.100.191.203
Name:   mail.ru
Address: 94.100.191.204

обслуживаемые сетки : 192.168.0.0/24 192.168.1.0/24 10.0.0.0/24 212.122.хх.хх/28

Я думаю, что в твоем случае можно добавить бинду на прослушку интерфейс с локальной сети (у меня запросы он виндей рулятся на сквид и несколько транзитных подконтрольных тунелей)

что-то добрый я сегодня ....

.

leryc написал(а):
обслуживаемые сетки : 192.168.0.0/24 192.168.1.0/24 10.0.0.0/24 212.122.хх.хх/28

Я думаю, что в твоем случае можно добавить бинду на прослушку интерфейс с локальной сети (у меня запросы он виндей рулятся на сквид и несколько транзитных подконтрольных тунелей)

Твои клиенты для чего-нибудь кроме доступа в Интернет через Сквид (который сам запрашивает IP адрес через IP 127.0.0.1) DNS используют?

:wq
--
Live free or die

мне сильно кажется, что ты

мне сильно кажется, что ты хочешь сделать view при помощи acl - это невозможно

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".