кэширующий DNS dnsmasq

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 13:33

Здесь уже есть весьма обстоятельная тема про dnsmasq, хоть названием и про другое: DNS сервер ...
Но когда я полез посмотрел - там всё это написано 2012 годом ... 11 лет назад :lol:
Так что пересмотреть состояние дел лучше в новой теме.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 13:42

Olej писал(а):
25 апр 2023, 13:33
Так что пересмотреть состояние дел лучше в новой теме.
Прежде того:

1. Найти у себя в LAN хост на котором работает дефаултное разрешение DNS:

Код: Выделить всё

olej@esprimop420:~$ nslookup linux-ru.ru | grep -i server
Server:         1.1.1.1

Код: Выделить всё

olej@esprimop420:~$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 192.168.1.3
2. Зафиксировать временные задержки действующей системы разрешения DNS на хосте (надо же как-то сравнивать в итоге к чему привели нас усилия?):

Код: Выделить всё

olej@esprimop420:~$ host -v qnx.org.ru | grep Received
Received 44 bytes from 1.1.1.1#53 in 12 ms
Received 80 bytes from 1.1.1.1#53 in 12 ms
Received 57 bytes from 1.1.1.1#53 in 44 ms

Код: Выделить всё

olej@esprimop420:~$ host -v linux-ru.ru | grep Received
Received 45 bytes from 1.1.1.1#53 in 8 ms
Received 81 bytes from 1.1.1.1#53 in 16 ms
Received 77 bytes from 1.1.1.1#53 in 112 ms

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 13:44

Olej писал(а):
25 апр 2023, 13:42
Прежде того:
Поехали... ;-)

Код: Выделить всё

olej@esprimop420:~$ aptitude search dnsmasq
p   dnsmasq                                                         - Small caching DNS proxy and DHCP/TFTP server                              
i A dnsmasq-base                                                    - Small caching DNS proxy and DHCP/TFTP server                              
p   dnsmasq-base-lua                                                - Small caching DNS proxy and DHCP/TFTP server                              
p   dnsmasq-utils                                                   - Utilities for manipulating DHCP leases                                    
Этого мало:

Код: Выделить всё

olej@esprimop420:~$ sudo apt install dnsmasq
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Предлагаемые пакеты:
  resolvconf
Следующие НОВЫЕ пакеты будут установлены:
  dnsmasq
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 1 пакетов не обновлено.
Необходимо скачать 32,0 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 120 kB.
Пол:1 http://deb.debian.org/debian bullseye/main amd64 dnsmasq all 2.85-1 [32,0 kB]
Получено 32,0 kB за 0с (226 kB/s)
Выбор ранее не выбранного пакета dnsmasq.
(Чтение базы данных … на данный момент установлено 351157 файлов и каталогов.)
Подготовка к распаковке …/dnsmasq_2.85-1_all.deb …
Распаковывается dnsmasq (2.85-1) …
Настраивается пакет dnsmasq (2.85-1) …
Created symlink /etc/systemd/system/multi-user.target.wants/dnsmasq.service → /lib/systemd/system/dnsmasq.service.
invoke-rc.d: policy-rc.d denied execution of start.

Код: Выделить всё

olej@esprimop420:~$ systemctl status dnsmasq
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: inactive (dead)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 13:55

Конфигурации:

Код: Выделить всё

root@esprimop420:/etc# grep -v ^$ /etc/dnsmasq.conf | grep -v ^#

root@esprimop420:/etc# ls -l /etc/dnsmasq.conf
-rw-r--r-- 1 root root 27381 апр  4  2021 /etc/dnsmasq.conf

root@esprimop420:/etc# ls -l /etc/dnsmasq.d
итого 4
-rw-r--r-- 1 root root 211 апр  4  2021 README
Заготовка файла /etc/dnsmasq.conf очень обстоятельная, и исчерпывающе в комментариях описывает конфигурирование, но все строки этого большого файла комментированы.
Я бы в общем конфигурационном файле убрал знак комментария только с одной строки, а раздельные файлы конфигураций /etc/dnsmasq.d:

Код: Выделить всё

$ grep -v ^$ /etc/dnsmasq.conf | grep -v ^#
conf-dir=/etc/dnsmasq.d/,*.conf
А для DNS и DHCP сделал бы отдельные конфигурационные файлы /etc/dnsmasq.d/dhcp.conf и /etc/dnsmasq.d/dns.conf в каталог /etc/dnsmasq.d, скопировав в них, за основу, этот обстоятельный /etc/dnsmasq.conf, а дальше убрав комментарии только с нужных мне строк.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 14:56

