Одним из ключевых сервисов в инфраструктуре является DNS.
Мне один раз досталась в наследство компания, где периодически падал локальный DNS сервер. Когда это случилось первый раз, было стрёмно. Я ещё только изучал инфраструктуру. Там и кластер виртуализации был, и DRBD диски, и домен на Samba. Разом всё сломалось, мониторинг спамит, пользователи жалуются техподдержке, она теребит меня. Быстро догадался зайти по IP на сервер и перезапустить тогда ещё использовавшийся Bind, если не ошибаюсь. Потом уже всё перенастроил, но Bind успел упасть ещё пару раз. На серваке, где он работал, как потом выяснилось, банально кончалась память.
Сам я потом тоже использовал какое-то время Bind, потом перешёл на DNSmasq, если в инфре была винда, то использовал её DNS сервер, если есть железный роутер, то DNS сервер обычно на нём. На базе DNSmasq собран небезызвестный Pi-hole. Я немного пользовался им, даже запускал его в контейнере на Mikrotik. В итоге отказался, так как всё это ненадёжно работало на моём железе.
Длинная подводка получилась. Рассказать хотел о новом для меня DNS сервере - Technitium DNS. Впервые увидел его в недавнем обзоре. По описанию понравилось, поэтому решил попробовать. Особенно привлекла простая возможность собрать полноценный (но однонаправленный) кластер. Я всё это развернул у себя, в том числе и кластер, и протестировал. DNS сервер понравился. Думаю, что при необходимости буду использовать именно его, если нужен будет сервер с веб панелью управления, статистикой, разграничением доступа, блокировками по готовым спискам и т.д.
Technitium DNS - современный сервер, который поддерживает всевозможные технологии и настройки:
▪️DNS-over-TLS, DNS-over-HTTPS, and DNS-over-QUIC, DNSSEC.
▪️Блокировки по готовым спискам доменов.
▪️Быстрый запуск через готовый Docker контейнер (есть и другие способы).
▪️Расширение функциональности через встроенный магазин приложений (может, к примеру, логи запросов писать в MySQL).
▪️Встроенный DHCP сервер.
▪️Управление доступом на основе ролей (RBAC).
▪️API с доступом по токенам.
▪️Поддержка работы через HTTP и SOCKS5 прокси.
В этом сервере есть всё, что можно только придумать и желать от современного программного продукта. Я пробежался по огромному списку возможностей и не придумал, чего там не хватает.
При этом, всё это настраивается очень просто, особенно в базовой функциональности. Я развернул на двух нодах и собрал сервер в кластер. Использовал следующий docker-compose.yml, изменив только имя хостов:
services:
dns-server:
container_name: technitium-01
hostname: technitium-01
image: technitium/dns-server:latest
ports:
- "5380:5380/tcp" # Web console (HTTP)
- "53:53/udp" # DNS service
- "53:53/tcp" # DNS service
- "53443:53443/tcp" # Web console (HTTPS)
# - "853:853/udp" # DNS-over-QUIC
# - "853:853/tcp" # DNS-over-TLS
# - "443:443/udp" # DNS-over-HTTPS (HTTP/3)
# - "443:443/tcp" # DNS-over-HTTPS (HTTP/1.1, HTTP/2)
# - "67:67/udp" # DHCP service
environment:
- DNS_SERVER_DOMAIN=home.local
- DNS_SERVER_ADMIN_PASSWORD=your_password
- DNS_SERVER_PREFER_IPV6=false
- DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks
- DNS_SERVER_FORWARDERS=62.76.76.62,77.88.8.1,62.76.62.76,77.88.8.8
volumes:
- ./config:/etc/dns
restart: unless-stopped
sysctls:
- net.ipv4.ip_local_port_range=1024 65000
Запустил, зашёл на веб интерфейс http://server-ip:5380/, собрал в кластер, настроил списки блокировки и другие настройки. Подключил нескольким пользователям. Проверил - отлично работает, никаких проблем не возникло. Выключил одну ноду, кластер продолжил работать на второй, запросы резолвил.
#dns