DNS клиент: настройка интервала (между обращениями к nameserver'ам)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

lilovip
Сообщения: 13

DNS клиент: настройка интервала

Сообщение lilovip »

Имеется городская сеть 10.0.0.0/8, ресурсы в ней имеют доменные имена *.adsl (естественно. разрешаемые только внутри городской сети). DNS сервер, разрешающий эти (и только эти) имена - 10.1.0.19. DNS сервер, разрешающий Интернет имена - 85.95.164.60. Оба сервера поддерживаются провайдером.
Два варианта настройки /etc/resolv.conf на локальной машине:

Код: Выделить всё

#1:
#===
nameserver 85.95.164.60
nameserver 10.1.0.19
#===

При таком конфиге Интернет имена разрешаются отлично, но попытка

Код: Выделить всё

$ ping example.adsl

выдаёт:

Код: Выделить всё

ping: unknown host example.adsl

Видимо, "правильный" внешний DNS сервер сразу говорит: "Да ты рехнулся, что за домен .adsl? Нету такого"

Код: Выделить всё

#2:
#===
nameserver 10.1.0.19
nameserver 85.95.164.60
#===

При таком конфиге *.adsl имена разрешаются отлично, но Интернет имена - с задержкой в пару секунд. 10.1.0.19 не может разрешить внешнее имя, DNS клиент на локальной машине выжидает по таймауту, и только потом обращается к 85.95.164.60. То есть работать в Интернет становится практически невозможно.

Логичное решение - снизить этот самый таймаут между обращениями к серверам из /etc/resolv.conf до примерно 50 мс. Однако долгие поиски по Интернету и ман-страницам не дали никакого ответа на вопрос, как это сделать.
Цитата из man resolver:

Код: Выделить всё

Используемый алгоритм пытается подключиться к серверу имен и, если запрос не был обработан через [b]некоторый промежуток времени[/b], делается  попытка  подключиться  к  следующему серверу  имен, и так до тех пор пока не будет обработан весь список серверов, затем повторить процедуру, пока не будет достигнуто максимальное количество повторов

На этом форуме поиск вообще отказывается что-то искать, если в запросе есть слово DNS.

Я понимаю, что одно из самых грамотных решений проблемы - сделать кэширование DNS на локальной машине (хотя не самое лучшее - у нас адреса для *.adsl динамические и меняются весьма часто), но хотелось бы всё же узнать, как сделать настройку интервала для резольвера (или узнать, что сделать это нельзя никак).
Заранее спасибо.
Спасибо сказали:
Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: DNS клиент: настройка интервала

Сообщение Bluetooth »

Данная конфигурация, на мой взгляд, в корне неверная.
Чем париться с какой-то настройкой интервалов, лучше реализовать нормально, самое простое - серверу 10.1.0.19 прописать в форвардеры днс 85.95.164.60. Это будет значить, что 10.1.0.19 будет отвечать на запросы по своим зонам сам, а все остальные запросы форвардить на главный сервер. Плюс Он еще и будет кешировать ответы того сервера, тем самым несколько снижая время на резолвинг популярных сайтов(ибо клиентам больше не нужно лезть на дальний сервер)

Другой вариант(Вам может не подходить по некоторым причинам, о которых Вы не указали, но которые могут присутствовать): Упразднить сервер 10.1.0.19, а зону адсл отдать 85.95.164.60, и реализовать на нем два view: internal, в acl которому Вы запишете Ваших внутренних клиентов, и куда Вы добавите зону adsl), и view external, в который Вы запишете всех остальных, и для которого не будет зоны adsl. Почитать подробнее про view можно в поиске по слову bind view, или в документации по bind 9.
Спасибо сказали:
lilovip
Сообщения: 13

Re: DNS клиент: настройка интервала

Сообщение lilovip »

Спасибо за ответ.
Эти решения, конечно, гораздо предпочтительнее. Я и сам могу назвать ещё пару-тройку решений проблем нашей городской сети на стороне провайдера. Вот только я не работаю в нашем провайдере, а все просьбы пользователей разбиваются о стену пофигизма провайдера в отношении городской сети.
У нас действительно был поднятый одним из пользователей DNS сервер, разрешающий и внутренние и внешние имена. Буквально вчера человек перестал его поддерживать, и проблема вскрылась снова. Особо обидно, что у виндузятников этой проблемы нет - прописанные в список два DNS сервера опрашиваются по очереди весьма быстро, без такого огромного интервала.
Так что вопрос пока остаётся открытым.
Спасибо сказали:
Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: DNS клиент: настройка интервала

Сообщение Bluetooth »

lilovip писал(а):
10.01.2010 02:53
Спасибо за ответ.
Эти решения, конечно, гораздо предпочтительнее. Я и сам могу назвать ещё пару-тройку решений проблем нашей городской сети на стороне провайдера. Вот только я не работаю в нашем провайдере, а все просьбы пользователей разбиваются о стену пофигизма провайдера в отношении городской сети.
У нас действительно был поднятый одним из пользователей DNS сервер, разрешающий и внутренние и внешние имена. Буквально вчера человек перестал его поддерживать, и проблема вскрылась снова. Особо обидно, что у виндузятников этой проблемы нет - прописанные в список два DNS сервера опрашиваются по очереди весьма быстро, без такого огромного интервала.
Так что вопрос пока остаётся открытым.

