Окружающая обстановка
Моя настройка локальной сети довольно проста:
- Маршрутизатор, подключенный к модему интернет-провайдера и интернету
- Мой компьютер для разработки напрямую подключен к роутеру
Маршрутизатор предоставляет DHCP, но не запускает собственный DNS-сервер. На самом деле, в моей локальной сети нет DNS-сервера (обычная настройка домашней сети). Маршрутизатор настроен на отправку DNS-серверов ISP как часть информации об аренде DHCP.
Я установил машину VirtualBox на своем компьютере для разработки и установил на нее Debian Squeeze (6.0.4). Режим сети VirtualBox Bridged Adapter
для имитации автономного сервера в моей локальной сети. Быть сервером VirtualBox вместо физического сервера не очень важно, но я упомяну это для полноты.
Проблема
Каждый раз, когда сетевая операция выполняет обратный поиск DNS IP-адреса локальной сети перед выполнением, сервер имеет большие задержки. Некоторые примеры медленных сетевых операций:
- SSH соединение с сервером с моего ПК
- Подключение к административному порту сервера Glassfish
netstat -l
(netstat -nl
очень быстро)Starting MTA: exim4
при загрузке занимает много времени, чтобы завершить
Некоторые из них имеют обходные пути, такие как добавление Ip моего компьютера разработчика /etc/hosts
или добавление опции, специфичной для команды, чтобы избежать обратного поиска DNS. Очевидно, что использование /etc/hosts
только идет так далеко, потому что это противоречит DHCP.
Однако я не могу не думать, что что-то упустил. Мне действительно нужно настроить DNS-сервер где-нибудь в моей локальной сети? Это кажется огромным и бесполезным усилием для моих нужд, и я не могу поверить, что в среде DHCP, подобной моей, нет другого варианта.
Я много искал в сети это, и, возможно, у меня нет правильных условий поиска, но я не могу найти решение ...
обновление 1 после ответа BillThor
Использование хоста (dig дает те же результаты):
# ip of stackoverflow.com
$ time host -v 64.34.119.12
Trying "12.119.34.64.in-addr.arpa"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15537
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;12.119.34.64.in-addr.arpa. IN PTR
;; ANSWER SECTION:
12.119.34.64.in-addr.arpa. 143 IN PTR stackoverflow.com.
Received 74 bytes from 192.168.1.1#53 in 15 ms
real 0m0.020s
user 0m0.008s
sys 0m0.000s
# ip of dev pc
$ time host -v 192.168.1.50
Trying "50.1.168.192.in-addr.arpa"
;; connection timed out; no servers could be reached
real 0m10.004s
user 0m0.004s
sys 0m0.000s
Мой /etc/resolv.conf (был автоматически создан во время установки)
nameserver 192.168.1.1
И хост, и dig возвращаются очень быстро для публичного ip, но для ip локальной сети требуется 10 секунд. Я думаю, 10с - это мое текущее значение тайм-аута.
обновление 2
В dev-pc
файле / etc / hosts:
$ time getent hosts 192.168.1.50
192.168.1.50 dev-pc
real 0m0.001s
user 0m0.000s
sys 0m0.000s
Без dev-pc
файла / etc / hosts:
$ time getent hosts 192.168.1.50
real 0m10.012s
user 0m0.004s
sys 0m0.000s
Все больше и больше похоже на то, что мне придется находить кусочные параметры программы или параметры для каждого, пытающегося выполнить обратный поиск DNS! Ни одна из машин (виртуальных или нет) не может выступать в качестве DNS-сервера в моей локальной сети, поскольку они не всегда работают. К сожалению, прошивка маршрутизатора не включает DNS-сервер.
источник
8.8.8.8
и8.8.4.4
) вместо этого?Сбой поиска DNS должен быстро провалиться. Тем не менее, я обычно запускаю dnsmasq, который читает файл hosts и обслуживает эти записи для прямого и обратного поиска. Он также действует как сервер кэширования DNS, чтобы снизить нагрузку на ваши вышестоящие DNS-серверы.
Вы можете использовать команду
host
или,dig
чтобы увидеть, какие поиски являются медленными. Если вы будете перенаправлены на DNS-сервер, на котором не работает DNS, произойдет сбой через некоторое время. Вы можете настроить время ожидания и повторить попытку/etc/resolv.conf
чтобы ускорить сбои.РЕДАКТИРОВАТЬ: Чтобы проверить ответ решателя попробуйте использовать
time getent hosts 192.168.1.50
. Это должно вернуть поиски из вашего/etc/hosts
файла, а также DNS. Вhost
иdig
команды только проверить DNS. Если это возвращается, но занимает несколько секунд, вы можете изменить порядокhosts
записи в/etc/nsswitch.conf
файлах перемещения в начале списка.Настройка
dnsmasq
и использование его в качестве основного DNS-сервера имен/etc/resolve.conf
должно решить эту проблему, если у вас есть программы, которые для поиска имен используют только DNS. Exim должен использовать распознаватель для поиска по базе. Вам понадобится/etc/hosts
файл, если вы не можете отключить DHCP-сервер на своем маршрутизаторе, вы можете использовать егоdnsmasq
для DHCP.dnsmasq
будет автоматически регистрировать имена, если они предоставлены в запросах DHCP, которые он обрабатывает.РЕДАКТИРОВАТЬ 2: Если ни один из ваших компьютеров не работает постоянно, вы можете посмотреть, как установить samba и использовать его
wins
в конфигурации nsswitch. Он должен быть быстрым, поэтому он может сработать, если вы поставите его передdns
входом hosts.Вы также можете посмотреть на установку
avahi
утилит, которые позволят автоматическое обнаружение в локальных сетях связи. Он работает на стороне IPv6, но не публикует адреса IPv4. Домен по умолчанию для хостов - «.local». Это может не подходить в вашем случае, но может быть отменено. Кроме того, поиск выполняется медленнее, чем то,wins
чтоmdns
опережениеdns
в конфигурации nsswitch может не подходить.источник
Если вы не хотите выполнять настройку локального DNS-сервера (и, возможно, DHCP-сервера) для своей домашней сети, вы можете указать сервисам, где это возможно, не выполнять обратный поиск DNS.
Например, чтобы отключить обратный просмотр DNS для SSHD, добавьте в
sshd_config
файл следующее (или подобное в зависимости от дистрибутива):UseDNS no
Вы можете удалить эту строку из конфигурации exim, хотя мне не ясно, повлияет ли это на скорость запуска, это предотвратит обратный просмотр DNS при подключении клиентов:
host_lookup = *
Похоже, вы можете экспортировать эту переменную среды для пользователя, который запускает процесс Glassfish:
export AS_NO_REVERSE_DNS=true
источник
AS_NO_REVERSE_DNS
варианте для Glassfish, поэтому я посмотрю.Была такая же проблема после перехода с динамического на статический IP. Моя сеть настроена сейчас: STATIC - НЕТ IPv6 и нет намерений использовать почтовый сервер.
Я решил проблему, выполнив:
1: запустить dpkg-переконфигурировать exim4-config
2: Когда вы попадаете на вопрос поиска DNS -> Установите поиск DNS на минимум (Dial up)
Это дало мне ошибку, что такой поиск не сработал, и предложение отредактировать / etc / hosts - но единственное, что я сделал с / etc / hosts, это закомментировал строки ip6-allnodes и ip6-allrouters.
Перезагрузка должна быть быстрой (для меня это как минимум).
источник