Olej писал(а):
25 апр 2023, 13:55
А для DNS и DHCP сделал бы отдельные конфигурационные файлы /etc/dnsmasq.d/dhcp.conf и /etc/dnsmasq.d/dns.conf в каталог /etc/dnsmasq.d, скопировав в них, за основу, этот обстоятельный /etc/dnsmasq.conf, а дальше убрав комментарии только с нужных мне строк.
Как вариант:

Код: Выделить всё

olej@esprimop420:~$ ls /etc/dnsmasq.d/*.conf
/etc/dnsmasq.d/dhcp.conf  /etc/dnsmasq.d/dns.conf

Код: Выделить всё

olej@esprimop420:~$ grep -v ^$ /etc/dnsmasq.d/dhcp.conf | grep -v ^#
dhcp-range=192.168.1.30,192.168.1.45,255.255.255.0,12h  	# объявляем диапазон адресов для аренды
dhcp-option=option:router,192.168.1.3				# основной шлюз для этой под сети
log-dhcp							# записывать дополнительную отладочную информацию

Код: Выделить всё

olej@esprimop420:~$ grep -v ^$ /etc/dnsmasq.d/dns.conf | grep -v ^#
listen-address=127.0.0.1	# принимаем запросы на локальном адресе
interface=enp3s0		# слушать только эти интерфейсы (из LAN)
domain-needed 			# никогда не пересылать адреса без доменной части
bogus-priv 			# никогда не пересылать адреса из немаршрутизируемого пространства
stop-dns-rebind			# отклонять ответы от вышестоящих DNS серверов
                    		# с IP адресами локальной сети (блокировать DNS атаки)
rebind-localhost-ok		# отключить проверки для 127.0.0.0/8 
strict-order 			# пересылать запросы, с первого и по порядку
no-resolv			# не использовать /etc/resolv.conf
no-hosts			# не требуется читать /etc/hosts
domain=localdomain
local-ttl=7200			# настройки времени жизни кэша в секундах 7200=2h (два часа)
neg-ttl=14400
max-ttl=86400
server=192.168.1.3 		# LAN router to WAN
server=8.8.4.4#53 		# google OpenDNS
server=4.2.2.6#53		# Verizon DNS
Это не вариант для подражания, а только простой пример для экспериментов.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 15:02

Olej писал(а):
25 апр 2023, 14:56
Это не вариант для подражания, а только простой пример для экспериментов.
Теперь можно запускать:

Код: Выделить всё

root@esprimop420:/etc# systemctl start dnsmasq

Код: Выделить всё

root@esprimop420:/etc# systemctl --no-pager --full status dnsmasq
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-04-25 15:17:26 EEST; 3min 59s ago
    Process: 19486 ExecStartPre=/etc/init.d/dnsmasq checkconfig (code=exited, status=0/SUCCESS)
    Process: 19494 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
    Process: 19505 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
   Main PID: 19504 (dnsmasq)
      Tasks: 1 (limit: 14232)
     Memory: 588.0K
        CPU: 44ms
     CGroup: /system.slice/dnsmasq.service
             └─19504 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d

апр 25 15:17:26 esprimop420 systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
апр 25 15:17:26 esprimop420 dnsmasq[19504]: started, version 2.85 cachesize 150
апр 25 15:17:26 esprimop420 dnsmasq[19504]: compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset auth cryptohash DNSSEC loop-detect inotify dumpfile
апр 25 15:17:26 esprimop420 dnsmasq-dhcp[19504]: DHCP, IP range 192.168.1.30 -- 192.168.1.45, lease time 12h
апр 25 15:17:26 esprimop420 dnsmasq[19504]: using nameserver 4.2.2.6#53
апр 25 15:17:26 esprimop420 dnsmasq[19504]: using nameserver 8.8.4.4#53
апр 25 15:17:26 esprimop420 dnsmasq[19504]: using nameserver 192.168.1.3#53
апр 25 15:17:26 esprimop420 dnsmasq[19504]: cleared cache
апр 25 15:17:26 esprimop420 systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
В логах:

Код: Выделить всё

root@esprimop420:/var/log# cat /var/log/syslog | grep dnsmasq-dhcp
Apr 25 15:17:26 esprimop420 dnsmasq-dhcp[19504]: DHCP, IP range 192.168.1.30 -- 192.168.1.45, lease time 12h

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 15:30

Olej писал(а):
25 апр 2023, 15:02
Теперь можно запускать:
Проверяем...
Разрешение через сетевой DNS (Goole DNS), для 2-х произвольно взятых имён:

Код: Выделить всё

olej@esprimop420:~$ host -v qnx.org.ru | grep Received
Received 44 bytes from 1.1.1.1#53 in 348 ms
Received 80 bytes from 1.1.1.1#53 in 60 ms
Received 57 bytes from 1.1.1.1#53 in 48 ms

Код: Выделить всё

olej@esprimop420:~$ host -v linux-ru.ru | grep Received
Received 45 bytes from 1.1.1.1#53 in 60 ms
Received 81 bytes from 1.1.1.1#53 in 64 ms
Received 77 bytes from 1.1.1.1#53 in 56 ms
Теперь то же, но обращаемся к локальному кэширующему серверу. Но делаем последовательно 2 запроса (по 1-му локальный DNS обратится в сеть по иерархии, 2-й станет разрешаться из внутреннего кэша):

Код: Выделить всё

olej@esprimop420:~$ host -v linux-ru.ru 127.0.0.1 | grep Received
Received 45 bytes from 127.0.0.1#53 in 108 ms
Received 81 bytes from 127.0.0.1#53 in 128 ms
Received 77 bytes from 127.0.0.1#53 in 76 ms

Код: Выделить всё

olej@esprimop420:~$ host -v linux-ru.ru 127.0.0.1 | grep Received
Received 45 bytes from 127.0.0.1#53 in 0 ms
Received 29 bytes from 127.0.0.1#53 in 0 ms
Received 77 bytes from 127.0.0.1#53 in 56 ms

Код: Выделить всё

olej@esprimop420:~$ host -v qnx.org.ru 127.0.0.1 | grep Received
Received 44 bytes from 127.0.0.1#53 in 144 ms
Received 80 bytes from 127.0.0.1#53 in 76 ms
Received 57 bytes from 127.0.0.1#53 in 228 ms

Код: Выделить всё

olej@esprimop420:~$ host -v qnx.org.ru 127.0.0.1 | grep Received
Received 44 bytes from 127.0.0.1#53 in 0 ms
Received 28 bytes from 127.0.0.1#53 in 0 ms
Received 57 bytes from 127.0.0.1#53 in 44 ms
Видно насколько значительно ускоряется запрос разрешения имени, которое уже находится в кэше сервера.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 15:36

Olej писал(а):
25 апр 2023, 15:30
Видно насколько значительно ускоряется запрос разрешения имени, которое уже находится в кэше сервера.
Остаётся вопрос: почему работает (успешно как видим) кэширующий DNS, но запросы по умолчанию (без явного указания сервера) идут по-прежнему к удалённым сетевым DNS? Потому что всё ещё:

Код: Выделить всё

olej@esprimop420:~$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 192.168.1.3
Меняем:

Код: Выделить всё

olej@esprimop420:~$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
И теперь:

Код: Выделить всё

olej@esprimop420:~$ host -v linux-ru.ru | grep Received
Received 45 bytes from 127.0.0.1#53 in 0 ms
Received 29 bytes from 127.0.0.1#53 in 0 ms
Received 77 bytes from 127.0.0.1#53 in 60 ms

Код: Выделить всё

olej@esprimop420:~$ host -v qnx.org.ru | grep Received
Received 44 bytes from 127.0.0.1#53 in 0 ms
Received 28 bytes from 127.0.0.1#53 in 0 ms
Received 57 bytes from 127.0.0.1#53 in 40 ms

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

кэширующий DNS dnsmasq

Непрочитанное сообщение Olej » 25 апр 2023, 16:02

Olej писал(а):
25 апр 2023, 15:36
И теперь:
Наконец, пусть любой другой хост этой LAN запросит разрешение имени у этого вновь созданного DNS сервера:

Код: Выделить всё

lej@R420:~$ host -v linux-ru.ru 192.168.1.138 | grep Received
Received 45 bytes from 192.168.1.138#53 in 116 ms
Received 81 bytes from 192.168.1.138#53 in 84 ms
Received 77 bytes from 192.168.1.138#53 in 1156 ms

Код: Выделить всё

olej@R420:~$ host -v linux-ru.ru 192.168.1.138 | grep Received
Received 45 bytes from 192.168.1.138#53 in 4 ms
Received 29 bytes from 192.168.1.138#53 in 4 ms
Received 77 bytes from 192.168.1.138#53 in 72 ms
Команда host отправляет последовательно 3 запроса и получает 3 ответа для получения DNS записей, соответственно, типа: A (IPv4), AAAA (IPv6), MX (запись для электронной почты, указывающая, какими серверами она обрабатывается). Поэтому для оценки общего времени ответа можно использовать сумму этих 3-х значений.

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя