[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 написал(а): А какой
Его (в смысле
named.conf
) я и цитировал.Гугл, если его правильно спросить (самое сложное --- в подборе правильной формулировки вопроса) --- замечательнейшая штука :)
Проблема решена добавлением в список глобальных опций параметра
allow-recursion
:Или, ИМХО более изящно, с использованием Access Control List'а:
И далее в опциях:
allow-recursion { mylocalnet; };
ЗЫ: Причём разрешать надо не только для исключения, а для всех. Иначе может быть облом.
Который на строне Gentoo Linux (IP например 192.168.1.13) выглядит следующим образом:
:wq
--
Live free or die
Anarchist написал(а): SysA
Вы цитировали описание ЗОНЫ (конечно же из named.conf, что же еще :)), а я просил ГЛОБАЛ!
Собственно вы сами нашли ошибку, которую я предполагал, но не стал озвучивать, поскольку не был уверен, что вы ошиблись... ;)
Кроме того у меня allow-query в глобал и в зонах разные...
/
На самом деле ошибка была немного другая :)
В списке глобальных опций
allow-query
отсутствовал.Соответственно ИМХО более правильным будет прописать его туда:
allow-query { machines; };
Так тоже всё, что нужно, работает. Пошёл думать...
:wq
--
Live free or die
а разве не достаточно в
а разве не достаточно в resolv.conf указать
или
?
или у anarchist'a поставлена более тонкая задача (суть которой я не уловил) ?
что-то добрый я сегодня ....
/
На клиенте нет кэширующего DNS-сервера. И доступа к внешним DNS-серверам тоже нет.
Задача формулировалась: настроить данный конкретный DNS-сервер так, чтобы он корректно отрабатывал все запросы локальных клиентов.
:wq
--
Live free or die
простите, не
простите, не догнал...
под "клиентом" понимается машинка, где установлен bind?
но ведь bind - кеширующий сервер ?
а как же "белый IP" ? он в дауне?
а как же тогда резолвятся имена ya.ru и www.ru ?
прописываются локально ручками?
или дампится база 1 раз с внешнего ns-сервера?
я хочу понять (для себя) - чем обусловлено применение ACL как класса?
если лок.сетей больше 2-х и хочется одним дать, другим - нет , то оно - понятно.
а иначе - зачем?
чтоб не принимать запросы на bind с внешнего интерфейса?
но, ЯТД, проще бинду указать не слушать этот интерфейс, а еще лучще - iptables запретить NEW INPUT на 53 порт внешнего адреса.
я не могу понять целесообразность применения ACL - зачем дополнительно нагружать bind на обработку этой логики на каждом запросе?
смысл?
обслуживать только две сетки из сеток числом больше двух?
что-то добрый я сегодня ....
/
Нет.
Под клиентом здесь понимается рабочая станция локальной сети.
Если локальных сетей больше, чем интерфейсов, которые слушает сервер, то для обслуживания запросов из сети, где у него нет интерфейса, ACL и нужен. По крайней мере в случае обсуждаемой/препарируемой сборки.
Где, как и насколько глубоко зашито это умолчание в бинд --- я не знаю. И сейчас мне немного не до того, чтобы туда закапываться...
Грамотно настроенный файрволл не отменяет необходимости корректной настройки демона.
Меня здесь интересует скорее величина потери производительности на необходимости отработки 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 прописано
и всё работает безо всяких ACL'ов, хотя до сервера добираются клиенты из 3-х разных сетей.
может я что-то сделал не так, но всё работает...(и локальные "разводки", и внешние...)
что-то добрый я сегодня ....
leryc написал(а): у меня эта
Не понял.
bind
на сервере какие интерфейсы слушает?Из каких сетей к нему обращаются клиенты?
:wq
--
Live free or die
Anarchist написал(а): Не
обслуживаемые сетки : 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 ;)