pdnsd - это caching DNS прокси-сервер, помимо кэширования DNS запросов (с возможностью задавать минимальный TTL), так же он умеет отсылать параллельные запросы к нескольким DNS серверам.
Даже при быстром интернете и низком отклике остается одно узкое место, DNS запросы. За счет использования кеширования на сервере возможно ускорить даже быстрый Интернет.
Расчет сокращения времени запросов за счет кеширования DNS
Ускорение единичных запросов за счет кеширования DNS составляет порядка 20-40мс.
К примеру запрос главной страницы example.com
1 2 3 4 5 6 7 | i.example.com: 14 components example.com: 7 components a.example.com: 26 components www.example.com: 18 components af.example.com: 3 components counter1.example.ru: 1 component counter2.example.ru: 1 component |
Итого 70 элементов с 7 серверов. Общее время потери на DNS запросы 1400 МС, размер получаемых данных 3 КБайта.
При использование кеширования для данного адреса для 500 пользователей, экономия составляет:
- Время 11,7 Минут
- Трафик 1,5 Мб.
Это если каждый из них всего 1 раз зайдет в день на страницу, что не соответствует действительности, так как фактов захода гораздо больше.
Но даже при использования кеширования DNS серверу требуется время на запрос у вышестоящего DNS сервера, оптимизировать все DNS запросы позволяет PDNSD.
Установка pdnsd в CentOS
- Установить в системе дополнительные репозиторий cheese-release
- Уставить pdnsd 1yum install pdnsd
- Создаем файл конфигурации
- Можно создать пустой 1nano /etc/pdnsd.conf
- Скопировать базовый конфиг 1cp /etc/pdnsd.conf.sample /etc/pdnsd.conf
- Можно создать пустой
- настраиваем сервер, пример файла конфигурации 1234567891011121314151617181920212223global {perm_cache=16384; //Максимальный размер кэша в килобайтах.cache_dir="/var/cache/pdnsd"; //Путь к файлу кешаrun_as="pdnsd";server_ip = 127.0.0.1; //Адрес сервераparanoid=on;status_ctl = on;min_ttl=60m; // Минимальное время сохранения записи в кэшеmax_ttl=1w; // Максимальное время сохранения записи в кэшеneg_ttl=5m; //Время кеширования отрицательных ответовpar_queries=3; //Количество одновременно опрашиваемых "родительских" DNS серверовneg_domain_pol=on;timeout=10;}server {label = "main";ip = 8.8.8.8,8.8.4.4,77.88.8.8,77.88.8.1; //Адреса DNS серверов.uptest = query; //Тест интерфейсаinterface=eth0; //Интерфейс.}
Стоит обратить внимание на следующие параметры
Секция global
server_ip — IP адрес сервера, если у нас сервер имеет внешний адрес к примеру 192.168.1.1, то необходимо указать его.
par_queries — количество параллельных запросов к родительским DNS серверам, в данном случае 3, если не один не ответит, то сервер сделает запрос на следующий адрес. В ином случае возвращается результат с первого ответившего.
Секция server
ip — Список родительских DNS серверов, в данном случае указаны DNS Яндекса и Google, рекомендуется первыми указать DNS сервера провайдера. - запустить службу pdnsd 12systemctl enable pdnsdsystemctl start pdns
В некоторых случаях необходимо оперативно обновить данные в кеше, очистить сразу весь кеш можно командой:
1 | pdnsd-ctl empty-cache |