Установка кэширующего dns сервера под windows. Настройка кеширующего DNS сервера (BIND) для локальной сети
С каждым годом скорость интернета - как последней мили, так и магистральных каналов становится все выше. Лишь одно неизменно - латентность уже уперлась в физические ограничения: скорость света в оптоволокне - около 200тыс километров в секунду, и соответственно, быстрее чем за ~150ms ответ от сервера через атлантический океан не получить в обозримой перспективе (хотя конечно есть изыски, вроде оптоволокна с воздушной сердцевиной или радиорелейной связи, но это для простых смертных едва-ли доступно).
Когда мы пытаемся например из России открыть web-сайт, расположенный в США (его NS сервера вероятно там же), и домен не нашелся в DNS-кэше вашего провайдера - то ждать придется долго даже на гигабитном интернете, возможно даже целую секунду: пока мы через океан получим имена NS серверов домена, пока разрезолвим их IP, пока отправим и получим собственно сам DNS запрос…
Пару лет назад Google завела свои публичные DNS сервера, а для агитации перехода на них - они разработали утилитку NameBench , которая прогоняет тесты DNS по вашей истории серфинга и показывает, насколько Google DNS быстрее DNS сервера вашего провайдера.
Но мне удалось сделать свой DNS сервер, который работает быстрее Google Public DNS, и в этой краткой заметке хочу поделится результатами.
PDNSD
pdnsd - кэширующий DNS proxy. Помимо банального кэширования DNS запросов (с возможностью жестко задавать минимальный TTL - может быть нужно на очень плохом интернете), он умеет отсылать запрос одновременно на несколько «родительских» DNS серверов, и отдавать клиенту первый вернувшийся ответ.Именно включение параллельного опроса и дает нам основное преимущество в скорости , т.к. при нахождении результата в кеше любого из провайдеров мы получаем результат очень быстро, и не ждем полного и медленного разресолвивания если у первого провайдера нет ответа в кэше.
Ставится в Ubuntu - банальным apt-get.
Пара моментов в конфиге
global { perm_cache=10240; //Максимальный размер кэша в килобайтах. //По дефолту было 1024, все записи у меня не влазили. cache_dir="/var/cache/pdnsd"; [...] min_ttl=60m; // Минимальное время сохранения записи в кэше. //Даже если TTL придет меньше 60минут - будет 60минут max_ttl=1w; // Максимальное время сохранения записи в кэше neg_ttl=5m; //Время кеширования отрицательных ответов (т.е. если домен не найден) [..] par_queries=3; //Количество одновременно опрашиваемых "родительских" DNS серверов } server { label = "main"; ip = 85.21.192.5 //Тут 4 сервера, если первые 3 не ответят, то будет отправлен запрос на 4-й, 213.234.192.7 //Первые 2 сервера - это сервер вашего провайдера, и какого-нибудь соседнего, 8.8.4.4 //Это Google Public DNS - у них закэшировано все редкое и резолвят они быстро, 8.8.8.8 ; [..] }В принципе, кэширование можно сделать менее агрессивным (min_ttl=1m например), но за год работы проблем особых не возникло. В случае проблем - при желании можно вытереть одну запись из кэша:
sudo pdnsd-ctl record 3.14.by delete
или сразу все:
sudo pdnsd-ctl empty-cache
Результаты тестирования в NameBench
Видим, что для 50% запросов ответ мы получаем менее чем за 10мс, для 85% быстрее Google Public DNS, ну а дальше результаты естественно совпадают с гуглом.
По результатам тестов NameBench нам радостно сообщает:
8.8.8.8 Slower replica of SYS-192.167.0.98 8.8.4.4 Slower replica of SYS-192.167.0.98
Таким образом, умный кэширующий DNS прокси с параллельными запросами - позволяет ускорить даже 100-мегабитный интернет. А уж для медленных (радио)линков с большой латентностью и потерей пакетов - и вовсе разница может быть как между небом и землей.
Назначение DNS это перевод доменных имен, легко запоминаемых человеком в IP адреса которые понимают компьютеры, этот процесс называется-Разрешение имен. Что нам даст установка собственного кеширующего DNS сервера? Это немного ускорит отклик сайтов + Linux не очень хорошо воспринимает имена NetBios, а ведь иногда приходится находить компьютеры или принтеры внутри локальной сети, а хочется это делать по именам.
Запоминать IP адреса- не удобно, а постоянно лазить к журнал работы DHCP сервера- тоже не наш метод. Вот для таких случаев и нужен DNS в локальной сети. Сама установка пакета bind9 не отличается сложностью, затыки, обычно возникают на стадии его конфигурирования, т.к. после легко читаемых конфигурационных файлов системы, на человека сваливается непонятный синтаксис, кстати, очень похожий на язык программирования С. Т.к. сервер будет работать внутри локальной сети, то не имеет смысла переносить его в chroot окружение и вся настройка занимает совсем немного времени. На этом, лирическую часть, можно завершить, переходим к установке и настройке.
Установим DNS сервер Bind9:
# apt - get install bind9После завершения, закачки и установки, нам необходимо отредактировать его конфигурационный файл:
# vim / etc / bind / named . conf . optionsНаходим секцию, она находится в самом начале конфигурационного файла, кроме нее там больше ничего нет…
options { directory "/var/cache/bind" ; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0"s placeholder. // forwarders { // 0.0.0.0; // }; auth - nxdomain no ; # conform to RFC1035 listen - on - v6 { any ; }; };Секция forwarders, отвечает за то, куда будет передаваться DNS запрос на разрешение имени, в случае если его нет в собственной базе. Последнее время меня совсем не радует, работа этих серверов у провайдера по этому можно подключить сторонние например гугловские, запомнить IP очень легко 8.8.8.8, на его примере я и буду вести настройку, но никто не мешает использовать, те что вам нравятся больше.
Редактируем секцию, для начала с нее нужно снять комментарии и добавить сторонние DNS, если есть необходимость добавить несколько серверов, например на тот случай если сервер google не выдержит ваших запросов и поломается:), то IP других серверов можно написать в столбик, тогда можно добиться более значительной отказоустойчивости.
forwarders { 8.8.8.8 ; 193.58.251.251 ; //Российская служба DNS -SkyDNS };В эту секцию лучше вписать IP того сервера который у вас указан в файле /etc/resolv.conf
или вписать туда в секциюnameserver
этот IP. Сохраняем изменения и выходим. Перезапускаем сервер и проверяем. Набираем в командной строке nslookup mail.ru
Должно выдать:
Это говорит о том, что наш сервер не является, главным в обслуживании этой зоны (mail.ru), но запросы добавил в кеш!
Теперь нужно создать ДНС зону для нашей сети чтобы машины могли находить различные сетевые сервисы - могут быть, например, сетевые принтеры, они могут быть как самостоятельными так и расшаренными на других рабочих станциях.
Нашу зону можно назвать orgname –т.е. название организации.
Первым делом создаем зону, для этого отредактируем named.conf.local
и добавим в него следующее:
zone "orgname" { type master ; file "/etc/bind/db.orgname" ; };Сохраняем и выходим
Теперь нам необходимо создать файл настройки зоны
и вставляем в него следующее:
(Прошу отнестись внимательно к синтаксису конфигурационного файла, даже точки имеют значение)
Теперь, при добавлении нового сетевого устройства, вам необходимо сделать 2 вещи:
1) Зарезервировать IP адрес на DHCP сервере, о том, как это сделать, можно прочитать в статье- Настройка DHCP сервера
2) Создать DNS зону для этого IP, вида devicename IN A XXX.XXX.XXX.XXX. Где: devicename-сетевое имя устройства; XXX.XXX.XXX.XXX-его IP адрес который зарезервирован на DHCP сервере.
теперь нам необходимо отредактировать файл resolv.conf
# vim / etc / resolv . confи вписать туда:
nameserver 127.0.0.1все что там было можно закоментировать поставив #
перезапускам сервер
# reboot
Сделано это для того чтобы сервер искал все в собственной базе, а уже потом BIND будет перенаправлять запросы к серверу 8.8.8.8 IP которого вписан в директиве forwarders
.
Теперь можно проверять работоспособность:
Если тестирование происходит из под Windows:
Если тестируем из под Linux:
ping devicename . orgname - c 4Должны пойти пинги на тот IP который вы указали вместо XXX.XXX.XXX.XXX
Можно так же проверять скорость обработки запросов коммандой dig
# dig @127.0.0.1 tut.by ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @127.0.0.1 tut.by ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63893 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 13, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;tut.by. IN A ;; ANSWER SECTION: tut.by. 103 IN A 178.172.160.5 tut.by. 103 IN A 178.172.160.4 tut.by. 103 IN A 178.172.160.2 tut.by. 103 IN A 178.172.160.3 ;; AUTHORITY SECTION: . 6029 IN NS i.root-servers.net. . 6029 IN NS b.root-servers.net. . 6029 IN NS m.root-servers.net. . 6029 IN NS k.root-servers.net. . 6029 IN NS e.root-servers.net. . 6029 IN NS d.root-servers.net. . 6029 IN NS j.root-servers.net. . 6029 IN NS g.root-servers.net. . 6029 IN NS l.root-servers.net. . 6029 IN NS f.root-servers.net. . 6029 IN NS h.root-servers.net. . 6029 IN NS a.root-servers.net. . 6029 IN NS c.root-servers.net. ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Mar 22 16:46:24 MSK 2016 ;; MSG SIZE rcvd: 310
К эш DNS – это временная база данных, в которой хранится информация о предыдущих поисках DNS. Другими словами, всякий раз, когда вы посещаете веб-сайт, ваша ОС и веб-браузер будут вести учет домена и соответствующего IP-адреса. Это исключает необходимость повторяющихся запросов к удаленным DNS-серверам и позволяет вашей ОС или браузеру быстро разрешать URL-адреса веб-сайта.
Однако в некоторых ситуациях, таких как устранение неполадок в сети или после смены преобразователей DNS, вам необходимо очистить кэш DNS. Это очистит кэшированные записи DNS и выполнит последующий поиск для разрешения домена на основе вновь настроенных параметров DNS.
В этой статье приведены инструкции по очистке кеша DNS в разных операционных системах и веб-браузерах.
Очистить/удалить кэш DNS в Windows
Процесс очистки DNS-кэша одинаков для всех версий Windows. Вам нужно открыть командную строку с правами администратора и запустить ipconfig /flushdns.
Windows 10 и Windows 8
Чтобы очистить кэш DNS в Windows 10 и 8, выполните следующие действия:
- Введите cmd в строке поиска Windows.
ipconfig /flushdns
Windows 7
Чтобы очистить кэш DNS в Windows 7, выполните следующие действия:
- Нажмите на кнопку Пуск.
- Введите cmd в текстовое поле поиска меню «Пуск».
- Щелкните правой кнопкой мыши на командной строке и выберите Запуск от имени администратора. Это откроет окно командной строки.
- В командной строке введите следующую строку и нажмите Enter:
ipconfig /flushdns
В случае успеха система вернет следующее сообщение:
Windows IP Configuration Successfully flushed the DNS Resolver Cache.
Очистить/удалить кэш DNS в Linux
В Linux отсутствует кэширование DNS на уровне ОС, если не установлена и не запущена служба кэширования, такая как Systemd-Resolved, DNSMasq или Nscd. Процесс очистки DNS-кэша отличается в зависимости от дистрибутива и службы кэширования, которую вы используете.
Systemd Resolved
В большинстве современных дистрибутивов Linux, таких как , используется системный разрешенный сервис для кэширования записей DNS.
Чтобы узнать, запущена ли служба, выполните:
sudo systemctl is-active systemd-resolved.service
Если служба работает, команда напечатает active, иначе вы увидите inactive.
Чтобы очистить DNS-кэш Systemd Resolved, вы должны ввести следующую команду.
sudo systemd-resolve --flush-caches
В случае успеха команда не возвращает никакого сообщения.
Dnsmasq
Dnsmasq – это облегченный сервер кэширования имен DHCP и DNS.
Если ваша система использует DNSMasq в качестве сервера кеширования, для очистки кеша DNS вам необходимо перезапустить службу Dnsmasq:
sudo systemctl restart dnsmasq.service
sudo service dnsmasq restart
Nscd
Nscd – это демон кэширования, и он является предпочтительной системой кэширования DNS для большинства дистрибутивов на основе RedHat.
Если ваша система использует Nscd, для очистки кеша DNS вам необходимо перезапустить службу Nscd:
sudo systemctl restart nscd.service
sudo service nscd restart
Очистить/удалить кэш DNS на MacOS
Команда очистки кэша в MacOS немного отличается в зависимости от используемой версии. Команда должна быть запущена как пользователь с правами системного администратора (пользователь sudo).
Чтобы очистить кэш DNS в MacOS, выполните следующие действия:
- Откройте Finder.
- Перейдите в Приложения> Утилиты> Терминал. Это откроет окно терминала.
- В командной строке введите следующую строку и нажмите Enter:
sudo killall -HUP mDNSResponder
Введите свой пароль sudo и снова нажмите Enter. В случае успеха система не возвращает никаких сообщений.
Для более ранних версий MacOS команда очистки кэша отличается.
MacOS версии 10.11 и 10.9
sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder
MacOS версия 10.10
sudo discoveryutil mdnsflushcache sudo discoveryutil udnsflushcaches
MacOS версии 10.6 и 10.5
sudo dscacheutil -flushcache
Очистить /удалить кэш DNS браузера
В большинстве современных веб-браузеров есть встроенный DNS-клиент, который предотвращает повторяющиеся запросы при каждом посещении веб-сайта.
Google Chrome
Чтобы очистить DNS-кеш Google Chrome, выполните следующие действия:
- Откройте новую вкладку и введите в адресную строку Chrome: chrome://net-internals/#dns.
- Нажмите кнопку «Очистить кэш хоста».
Если это не работает для вас, попробуйте очистить кэш и куки.
- Нажмите, CTRL+Shift+Del чтобы открыть диалоговое окно «Очистить данные просмотра».
- Выберите диапазон времени. Выберите «Все время», чтобы удалить все.
- Установите флажки «Файлы cookie и другие данные сайта» и «Кэшированные изображения и файлы».
- Нажмите кнопку «Очистить данные».
Этот метод должен работать для всех браузеров на основе Chrome, включая Chromium, Vivaldi и Opera.
FireFox
Чтобы очистить DNS-кэш Firefox, выполните следующие действия:
- В верхнем правом углу щелкните значок гамбургера, ☰чтобы открыть меню Firefox:
- Нажмите на ⚙ Options (Preferences)ссылку.
- Нажмите на вкладку «Конфиденциальность и безопасность» или «Конфиденциальность» слева.
- Прокрутите вниз до Historyраздела и нажмите на Clear History…кнопку.
- Выберите временной диапазон, чтобы очистить. Выберите «Все», чтобы удалить все.
- Выберите все поля и нажмите «Очистить сейчас».
Если это не работает для вас, попробуйте следующий метод и временно отключите кэш DNS.
- Откройте новую вкладку и введите about:configв адресную строку Firefox.
- Найдите network.dnsCacheExpiration, временно установите значение 0 и нажмите ОК. После этого измените значение по умолчанию и нажмите ОК.
- Найдите network.dnsCacheEntries, временно установите значение 0 и нажмите ОК. После этого измените значение по умолчанию и нажмите ОК.
Заключение
Вы узнали, как очистить или очистить кэш DNS в операционных системах Windows, Linux и MacOS.
Linux и MacOS могут использовать команду dig для запроса DNS и устранения проблем с DNS.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Внимание
Для корректной установки и настройки dnsmasq, перейдите в сеанс cуперпользователя:
На запрос пароля, введите пароль привилегированного пользователя или локального администратора.
DNS — кэш предназначен для ускорения загрузки страниц веб-сайтов, путем сохранения в памяти их IP-адресов. Для настройки кэширования используйте утилиту dnsmasq .
Yum install dnsmasq
С помощью текстового редактора vi или nano откройте файл, расположенный по адресу /etc/dnsmasq.conf
Vi /etc/dnsmasq.conf
Nano /etc/dnsmasq.conf
Отредактируйте следующие параметры:
Resolv-file=/etc/resolv.dnsmasq no-poll listen-address=127.0.0.1 cache-size=150 conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
А так же допишите следующий параметр:
All-servers
- resolv-file - файл с IP-адресами dns — серверов
- no-poll - параметр, запрещающий автоматическое применение изменений в файлах с именем resolv.
- listen-address - параметр, указывающий какой адрес слушать.
- cache-size - размер кэша. Значение по умолчанию позволяет хранить 150 хостов.
- c onf-dir - параметр, отвечающий за дополнительный файл конфигурации.
- all-servers - перенаправляет dns-запрос всем доступным dns-серверам и возвращает ответ от первого откликнувшегося сервера. Параметр нужно записать вручную.
Также можно указать следующие параметры:
- no-negcache - не кэшировать негативные ответы от серверов.
- b ind-interface s - позволяет запускать копии процесса.
- d ns-forward-max - максимальное количество dns-запросов. По умолчанию - 150. Параметр нужно записать вручную.
Теперь создайте файл resolv.dnsmasq с помощью текстового редактора vi или nano и запишите туда адреса dns-серверов.
Vi /etc/resolv.dnsmasq
Nano /etc/resolv.dnsmasq
Потом добавьте IP-адрес 127.0.0.1 в файл resolv.conf . Для этого, используйте утилиту «Сетевые соединения» , расположенную в «Меню» → «Параметры» → «Сетевые соединения» в графическом окружении Cinnamon или «Система» → «Параметры» → «Сетевые соединения» в графическом окружении Mate . Выберите ваше активное подключение, нажмите кнопку «Изменить», перейдите на вкладку «Параметры IPv4» , поменяйте «Метод» на «Автоматический (DHCP, только адресс)» , а в поле «Дополнительные серверы DNS » напишите адрес 127.0.0.1 , нажмите применить и перезапустите NetworManager.
Редактирование файла resolv.conf с помошь текстовых редакторов не рекомендуется. Файл перезапишется со следующим перезапуском системы.
Systemctl restart NetworkManager.service
Чтобы убедиться, что изменения вступили в силу, посмотрите содержимое файла resolv.conf :
Cat /etc/resolv.conf
Содержимое должно быть таким:
# Generated by NetworkManager nameserver 127.0.0.1
Описанные выше операции позволят перенаправлять все dns-запросы на локальную машину.
Добавьте службу dnsmasq в автозапуск и перезайдите в сеанс:
Systemctl enable dnsmasq.service --now
Для того, чтобы сбросить кэш, просто перезапустите службу:
Systemctl restart dnsmasq.service
Проверка работоспособности
Проверьте, включена ли служба:
Systemctl status dnsmasq.service
Проверьте порт 53:
Netstat -ntlp | grep:53 tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 7319/dnsmasq tcp6 0 0:::53:::* LISTEN 7319/dnsmasq
Теперь попробуйте с помощью утилиты dig несколько раз обратиться к cайту google.com
Dig google.com | grep "Query time" ;; Query time: 135 msec
Если кэширование dns-запросов работает, то практически во всех следующих запросах выделенная строчка query time будет равна нулю.
;; Query time: 0 msec
В противном случае она будет варьироваться от 0 и выше с каждым новым запросом.
В результате, основной DNS-сервер сети будет испытывать гораздо меньше нагрузки.
Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter .
Для ускорения просмотра веб страниц операционная система Windows кэширует ответы DNS серверов. Сразу после прихода ответа на определение числового по с сервера DNS, Windows автоматически помещает этот адрес в локальное хранилище. Когда браузер запрашивает адрес по URL, Windows вначале ищет его в хранилище, и, если находит его, то сразу же возвращает результат, не обращаясь к DNS серверам интернет провайдера. Локальный кэш увеличивает скорость работы и экономит трафик.
Очистка локального DNS кэша
Если при хранении адреса в локальном хранилище информация будет повреждена или изменится IP-адрес, браузер не сможет открыть сайт. Подобное случается не так часто. К счастью, существует способ очистить локальный кэш для мгновенного решения возникшей проблемы.
В ОС Windows имеется инструмент ipconfig , у которого имеется опция /flushdns для очистки всех закэшированных записей. Если требуется очистить локальный кэш, то в окне командной строки (Пуск — Программы (Все программы) — Стандартные — Командная строка ) следует ввести команду ipconfig /flushdns и нажать клавишу Enter.
Для просмотра всех записей DNS в локальном хранилище можно воспользоваться опцией /displaydns команды ipconfig . Для этого в окне командной строки необходимо ввести команду ipconfig / displaydns и нажать клавишу Enter. В окне появятся все записи закэшированных ответов DNS.
Настройка времени хранения кэша
Обычно Windows хранит адреса не более 86400 секунд (1 сутки), но время хранения можно ограничить другим пределом. Для этого необходимо открыть редактор реестра (в командной строке ввести команду regedit и нажать Enter). В левой области редактора имеется дерево ключей реестра, которое похоже на папки жесткого диска. В этом дереве нажимая на соответствующие иконки раскрытия папок (знак плюс) следует открыть путь HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters , после чего в этом дереве установить курсор на папку Parameters . В правой области редактора реестра появится содержимое данного ключа (папки).
Значение DWORD параметра MaxCacheTtl указывает ограничения времени хранения ответов в секундах. Его можно изменить на любое другое. Если параметра MaxCacheTtl нет, значит установлено стандартный предел равный 86400 секундам. Для его изменения следует создать параметр MaxCacheTtl типа DWORD со значением равным требуемому пределу. Параметр MaxCacheTtl ограничивает только время хранения положительных ответов, т. е. когда удалось определить ip-адрес по доменному имени.
Если DNS сервер провайдера вернул отрицательный ответ (не смог определить адрес), он тоже сохраняется в локальном хранилище. Обычно такой ответ хранится на протяжении 15 минут. Это значит, что если во время посещения сайта, не удалось определить его ip-адрес, сайт будет невозможно посетить в течении 15 минут, даже, если он станет доступен в течении этого времени. Чтобы этого избежать, следует уменьшить время хранения отрицательных ответов или вовсе отключить их хранения. Чтобы задать время хранения следует скорректировать (или создать, если отсутствует) DWORD параметр MaxNegativeCacheTtl , который ограничивает предельное время хранения отрицательных ответов. Для отключения их хранения достаточно выставить нулевое время хранения.
Временное отключение кэширования DNS ответов
Если требуется на время отключить кэширование адресов в локальном хранилище, необходимо в командной строке ввести команду net stop dnscache (или sc stop dnscache ) и нажать Enter. Для обратного включения следует в командной строке ввести команду net start dnscache (или sc start dnscache) и нажать Enter, либо перезагрузить компьютер.