Logo Neurocoda

Настройка собственного DoH-сервера

Neurocoda
Neurocoda
2026-07-03 12:44:34 2026-07-03 13:43:00 358 Words 2 Mins ...

CoreDNS

CoreDNS — это гибкий и мощный DNS-сервер, поддерживающий множество плагинов. Он отлично подходит для создания DoH-сервиса.

Инициализация

Установка необходимых компонентов

Сначала обновите систему и установите необходимые пакеты, включая Docker Compose и Certbot (для получения SSL-сертификатов).

Terminal window
sudo apt update && sudo apt upgrade -y && sudo apt install -y docker-compose certbot

Настройка брандмауэра

Обеспечьте безопасность сервера, настроив правила брандмауэра для разрешения необходимых портов (22, 80 и 443).

Terminal window
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

Получение SSL-сертификата

Используйте Certbot для получения SSL-сертификата. Замените <DOMAIN> на ваше фактическое доменное имя.

Terminal window
sudo certbot certonly --standalone -d <DOMAIN>

Примечание: Убедитесь, что домен правильно разрешается в IP-адрес вашего сервера, и порт 80 не занят другими службами.

Настройка и развертывание CoreDNS

Мы будем запускать CoreDNS через Docker.

Создание каталога конфигурации CoreDNS

Создайте каталог для хранения файлов конфигурации.

Terminal window
sudo mkdir -p /etc/coredns

Создание файла конфигурации CoreDNS

Создайте и отредактируйте /etc/coredns/Corefile:

Terminal window
sudo vim /etc/coredns/Corefile

Добавьте в файл следующее содержимое, не забудьте заменить <DOMAIN> на ваше фактическое доменное имя:

https://.:443 {
tls /etc/letsencrypt/live/<DOMAIN>/fullchain.pem /etc/letsencrypt/live/<DOMAIN>/privkey.pem
bind 0.0.0.0:443
forward . 1.1.1.1 8.8.8.8
log
errors
cache 300
}

Пояснения к конфигурации:

  • <DOMAIN>:443 — прослушивание HTTPS-запросов на порту 443 для указанного домена.
  • tls — указание пути к SSL-сертификату и закрытому ключу.
  • bind 0.0.0.0:443 — привязка к порту 443 на всех сетевых интерфейсах для внешнего доступа.
  • forward . 1.1.1.1 8.8.8.8 — перенаправление DNS-запросов на публичные DNS-серверы Cloudflare (1.1.1.1) и Google (8.8.8.8).
  • log и errors — включение журналирования и записи ошибок для отладки.
  • cache 300 — включение кэширования DNS с временем жизни 300 секунд для ускорения запросов.

Запуск контейнера CoreDNS

Запустите контейнер CoreDNS через Docker. Убедитесь, что вы заменили <DOMAIN> на ваше фактическое доменное имя.

Terminal window
sudo docker run -d \
--name coredns \
--restart unless-stopped \
--network host \
-v /etc/coredns:/etc/coredns \
-v /etc/letsencrypt/live/<DOMAIN>/fullchain.pem:/etc/letsencrypt/live/<DOMAIN>/fullchain.pem \
-v /etc/letsencrypt/live/<DOMAIN>/privkey.pem:/etc/letsencrypt/live/<DOMAIN>/privkey.pem \
coredns/coredns \
-conf /etc/coredns/Corefile

Пояснения к запуску:

  • --network host — использование сетевого стека хоста, позволяющее CoreDNS прослушивать порт 443 на хосте.
  • -v /etc/coredns:/etc/coredns — монтирование каталога конфигурации хоста в контейнер для удобного управления.
  • -v /etc/letsencrypt/live/<DOMAIN>/fullchain.pem и -v /etc/letsencrypt/live/<DOMAIN>/privkey.pem — монтирование SSL-сертификата и закрытого ключа в контейнер для обеспечения работы HTTPS.

Проверка состояния CoreDNS

Убедитесь, что контейнер CoreDNS работает и прослушивает правильный порт.

Terminal window
sudo docker ps | grep coredns

Вы должны увидеть вывод, похожий на следующий, указывающий, что контейнер CoreDNS работает и прослушивает порт 443:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> coredns/coredns "/coredns -conf /etc…" X seconds ago Up X seconds 0.0.0.0:443->443/tcp coredns

Настройка клиента для использования DoH

После выполнения вышеуказанных шагов ваш DoH-сервер готов. Теперь на клиентских устройствах настройте DNS, используя https://<DOMAIN>/dns-query в качестве адреса DoH-сервера.

Автоматическое обновление SSL-сертификата

SSL-сертификаты, полученные через Certbot, действительны 90 дней. Рекомендуется настроить задачу по расписанию для автоматического обновления сертификатов и перезапуска контейнера CoreDNS.

Создайте задачу cron для ежедневной проверки и обновления сертификатов:

Terminal window
sudo crontab -e

Добавьте следующую строку:

0 2 1 * * certbot renew --quiet && sudo docker restart coredns

Эта задача будет запускаться в 2 часа ночи первого числа каждого месяца, автоматически обновлять сертификаты и перезапускать контейнер CoreDNS.

Ссылки

CoreDNS Manual
Certbot
Home
DNS over HTTPS

Title: Настройка собственного DoH-сервера Author: Neurocoda Created at: 2026-07-03 12:44:34 Updated at: 2026-07-03 13:43:00 Link: https://neurocoda.com/ru/posts/self-hosted-doh-server-setup-ru/ License: This work is licensed under CC BY-ND 4.0.

Comments