пятница, 12 апреля 2013 г.

Ускоряем интернет в Ubuntu - настройка pdnsd

Как известно, скорость загрузки страниц зависит не только от ширины канала, который предоставляет вам ваш интернет-провайдер, но и от такого важного параметра как время задержки (Латентность или Latency). Не буду об этом долго распространятся, замечу только, что из-за наличия задержки при увеличении полосы пропускания вашего интернет-канала с 5 Мб/с до 10 Мб/с скорость загрузки может увеличится всего на 5%, что красноречиво демонстрируют следующие графики:


Отчасти проблему с задержками может решить кэширование запросов к 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.

2 комментария:

  1. Не совсем понял в чем именно помог, но в последней Ubuntu были какие-то проблемы с рестартом сети "нагорячую", если речь идет об этом, то да - после всех настроек может быть полезным перезагрузиться.

    ОтветитьУдалить

Популярные сообщения