Вопрос или проблема
Я пытаюсь настроить bind9
в контейнере за nginx обратным прокси
.
Основные DNS-запросы работают нормально, но у меня возникают проблемы с DoH…
Прямо сейчас dig +https @BASE_URL gnu.org
выдает мне эту ошибку:
;; Соединение с $IP#443($IP) для gnu.org не удалось: ошибка TLS.
;; не удалось достичь серверов
curl $BASE_URL
: curl: (1) Получен HTTP/0.9, когда это не разрешено
curl --http0.9 $BASE_URL
: тайм-аут.
/etc/nginx/conf.d/bind9.conf
server {
listen 80;
listen [::]:80;
server_name $BASE_URL;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name $BASE_URL;
ssl_certificate /etc/letsencrypt/live/$BASE_URL/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$BASE_URL/privkey.pem;
location / {
proxy_pass http://bind9:80;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection $http_connection;
proxy_redirect off;
}
}
/etc/bind/named.conf.options
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { any; };
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
listen-on port 80 tls none http default { any; };
listen-on-v6 port 80 tls none http default { any; };
dnssec-validation auto;
};
Dockerfile
FROM docker.io/debian:12-slim
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bind9 \
&& rm -rf /var/lib/apt/lists/*
COPY named.conf.options /etc/bind/
VOLUME /var/cache/bind/
EXPOSE 53/tcp 53/udp
RUN chown -R bind:bind \
/etc/bind/ \
/var/cache/bind/
CMD ["/usr/sbin/named", "-f", "-d1", "-u", "bind"]
Есть идеи?
Спасибо.
Если вы видите эту ошибку, возможно, обратный прокси NGINX не настроен на http/2.
Вы можете включить его, просто добавив http2
в директиву listen
в блоке server
nginx:
listen 443 ssl http2;
listen [::]:443 ssl http2;
Ответ или решение
Настройка BIND9 за NGINX Reverse Proxy с поддержкой DoH (DNS over HTTPS)
Ваша задача — настроить BIND9 (DNS-сервер) в контейнере, который будет работать за обратным прокси-сервером NGINX с поддержкой DNS over HTTPS (DoH). Вы столкнулись с проблемами при выполнении запросов, и для их устранения необходимо внимательно проанализировать вашу конфигурацию и внести некоторые изменения.
Проблема
Вы получаете ошибки TLS при попытке выполнить запросы с помощью dig
, а также столкнулись с проблемами при использовании curl
. Это может быть связано с неправильной настройкой NGINX или BIND9, особенно в отношении поддержки DoH и обработки HTTP/2.
Конфигурация NGINX
Для корректной работы NGINX с DoH, важно убедиться, что он слушает на порту 443 с поддержкой SSL и HTTP/2. Вам необходимо обновить конфигурацию в файле /etc/nginx/conf.d/bind9.conf
. Внесите следующие изменения:
server {
listen 80;
listen [::]:80;
server_name $BASE_URL;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; # Добавьте http2
listen [::]:443 ssl http2; # Добавьте http2
server_name $BASE_URL;
ssl_certificate /etc/letsencrypt/live/$BASE_URL/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$BASE_URL/privkey.pem;
location /dns-query { # Уточняем путь для DoH
proxy_pass http://bind9:80; # Измените на нужную конфигурацию
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection $http_connection;
proxy_redirect off;
}
}
Обратите внимание, что в блоке location
указан путь /dns-query
, который по умолчанию используется для DoH. Это путь, который будет ожидать BIND9.
Конфигурация BIND9
Также важно убедиться в том, что BIND9 готов принимать запросы по порту 80 для DoH. Проверьте файл конфигурации /etc/bind/named.conf.options
:
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { any; };
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
listen-on port 80 tls none http default { any; }; # Убедитесь, что это корректно
listen-on-v6 port 80 tls none http default { any; }; # Убедитесь, что это корректно
dnssec-validation auto;
};
Проверьте соединение
После внесения необходимых изменений перезапустите NGINX и BIND9:
docker restart <имя_контейнера_bind9>
service nginx restart
Затем проверьте конфигурацию с помощью dig
и curl
:
dig +https @BASE_URL gnu.org
curl -i https://$BASE_URL/dns-query
Убедитесь, что запросы обрабатываются корректно и возвращают ответы без ошибок.
Заключение
Ваше решение требует корректной настройки как NGINX, так и BIND9, чтобы обеспечить бесперебойную работу DNS over HTTPS. Убедитесь, что у вас есть все необходимые сертификаты для SSL, и что они корректно настроены в конфигурации NGINX. После внесения всех исправлений и перезапуска сервисов, должно быть возможно успешно выполнять DNS запросы через DoH.
Если, несмотря на эти настройки, проблемы сохраняются, возможно, стоит проверить логи NGINX и BIND9 для выявления дополнительных сведений.