Поднимаем DNS-сервер dnsmasq

Очень часто возникает необходимость установить и настроить локальный кэширующий 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

Внесём соответствующие правки:

# Указываем интерфейсы для прослушивания.

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: — 127.0.0.1@5353 — 0::1@5353

# Указываем используемые серверы 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:

sudo firewall-cmd —add-service=dns —permanentsudo 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.confsudo chmod 0644 /etc/resolv.conf

Откроем созданный файл в текстовом редакторе:

sudoedit /etc/resolv.conf

Добавим следующее содержание:

nameserver 127.0.0.1nameserver ::1options trust-adoptions ndots:1

Сохраним изменения и выйдем из редактора.

Настройка автозапуска

Активируем systemd-юниты:

sudo systemctl enable —now dnsmasq.service

sudo systemctl enable —now stubby.service

Перезапустим их для корректного вступления в силу изменений конфигурации:

sudo systemctl restart dnsmasq.service

sudo systemctl restart stubby.service

Проверка работы DNS

Проверим работу настроенной связки:

dig @127.0.0.1 easycoding.org

Если всё сделано верно, будет возвращён действительный ответ.

Литература

При написании статьи использовалась литература из следующих источников:

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!