dnsmasq как локальный кэширующий DNS


Кэширующий DNS сократит вам время определения доменных имен и улучшит общее качество браузинга. Я опишу, как настроить простенький DNS сервер dnsmasq в качестве кэширующего. Для начала установите пакет dnsmasq (Debian/Ubuntu).

sudo apt-get install dnsmasq

Простая конфигурация, которая отключает DHCP (он же вам не нужен, верно?), увеличивает размер кэша и отключает кэширование отрицательных ответов. В /etc/dnsmasq.conf включите следующие опции. По умолчанию там все закомментировано.

no-dhcp-interface=eth0
cache-size=10001
no-negcache

Больше опций можно посмотреть в man dnsmasq

Далее в /etc/dhcp/dhclient.conf настроим опцию подстановки нашего локального DNS в resolv.conf

prepend domain-name-servers 127.0.0.1;

Включаем и стартуем dnsmasq.

sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq

Проверим в /var/log/syslog, что все хорошо

Dec 13 17:32:25 laptop dnsmasq[21454]: dnsmasq: syntax check OK.
Dec 13 17:32:25 laptop dnsmasq[21457]: started, version 2.72 cachesize 10000
Dec 13 17:32:25 laptop dnsmasq[21457]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect
Dec 13 17:32:25 laptop dnsmasq[21457]: DBus support enabled: connected to system bus
Dec 13 17:32:25 laptop dnsmasq[21457]: DNS service limited to local subnets
Dec 13 17:32:25 laptop dnsmasq[21457]: reading /etc/resolv.conf
Dec 13 17:32:25 laptop dnsmasq[21457]: ignoring nameserver 127.0.0.1 - local interface
Dec 13 17:32:25 laptop dnsmasq[21457]: using nameserver 8.8.8.8#53
Dec 13 17:32:25 laptop dnsmasq[21457]: using nameserver 192.168.1.1#53
Dec 13 17:32:25 laptop dnsmasq[21457]: read /etc/hosts - 6 addresses

Начнем тестировать наш кэширующий DNS. Для начала убедимся, что в /etc/resolv.conf первым адресом стоит 127.0.0.1

dig markzukerberg.com | grep "Query time"
;; Query time: 192 msec
dig markzukerberg.com | grep "Query time"
;; Query time: 0 msec

Для того, чтобы посмотреть статистику dnsmasq, пошлем его процессу kill сигнал USR1

sudo kill -USR1 $(pidof dnsmasq)

И проверим в логе статистику

Dec 13 17:59:50 laptop dnsmasq[21457]: time 1418482790
Dec 13 17:59:50 laptop dnsmasq[21457]: cache size 10000, 0/94 cache insertions re-used unexpired cache entries.
Dec 13 17:59:50 laptop dnsmasq[21457]: queries forwarded 43, queries answered locally 15
Dec 13 17:59:50 laptop dnsmasq[21457]: queries for authoritative zones 0
Dec 13 17:59:50 laptop dnsmasq[21457]: server 8.8.8.8#53: queries sent 25, retried or failed 0
Dec 13 17:59:50 laptop dnsmasq[21457]: server 192.168.1.1#53: queries sent 29, retried or failed 0

Как видно, закешировалось 94 запроса. К сожалению, хардкорный лимит на кэш 10000 записей, но думаю, что этого достаточно для комфортного браузинга.