Очень часто возникает необходимость установить и настроить локальный кэширующий DNS-сервер в локальной сети. Для достижения этой цели воспользуемся dnsmasq с поддержкой шифрования исходящего трафика при помощи TLS.
Введение
Основным DNS-сервером мы будем использовать простой и потребляющий мало ресурсов, но при этом достаточно мощный dnsmasq, а в качестве бэкэнда TLS-шифрования исходящего трафика — stubby.
Все описанные ниже действия приводятся на примере дистрибутива Fedora, но, за исключением способа установки пакетов, они будут работать и в любом другом.
Установка и настройка dnsmasq
Установим пакет dnsmasq из основного репозитория:
sudo dnf install dnsmasq
Создадим новый файл конфигурации и зададим правильные права доступа:
sudo touch /etc/dnsmasq.d/dnsmasq.conf sudo chown root:dnsmasq /etc/dnsmasq.d/dnsmasq.conf sudo chmod 0644 /etc/dnsmasq.d/dnsmasq.conf
Загрузим его в текстовый редактор:
sudoedit /etc/dnsmasq.d/dnsmasq.conf
Внесём соответствующие правки:
🉐 ОТКЛЮЧИЛ РЕКЛАМУ и УСКОРИЛ ИНТЕРНЕТ НА СМАРТФОНЕ XIAOMI | ПРАВИЛЬНАЯ НАСТРОЙКА DNS 👍
# Указываем интерфейсы для прослушивания. listen-address=::1 listen-address=127.0.0.1 listen-address=192.168.1.1 bind-interfaces # Запрещаем чтение файла /etc/resolv.conf для получения DNS-серверов. no-resolv # Запрещаем добавление хостов из файла /etc/hosts. no-hosts # Указываем вышестоящие DNS-серверы. server=::1#5353 server=127.0.0.1#5353 # Указываем количество элементов для локального кэша DNS. cache-size=5000 # Экспортируем дополнительные хосты при необходимости. address=/example.org/192.168.1.25
Установка и настройка stubby
Установим пакет stubby (для поддержки DoT):
sudo dnf install stubby
Откроем файл /etc/stubby.yml в текстовом редакторе:
sudoedit /etc/stubby.yml
Внесём ряд правок (в качестве примера мы приводим листинг готового файла конфигурации с комментариями на русском языке):
# Активируем режим STUB-резолвера. resolution_type: GETDNS_RESOLUTION_STUB # Активируем транспорт TLS. dns_transport_list: — GETDNS_TRANSPORT_TLS # Требуем обязательного использования TLS. tls_authentication: GETDNS_AUTHENTICATION_REQUIRED # Задаём стойкость шифра (128 или 256 бит). tls_query_padding_blocksize: 128 # Активируем rfc7871. edns_client_subnet_private : 1 # Разрешаем переключение на другой DNS-сервер в случае недоступности текущего. round_robin_upstreams: 1 # Задаём таймаут keepalive в миллисекундах. idle_timeout: 9000 # Указываем лимит исходящих DNS-запросов на вышестоящий сервер. limit_outstanding_queries: 100 # Задаём таймаут ожидания ответа от сервера в миллисекундах. timeout: 1000 # Указываем используемые шифры для TLS 1.2 и ниже. tls_cipher_list: «EECDH+AESGCM:EECDH+CHACHA20» # Указываем используемые шифры для TLS 1.3 и выше. tls_ciphersuites: «TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256» # Устанавливаем минимальную версию TLS. tls_min_version: GETDNS_TLS1_2 # Устанавливаем максимальную версию TLS. tls_max_version: GETDNS_TLS1_3 # Настраиваем stubby на прослушивание loopback-интерфейса и порта 5353. listen_addresses: — [email protected] — 0::[email protected] # Указываем используемые серверы DNS. upstream_recursive_servers: — address_data: 9.9.9.9 tls_auth_name: «dns.quad9.net» — address_data: 1.1.1.1 tls_auth_name: «cloudflare-dns.com» — address_data: 2620:fe::fe tls_auth_name: «dns.quad9.net» — address_data: 2606:4700:4700::1111 tls_auth_name: «cloudflare-dns.com»
Настройка межсетевого экрана
Разрешим входящий трафик на следующие порты: 53/udp и 5353/udp:
❗❗ ОТКЛЮЧИ Настройку ПАРАЗИТ на своем Xiaomi и ОФИГЕЕШЬ!!
sudo firewall-cmd —add-service=dns —permanent sudo firewall-cmd —add-port=5353/udp —permanent
Перезагрузим конфигурацию брандмауэра:
sudo firewall-cmd —reload
Изменение резолвера по умолчанию
Для того, чтобы dnsmasq смог занять стандартный порт 53/udp, мы должны отключить и заблокировать запуск сервиса systemd-resolved, применяемого по умолчанию в качестве локального DNS-резолвера в большинстве современных дистрибутивов:
sudo systemctl disable —now systemd-resolved.service sudo systemctl mask systemd-resolved.service
Удалим символическую ссылку /etc/resolv.conf, создадим пустой текстовый файл и установим правильные права доступа:
sudo rm -f /etc/resolv.conf sudo touch /etc/resolv.conf sudo chown root:root /etc/resolv.conf sudo chmod 0644 /etc/resolv.conf
Откроем созданный файл в текстовом редакторе:
sudoedit /etc/resolv.conf
nameserver 127.0.0.1 nameserver ::1 options trust-ad options ndots:1
Сохраним изменения и выйдем из редактора.
Настройка автозапуска
sudo systemctl enable —now dnsmasq.service sudo systemctl enable —now stubby.service
Перезапустим их для корректного вступления в силу изменений конфигурации:
sudo systemctl restart dnsmasq.service sudo systemctl restart stubby.service
Проверка работы DNS
Проверим работу настроенной связки:
Если всё сделано верно, будет возвращён действительный ответ.
Литература
При написании статьи использовалась литература из следующих источников:
- dnsmasq on Arch Wiki;
- stubby documentation.
4 commentary to post
DNSMASQ USER :
NetworkManager затрет /etc/resolv.conf, поэтому я настроил openresolv с интеграцией с NM.
В современных версиях Fedora конфигурационный файл /etc/resolv.conf — это символическая ссылка на виртуальный /run/systemd/resolve/stub-resolv.conf. Если пользователь удалит данную ссылку и создаст вместо этого текстовый файл, как сказано в заметке, всё будет работать штатно.
DNSMASQ USER :
Кстати, а вроде в NM можно просто указать dnsmasq и он будет его сам запускать со своими конфигами. Это хорошее решение?
Network Manager умеет автоматически запускать dnsmasq для использования в качестве DHCP-сервера при раздаче Wi-Fi или мостов, но конфиги он будет генерировать самостоятельно и без опций DNS.
Разделы сайта
- HOWTO (92)
- Новости (8)
- Программирование (7)
- Разное (3)
- Разработка (18)
- Рецензии (3)
Свежее на сайте
- Настраиваем поддержку UEFI Secure Boot для драйверов NVIDIA
- Используем TPM для хранения SSH-ключей
- Работаем с GPG подписями и шифрованием в C#
- Обходим проверку на наличие прав суперпользователя
- Управляем профилями производительности Linux
Источник: www.easycoding.org
Как полностью удалить dsnmasq и каковы побочные эффекты от этого?
Я не хочу, чтобы dsnmasq работал все время. Я хочу удалить его. Как это сделать? Я также нашел эту ссылку ( http://overtag.dk/wordpress/2014/06/ubuntu-14-04-trusty-with-dns-server-and-networkmanager-disabling-dnsmasq/). Могу ли я следовать инструкциям, указанным здесь?
14 авг ’15 в 17:21 2015-08-14 17:21
2015-08-14 17:21
2 ответа
Если у вас нет компьютера для размещения кеша / сервера DNS, например, для точки доступа WiFi, используйте ap-hotspot Вы можете просто удалить его с помощью:
sudo apt-get remove dnsmasq
Насколько я знаю, это не требуется по умолчанию в большинстве установок Ubuntu.
Wilf 14 авг ’15 в 20:25 2015-08-14 20:25
2015-08-14 20:25
Давайте посмотрим, что man dnsmasq говорит о своей цели:
Dnsmasq принимает DNS-запросы и отвечает на них из небольшого локального кэша или перенаправляет их на реальный рекурсивный DNS-сервер. Он загружает содержимое / etc / hosts, чтобы можно было разрешить локальные имена хостов, которые не отображаются в глобальном DNS, а также отвечает на запросы DNS для хостов, настроенных по протоколу DHCP. Он также может выступать в качестве официального DNS-сервера для одного или нескольких доменов, позволяя локальным именам появляться в глобальном DNS. Он может быть настроен на проверку DNSSEC.
Так что если вам не нужно:
- читать определенные IP-адреса, сохраненные в /etc/hosts
- использовать локальный кеш DNS
- использовать вашу машину в качестве DHCP-сервера
удаление dnsmasq не повлияет на тебя.
Лично у меня есть dnsmasq закомментировано в /etc/NetworkManager/NetworkManager.conf и использовать свой собственный DNS-сервер в /etc/dhcp/dhclient.conf ,
Sergiy Kolodyazhnyy 14 авг ’15 в 20:54 2015-08-14 20:54
2015-08-14 20:54
Steam рекомендует это непосредственно в качестве временного решения проблемы низкой скорости загрузки в Ubuntu. Steam ограничивает скорость загрузки 28 Мбит / с, а у меня соединение 200 Мбит / с. Терминал получает 150 Мбит / с с помощью быстрой команды, speedtest.com показывает скорость до 225 Мбит / с.
Так что это довольно большое падение. Сначала я подумал, что это просто неправильная конфигурация моей локальной сети или неправильные драйверы Ethernet, но, видимо, это просто проблема Steam.
Этой статье в Steam 6 лет, так что похоже, что эта проблема не прекращается последние шесть лет??
Из-за ошибки в клиенте Steam для Linux он может замедлять не только собственную скорость загрузки, но и все DNS, использующие сетевую активность одновременно. Это происходит потому, что клиент ищет сетевой адрес для всех серверов загрузки, к которым он подключается, каждый раз, когда он устанавливает соединение. Это может означать, что он будет запрашивать одну и ту же информацию десять раз в секунду у DNS-серверов, используемых вашим сетевым подключением. В зависимости от того, как настроен этот DNS-сервер, он может ограничивать количество DNS-запросов, которые вы можете сделать. Это приводит к тому, что скорость загрузки Steam увеличивается быстро, но затем быстро падает до нуля, прежде чем снова быстро запускаться на короткое время.
Так что в 20.04 есть применение. Если вы не используете Steam или не делаете то, что упомянуто выше.
Источник: ask-ubuntu.ru
Установка и примеры настройки Dnsmasq
Обновлено: 28.10.2022 Опубликовано: 03.09.2021
Используемые термины: Dnsmasq, DNS, Linux. Данная инструкция будет состоять из двух основных частей — установка программного обеспечения и примеры по его настройки под различные задачи. Мы рассмотрим примеры работы на системах Linux Ubuntu и Rocky Linux (CentOS).
Установка, настройка системы и запуск
1. Установка выполняется немного, по-разному, в зависимости от выбранного дистрибутива Linux. Рассмотрим примеры систем на базе Deb и RPM. а) Для Debian / Ubuntu (Deb):
apt install dnsmasq
б) Для Rocky Linux / CentOS (RPM):
yum install dnsmasq
Установка завершена.
После установки или старта сервиса мы можем увидеть ошибку:
failed to create listening socket for port 53: Address already in use
Как правило, она связана с тем, что на компьютере работает сервис systemd-resolved, который занял порт 53. Чтобы это исправить, отключаем его:
systemctl disable systemd-resolved —now
2. После установки разрешим автозапуск сервиса. Вводим команду:
systemctl enable dnsmasq
Для систем на базе RPM также необходимо запустить сервис:
systemctl start dnsmasq
3. Настраиваем брандмауэр. Нам необходимо открыть UDP порт 53. Как правило, используется 2 системы управления netfilter — iptables и firewalld. Рассмотрим обе. а) При использовании iptables (как правило, для систем на базе Deb):
iptables -I INPUT -p udp —dport 53 -j ACCEPT
И сохраняем правило. б) При использовании firewalld (как правило, для систем на базе RPM):
firewall-cmd —permanent —add-port=53/udp
firewall-cmd —reload
4. Проверяем работоспособность сервиса. На любом из компьютеров в сети делаем запрос при помощи nslookup:
nslookup dmosk.ru 192.168.0.15
* где 192.168.0.15 — адрес в сети нашего сервера, куда мы установили dnsmasq. Мы должны получить ответ на подобие:
Server: 192.168.0.15
Address: 192.168.0.15#53
Non-authoritative answer:
Name: dmosk.ru
Address: 92.53.96.18
Наш dnsmasq установлен и готов к дальнейшей настройке.
Примеры настройки dnsmasq
Переходим к основной части инструкции. Приведем примеры использования и соответствующей настройки dnsmasq.
1. Перевод запросов на другой DNS-сервер для определенного домена
Предположим, у нас есть задача — переводить все запросы для имен с доменом consul на другой DNS-сервер, который находится в нашей сети. Также, данный сервер слушает не на стандартном для NS-сервера порту (53), а на порту 8600. Кстати, это реальный пример работы при настройке кластера consul. Создаем конфигурационный файл:
vi /etc/dnsmasq.d/consul
В него добавим одну строку:
server=/consul/127.0.0.1#8600
* в данном примере мы будем переводить все запросы для домена consul на сервер 127.0.0.1 (в этом примере локальный сервер, но может быть любой) и порт 8600.
Если мы работаем в системе с включенным SELinux и переводим запросы на нестандартный порт, то необходимо добавить правило:
semanage port -a -t dns_port_t -p tcp 8600
* где 8600 — порт, на который переводим запросы DNS.
Чтобы настройки вступили в силу, перезапускаем dnsmasq:
systemctl restart dnsmasq
2. Настройка кэширования
По умолчанию, dnsmasq работает как кэширующий сервер. Мы же подредактируем настройки. Создаем конфигурационный файл:
vi /etc/dnsmasq.d/cache
cache-size=10000
all-servers
no-negcache
- cache-size — размер кэша (количество хостов).
- all-servers — задает поведение, при котором наш сервер будет отправлять запрос всем доступным ему серверам DNS и принимать ответ от того, кто первый ему ответит.
- no-negcache — не кэшировать негативные ответы.
Чтобы настройки вступили в силу, перезапускаем dnsmasq:
systemctl restart dnsmasq
3. Подмена IP-адресов
Есть несколько вариантов подмены IP-адресов в dnsmasq. Для настройки создадим файл:
В зависимости от ситуации, применяем один из вариантов, описанных ниже.
а) Подмена одного адреса:
* в данном примере если наш сервер получит ответ 1.1.1.1, он его заменит на 2.2.2.2.
б) Подмена адресов в подсети:
* в данном примере все адреса из подсети 1.1.1.0/24 будут заменены на соответствующие адреса подсети 2.2.2.2/24.
* в данном примере адреса в диапазоне от 1.1.1.100 до 1.1.1.200 будут переопределены в адреса в диапазоне от 192.168.0.100 до 192.168.0.200.
После внесения необходимых строк, нужно перезагрузить сервис.
systemctl restart dnsmasq
4. Произвольный адрес
Мы можем быстро добавить любой адрес и привязать его к доменному имени. Делается это с помощью директивы address:
address=/dmosk.local/127.0.0.1
address=/dmosk.local/192.168.0.15
address=/mail.dmosk.local/192.168.0.16
* в нашем примере dnsmasq будет знать о двух записях — dmosk.local и mail.dmosk.local. Первая будет разрешаться в два адреса.
systemctl restart dnsmasq
5. Форвард запросов на другой сервер
С помощью опции server мы можем указать серверы, на которые нужно передавать запрос DNS.
* в данном примере мы передадим запросы на серверы Google.
systemctl restart dnsmasq
6. Файл hosts
В зависимости от ситуации, нам может потребоваться разрешать некоторые имена с помощью файла /etc/hosts. Или наоборот — настройки из данного файла могут нам мешать.
В dnsmasq предусмотрена директива hosts, с помощью которой мы можем манипулировать результатами с использованием файла hosts.
а) Если мы хотим, чтобы данные из файла учитывались:
б) Если нам не нужны данные из файла:
systemctl restart dnsmasq
Это, далеко, не все возможности dnsmasq. По мере необходимости, они будут дополняться в данной инструкции.
Диагностика и решение проблем
По умолчанию, dnsmasq пишет не очень много логов. Чтобы это исправить, необходимо отредактировать конфигурацию. Для этого создаем файл:
* где опция log-queries разрешает логи запросов; log-facility позволяет задать путь до файла с логами.
Создаем каталог для хранения лога:
Перезапускаем dnsmasq, чтобы применить изменения:
systemctl restart dnsmasq
Прочитать лог можно командой (непрерывное чтение):
tail -f /var/log/dnsmasq/dnsmasq.log
Смотрите также
Возможно, также будет интересны инструкции:
Источник: www.dmosk.ru