Ах вот как...Таких провайдеров нужно закрывать сразу :)
Вам нужно было сразу сказать, что с серверами сделать ничего нельзя :)
Однако по Вашему вопросу я нагуглил за 30 секунд:
http://linux.die.net/man/5/resolver
timeout:n
sets the amount of time the resolver will wait for a response from a remote name server before retrying the query via a different name server. Measured in seconds, the default is RES_TIMEOUT (see <resolv.h> ).
Спасибо сказали:
lilovip
Сообщения: 13

Re: DNS клиент: настройка интервала

Сообщение lilovip »

Таких провайдеров нужно закрывать сразу

Мы бы с удовольствием, да только это монополист в городе. Не было бы монополии - не плевали бы на пользователей...
Однако по Вашему вопросу я нагуглил за 30 секунд:
http://linux.die.net/man/5/resolver

Спасибо! Как только прочитал, вспомнил что сам около года назад уже находил эту опцию, решая эту же проблему. И вспомнил сразу, почему отказался тогда от этого решения - число секунд можно только целое выставлять, то есть не меньше единицы (по дефолту, оказывается, стоит 5). А теперь представьте, что каждый элемент на веб-странице с новым адресом грузится с задержкой в секунду. В общем, опция найдена, но она не поможет. К тому же обнаружил, что сервер 10.1.0.19 перестал поддерживать имена *.adsl, оставили только разрешение имён локальных ресурсов провайдера, коих единицы. Теперь проблема обострилась особо, и пока кто-то не поднимет нормальный DNS сервер дома, будет в городе дискомфорт. Временно решил проблему запихиванием известных городских ресурсов, у которых статические адреса, в /etc/hosts.

Выяснил, почему мой man resolver не показал мне опции timeout. Вот что в конце его:

Код: Выделить всё

4th Berkeley Distribution 11 Ноября, 1993 года

Это пакет manpages из стабильного ныне lenny (squeeze на этой машине у меня не стартует иксы), вот такой вот свежачок. То есть опция работает, а в manpages не отражена. Может, багрепорт им написать?
Та ссылка, которую Вы дали свежее:

Код: Выделить всё

4th Berkeley Distribution June 23, 2004

А скачал сейчас manpages для squeeze, так там настоящая свежатина:

Код: Выделить всё

4th Berkeley Distribution 2009-03-01

И опций новых появилась куча, правда секунды всё так же только целые:

Код: Выделить всё

debug  sets RES_DEBUG in _res.options.

              ndots:n
                     sets  a threshold for the number of dots which must appear in a name given to res_query(3) (see resolver(3)) before an initial absolute
                     query will be made.  The default for n is 1, meaning that if there are any dots in a name, the name will be tried first as an  absolute
                     name before any search list elements are appended to it.  The value for this option is silently capped to 15.

              timeout:n
                     sets  the amount of time the resolver will wait for a response from a remote name server before retrying the query via a different name
                     server.  Measured in seconds, the default is RES_TIMEOUT (currently 5, see <resolv.h>).  The value for this option is  silently  capped
                     to 30.

              attempts:n
                     sets  the  number  of  times  the resolver will send a query to its name servers before giving up and returning an error to the calling
                     application.  The default is RES_DFLRETRY (currently 2, see <resolv.h>).  The value for this option is silently capped to 5.

              rotate sets RES_ROTATE in _res.options, which causes round robin selection of nameservers from among those listed.  This  has  the  effect  of
                     spreading the query load among all listed servers, rather than having all clients try the first listed server first every time.

              no-check-names
                     sets  RES_NOCHECKNAME in _res.options, which disables the modern BIND checking of incoming hostnames and mail names for invalid charac‐
                     ters such as underscore (_), non-ASCII, or control characters.

              inet6  sets RES_USE_INET6 in _res.options.  This has the effect of trying a AAAA query before an A query inside the gethostbyname(3) function,
                     and of mapping IPv4 responses in IPv6 "tunneled form" if no AAAA records are found but an A record set exists.

                     Some programs behave strangely when this option is turned on.

              ip6-bytestring (since glibc 2.3.4)
                     sets RES_USE_BSTRING in _res.options.  This causes reverse IPv6 lookups to be made using the bit-label format described in RFC 2673; if
                     this option is not set, then nibble format is used.

              ip6-dotint/no-ip6-dotint (since glibc 2.3.4)
                     Clear/set RES_NOIP6DOTINT in _res.options.  When this option is clear (ip6-dotint), reverse IPv6 lookups are made in  the  (deprecated)
                     ip6.int  zone;  when this option is set (no-ip6-dotint), reverse IPv6 lookups are made in the ip6.arpa zone by default.  This option is
                     set by default.

              edns0 (since glibc 2.6)
                     sets RES_USE_EDNSO in _res.options.  This enables support for the DNS extensions described in RFC 2671.


Ну что ж, ещё раз большое спасибо, вопрос закрыт.
Спасибо сказали:
Аватара пользователя
Voler
Сообщения: 498
ОС: Fedora

Re: DNS клиент: настройка интервала

Сообщение Voler »

Вот вам пример, но у меня правда BIND обслуживает локальную сеть еще
# domain пишем имя домена, получить можно так gethostname
domain rumyancevo.local
# Поиск в домене по имени без указания суфикса домена.
# Пример поиск по administra, в домене network.local, т.е. ping или nslookup
# будутискать ПК по имени administra, а не только по administra.network.local
search rumyancevo.local kursakovo.local rosinka.local

nameserver 127.0.0.1
nameserver 78.24.24.252
nameserver 91.192.20.3
Спасибо сказали: