Не секрет, что скорость открытия web-страниц в браузере зависит от ширины Вашего Интернет-канала.
Однако
не меньшее влияние на этот процесс имеет работа DNS-серверов. Если
предоставляемый Вам провайдером DNS-сервер сбоит или отвечает с большой
задержкой - то никакой сверхширокий канал не улучшит ситуацию. Решить
проблему можно установив свой локальный кэширующий DNS-сервер.
В качестве такого сервера мы будем использовать лёгкий и быстрый PDNSD. Установим его командой в терминале:
sudo apt-get install pdnsd
Перед Вами должно появиться окно с запросом о
способе настройки pdnsd. Если такое окно не появилось - то скорее всего
Вы уже устанавливали пакет pdnsd и удалили его через sudo apt-get remove
pdnsd (при этом конфигурационные файлы пакета остались). В таком случае
необходимо запустить перенастройку пакета командой в терминале:
sudo dpkg-reconfigure pdnsd
Итак, перед нами окно с запросом о способе настройки pdnsd.
Т.к. мы хотим получить быстрое, стабильное и независящее от
DNS-провайдеров решение - нам нужно использование корневых серверов.
Перемещаемся клавишей <Tab> на пункт <Ok> и жмём
<Enter>.
На следующем окне выбираем выбираем пункт
"использовать корневые серверы" и затем клавишей <Tab>
перемещаемся на пункт <Ok> и жмём <Enter>.
Проверим настройки запуска pdnsd. Набираем в терминале:
cat /etc/default/pdnsd
Проверяем наличие опций START_DAEMON=yes и AUTO_MODE=recurse.
В данном режиме пакет pdnsd будет брать настройки не из файла /etc/pdnsd.conf, а из файла /usr/share/pdnsd/pdnsd-recurse.conf
Откроем файл настроек pdnsd командой в терминале:
sudo nano /usr/share/pdnsd/pdnsd-recurse.conf
Мы увидим следующее:
Параметр perm_cache определяет сколько памяти в килобайтах будет отводиться под кеш (по умолчанию 2048).
Если Ваша система обслуживает целую сеть - рекомендуется увеличить это значение, например до 65536.
Ещё
один важный для нас параметр server_ip (по умолчанию 127.0.0.1) - он
определяет интерфейс на котором pdnsd будет принимать запросы. Для
одиночного ПК можно оставить 127.0.0.1, но если Вы планируете быть
быстрым DNS-сервером для своей сети - нужно указать Ваш сетевой
интерфейс, например eth0.
Сохраняем настройки нажав <Ctrl> + <o> и выходим нажав <Ctrl> + <x>.
По-умолчанию
в Ubuntu применяется DNS-сервер dnsmasq. Его отличия от pdnsd в том,
что он использует dns-сервера из файла /etc/resolv.conf и кэш держит
только в оперативной памяти (при перезагрузке кэш теряется). Перед
запуском pdnsd нам необходимо удалить dnsmasq, т.к. они оба по-умолчанию
используют порт 53. Для удаления dnsmasq выполним в терминале:
sudo apt-get remove dnsmasq
Теперь нам нужно указать пакету resolvconf (именно
он формирует файл /etc/resolv.conf) наш новый быстрый DNS-сервер. Для
этого выполним в терминале:
sudo nano /etc/resolvconf/resolv.conf.d/base
Вписываем nameserver и IP-адрес (если Вы указываели server_ip=eth0 в
файле /usr/share/pdnsd/pdnsd-recurse.conf) или 127.0.0.1 (если Вы
указываели server_ip=127.0.0.1 в файле
/usr/share/pdnsd/pdnsd-recurse.conf).
Сохраняем настройки нажав <Ctrl> + <o> и выходим нажав <Ctrl> + <x>.
Обратите внимание:
- в файле настроек сетевых интерфейсов /etc/network/interfaces не должно быть строк с параметром dns-nameservers;
- в описываемой статье подразумевается использование статического IP-адреса на Вашем ПК.
Для чистоты эксперимента рекомендуется полностью перезагрузить ПК.
После перезагрузки убеждаемся, что в /etc/resolv.conf указан именно наш новый DNS-сервер. Выполним в терминале:
cat /etc/resolv.conf
Должен быть только наш DNS-сервер:
С помощью команды dig проанализируем ускорение dns-запросов. Выполним в терминале:
dig mail.ru
Получим вывод:
Затем ещё раз выполним тот же запрос:
dig mail.ru
И увидим другой результат:
Время запроса значительно сократилось. Аналогично
можно попробовать потестировать обращения к другим доменам. После
попадания запроса в кэш - ответ получается гораздо быстрее.
Текущее состояние и заполненность кэша pdnsd можно узнать выполнив в терминале:
sudo pdnsd-ctl status
Поднявшись в начало вывода можно увидеть данные о заполненности кэша:
В приведённом примере это всего 62 записи, занявшие 0.0246% от выделенных нами под кэш 65536Кб.
Содержимое кэша pdnsd можно увидеть выполнив в терминале:
sudo pdnsd-ctl dump
Получим что-то вида:
Сбросить (очистить) кэш можно командой в терминале:
sudo pdnsd-ctl empty-cache
Но делать это просто так не стоит, т.к. именно накопленный кэш - ускоряет наши dns-запросы.