DNSBox

DNS и HTTPS для имён хостов на основе IP

Открывайте публичный HTTP-сервис через *.dnsbox.io или запустите DNSBox в собственной частной сети.

Возможности v0.5.2

Обновляетесь с v0.4.x? Прежде чем заменять существующую установку, прочитайте руководство по миграции. Руководство по миграции

Используйте публичный сервис

Учётная запись и регистрация домена не нужны. Бэкенд должен иметь разрешённый публичный IP-адрес и HTTP-сервис на порту 80, доступный со стороны DNSBox.

Замените 198.51.100.20 публичным IPv4-адресом своего сервера:

https://198-51-100-20.dnsbox.io

DNS возвращает для имени хоста адрес прокси DNSBox. Прокси принимает HTTPS-соединение и отправляет HTTP-запросы на IP-адрес, закодированный в имени хоста. Сертификат на ваш сервер он не устанавливает.

Let's Encrypt проверяет имя хоста через DNS-01. Сертификат выдаётся для этого имени, а не для самого IP-адреса. Первое TLS-соединение может занять больше времени из-за выпуска сертификата.

Соединение между браузером и DNSBox использует HTTPS. Между DNSBox и бэкендом используется HTTP. Поддерживается переключение соединения на WebSocket.

IPv6-адрес бэкенда можно записать как 2a01-4f8-c17-b8f--1.dnsbox.io. Один дефис заменяет двоеточие, два дефиса — ::.

Сначала проверьте разрешение имени в DNS, затем HTTPS. Для проверки используйте собственный доступный HTTP-бэкенд:

dig +short 198-51-100-20.dnsbox.io
curl -v https://198-51-100-20.dnsbox.io/

В DNS-ответе возвращается адрес прокси. Успешное TLS-соединение и успешный HTTP-ответ бэкенда — две отдельные проверки.

Запустите DNSBox в частной сети

Локальный режим TLS работает без публичного DNS, проброса портов и доступа в Интернет. DNSBox создаёт собственный центр сертификации. Клиенты должны доверять этому центру.

Пример: DNSBox на 192.168.1.2, HTTP-бэкенды в сети 192.168.1.0/24:

./dnsboxd --domain=home.arpa --ip=192.168.1.2 \
  --tls-mode=local --allowed-cidrs=192.168.1.0/24 \
  --dns-listen=192.168.1.2:53 --https-listen=192.168.1.2:443 \
  --data-dir=/var/lib/dnsbox

Настройте DNS-резолвер локальной сети так, чтобы он перенаправлял на 192.168.1.2 только запросы к зоне home.arpa. DNSBox авторитетен для своей зоны; он не является универсальным рекурсивным DNS-резолвером.

Выпустите один локальный сертификат, чтобы создать центр сертификации, затем добавьте /var/lib/dnsbox/ca/root.crt в хранилище доверенных центров сертификации каждого клиента. Не раскрывайте root.pem. Команда первоначальной настройки приведена в руководстве по развёртыванию.

Для бэкенда на 192.168.1.50 откройте https://192-168-1-50.home.arpa. Клиентам локальной сети нужен доступ к портам DNS и HTTPS сервера DNSBox, а DNSBox — к HTTP-порту бэкенда.

Настройка частной сети

Разверните собственный сервер с Let's Encrypt

Используйте домен или поддомен, которым вы управляете, и делегируйте его DNS-зону серверу имён DNSBox. Зону может обслуживать один узел; несколько узлов обеспечивают резервирование.

Для публичной проверки DNS-01 разрешите входящие соединения на UDP 53 и TCP 53, исходящие HTTPS-соединения и разрешение имён DNS. Входящий порт 80 не требуется. Порт 443 должен быть доступен только тем клиентам, для которых предназначен сервис.

HTTP-бэкенды в частной сети могут использовать сертификаты для имён хостов от общедоверенного центра сертификации, если проверка DNS-01 доступна публично. Явно разрешите эти бэкенды через --allowed-cidrs и настройте DNS и маршрутизацию для клиентов.

При использовании нескольких узлов настройте на каждом одинаковые список серверов имён и записи, а также взаимную аутентификацию TLS для репликации проверочных данных. Выпуск сертификата начнётся только после подтверждения этих данных всеми настроенными узлами.

Доступны архивы релиза для Linux, macOS и Windows. Установщик поддерживает --no-systemd для ручного запуска или использования другого менеджера процессов. Он не отключает системный DNS-резолвер.

Установка и настройка кластера

Сертификаты для ocserv и других сервисов

Публичный сервис не экспортирует свои закрытые ключи. Если вашему сервису нужны файлы сертификата, разверните собственный DNSBox с делегированной зоной, которой вы управляете.

Запустите --issue с именем хоста, содержащим закодированный IP-адрес и принадлежащим этой зоне. DNSBox сохранит цепочку сертификатов в формате PEM и закрытый ключ в <data-dir>/certs, затем завершит работу. Во время выпуска через ACME он обслуживает DNS, но оставляет HTTPS-порт 443 свободным.

Направьте это имя хоста непосредственно на свой сервис с помощью явной записи A/AAAA. Для ocserv настройте server-cert и server-key. HTTP-прокси DNSBox не реализует OpenConnect или DTLS.

Настройте продление сертификатов и перечитывание файлов вашим сервисом после их изменения. Однократная команда не продлевает сертификаты после завершения работы. Не запускайте два процесса DNSBox с одним каталогом данных.

Пример экспорта сертификата

Вопросы

Можно ли использовать частные IP-адреса с публичным сервисом?

Нет. Публичный прокси предназначен для разрешённых публичных бэкендов. Для частных адресов запустите собственный экземпляр с явным списком разрешённых CIDR.

Что произойдёт при смене IP-адреса?

IP-адрес — часть имени хоста. Для нового IP используйте новое имя; клиенты со старым именем по-прежнему будут обращаться к старому адресу.

Подтверждает ли DNSBox владение IP-адресом бэкенда?

DNS-01 подтверждает управление именем хоста в DNS. Эта проверка не подтверждает владение IP-адресом бэкенда или содержимым, которое он отдаёт.

Продлеваются ли сертификаты автоматически?

Работающий сервис DNSBox продлевает сертификаты, которыми управляет. Для экспортированных сертификатов нужно настроить продление и перечитывание файлов использующим их сервисом.

Что будет, если бэкенд недоступен?

DNS и TLS могут продолжать работать, но прокси не сможет вернуть содержимое приложения. Проверьте, принимает ли бэкенд HTTP-соединения, а также его межсетевой экран и сетевую доступность.

Где сообщить о проблеме?

Создайте issue на GitHub, указав версию DNSBox, режим развёртывания и сообщения об ошибках, относящиеся к проблеме. Удалите закрытые ключи, токены и другие секретные данные.

Issues на GitHub

Техническая справка

Справка по настройкам

Исходный код