Отчасти проблему с задержками может решить кэширование запросов к DNS. Для этих целей в Ubuntu есть несколько пакетов:
- dnsmasqd - начиная с версии Ubuntu 12.04 установлен по умолчанию, кэш держит только в памяти, поэтому хранит адреса только до первой перезагрузки
- bind - подходит для больших сложных систем, не очень быстрый
- pdnsd - легкий в настройке и быстрый - его мы и будем устанавливать
- unbound - пока не пробовал
Установка pdnsd
sudo apt-get install pdnsd
Запуск
sudo service pdnsd start
Настройка многократно описывалась на разных сайтах, см. например Делаем свой локальный DNS (PDNSD), с блэкджеком и быстрее Google Public DNS.
Я же сосредоточусь на возможных проблемах
Во-первых после установки вы можете получить сообщение типа:
Not starting pdnsd (disabled in /etc/default/pdnsd)
Открываем в редакторе файл с настройками:
gksu gedit /etc/default/pdnsd
и добавляем или изменяем соответствующую строчку так, чтобы было прописано
START_DAEMON=yes
Далее, проверку состояния pdnsd можно выполнить с помощью следующей команды:
sudo pdnsd-ctl status
при этом я получил следующую ошибку:
Error: could not open socket /var/cache/pdnsd/pdnsd.status: No such file or directory
Решение
Во-первых пробуете вручную запустить pdnsd
sudo service pdnsd stop sudo pdnsd
и по результату определяем в чем именно проблема. Например, в моем случае было вот что:
* 04/09 01:54:22| pdnsd: error: Could not bind tcp socket: Address already in use
* 04/09 01:54:22| pdnsd: error: Could not bind to udp socket: Address already in use
* 04/09 01:54:22| pdnsd: error: tcp and udp initialization failed. Exiting.
Дальше ищем что пишут об этой ошибке в интернете. Одной из причин может быть то, что порт с которым по-умолчанию работает pdnsd, может быть занят. Чтобы это проверить выполняем:
sudo netstat -lpn | grep 127.0.0.1:53получаем:
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3453/dnsmasq
udp 0 0 127.0.0.1:53 0.0.0.0:* 3453/dnsmasq
откуда видно, что порт 53 уже занял демон dnsmasq.
Для того, чтобы освободить порт, редактируем NetworkManager.conf
sudo gedit /etc/NetworkManager/NetworkManager.conf
и закомментируем строчку
dns=dnsmasqследующим образом
#dns=dnsmasq
Сохраняем файл и перезагружаем network-manager
sudo service restart network-manager
И снова запускаем pdnsd
sudo service pdnsd start
для проверки времени обработки запроса к dns можно использовать команду dig
dig @127.0.0.1 ubuntu-forward.blogspot.com | grep "Query time"Query time: 55 msec
повторный запрос выполняется почти мгновенно:
Query time: 0 msec
Для того, чтобы все запросы с вашего компьютера направлялись через pdns, в настройках подключения network-manager нужно в графе
DNS Servers указать 127.0.0.1
И снова проверить работу pdnsd уже без указания какой именно сервер использовать
dig ubuntu-forward.blogspot.com | grep "Query time"Query time: 0 msec
Для проверки реальной скорости работы pdnsd в рабочих условиях можно использовать namebench.
reboot помог!
ОтветитьУдалитьНе совсем понял в чем именно помог, но в последней Ubuntu были какие-то проблемы с рестартом сети "нагорячую", если речь идет об этом, то да - после всех настроек может быть полезным перезагрузиться.
ОтветитьУдалить