DoH#
Добавлено в версии 1.12.0.
Реализует сервер DNS over HTTPS (DoH) в соответствии с RFC 8484. Принимает DNS-запросы, передаваемые по HTTP/HTTPS, и проксирует их к группе DNS-серверов по UDP или TCP.
DoH-клиент отправляет DNS-запрос либо методом GET, передавая
DNS-сообщение в закодированном Base64URL виде в аргументе строки запроса
dns, либо методом POST, передавая необработанное DNS-сообщение в
теле запроса. В обоих случаях тип содержимого DNS-сообщения —
application/dns-message.
Принятый модулем DNS-ответ с ненулевым значением RCODE возвращается
клиенту со статусом 200 (OK). Значение RCODE сохраняется в DNS-сообщении
и не приводит к повторной попытке по условию invalid_response директивы
doh_next_upstream.
Директива doh_transport определяет использование UDP или TCP для передачи запросов. Для защиты от подмены ответов сторонним источником модуль подставляет случайный идентификатор запроса, отправляемого DNS-серверу, и восстанавливает исходный идентификатор клиента в ответе.
Примечание
Эта рандомизация идентификатора запроса использует некриптографический генератор и обеспечивает лишь ограниченную защиту; используйте DNS-серверы, доступные в защищенной доверенной сети, как это рекомендуется для директивы resolver.
Поле заголовка ответа Cache-Control формируется на основе минимального
TTL из ответа: оно устанавливается в max-age=<ttl> либо в
no-store, если пригодное для кэширования значение TTL определить не
удалось.
При сборке из исходного кода модуль можно отключить с
помощью параметра сборки
Проксирование запросов DNS over HTTPS к группе DNS-серверов: Задает локальный IP-адрес с необязательным портом, который будет использоваться
в исходящих соединениях с DNS-сервером. В значении параметра можно использовать
переменные. Специальное значение Параметр Для работы параметра обычно требуется запускать рабочие процессы Angie с
привилегиями суперпользователя. В Linux это не требуется, так как
при указании параметра Задает По умолчанию http, server, location Задает таймаут для установления соединения с DNS-сервером. По умолчанию размер одной страницы памяти операционной системы http, server, location Ограничивает размер DNS-запроса, принимаемого от клиента. Значение
По умолчанию http, server, location Определяет, в каких случаях запрос будет передан следующему серверу в группе
upstream: произошла ошибка при установлении соединения с сервером, передаче ему
запроса или чтении ответа; произошел таймаут при установлении соединения с сервером, передаче ему
запроса или чтении ответа; сервер вернул некорректный DNS-ответ; запрещает передачу запроса следующему серверу. Передача запроса следующему серверу может быть ограничена по
количеству попыток и по
времени. По умолчанию http, server, location Ограничивает время, в течение которого запрос может быть передан
следующему серверу в группе.
Значение По умолчанию http, server, location Ограничивает число попыток передачи запроса
следующему серверу в группе.
Значение Задает адрес DNS-сервера, которому проксируются DNS-запросы. Адрес может быть
доменным именем или IP-адресом с указанием порта: или в виде группы серверов: Запросы передаются серверу через UDP или TCP в соответствии с директивой
doh_transport. В одной локации может быть указана только одна директива
doh_pass. Задает таймаут при чтении ответа DNS-сервера. Таймаут устанавливается не на всю
передачу ответа, а только между двумя операциями чтения. Если по истечении
этого времени DNS-сервер ничего не передаст, соединение закрывается. Задает таймаут при передаче запроса DNS-серверу. Таймаут устанавливается не на
всю передачу запроса, а только между двумя операциями записи. Если по истечении
этого времени DNS-сервер ничего не получит, соединение закрывается. По умолчанию http, server, location Включает параметр сокета По умолчанию http, server, location Выбирает транспортный протокол, используемый для передачи DNS-запросов
DNS-серверу: если в кэше соединений keepalive группы серверов есть
свободное TCP-соединение, запрос отправляется по нему (TCP); в противном
случае он сначала отправляется по UDP, а при усеченном ответе сервера
(установлен флаг запросы отправляются только по UDP; усеченный ответ считается ошибкой, а
запрос не повторяется по TCP; запросы отправляются только по TCP.--without-http_doh_module.
В пакетах и образах из наших репозиториев модуль
включен в сборку.Пример конфигурации#
http {
upstream dns_upstream {
server 127.0.0.1:53;
}
server {
listen 443 ssl;
server_name dns.example.com;
ssl_certificate dns.example.com.crt;
ssl_certificate_key dns.example.com.key;
location /dns-query {
doh_pass dns_upstream;
}
}
}
Директивы#
doh_bind#
off отменяет
действие унаследованной с более высокого уровня конфигурации директивы doh_bind,
позволяя системе самостоятельно выбирать локальный IP-адрес и порт.transparent позволяет задать нелокальный IP-адрес, который
будет использоваться в исходящих соединениях с DNS-сервером, например, реальный
IP-адрес клиента:doh_bind $remote_addr transparent;
transparent рабочие процессы наследуют
capability CAP_NET_RAW от главного процесса.doh_buffer_size#
размер буфера, в который читается ответ, получаемый от
DNS-сервера. Значение не может быть меньше 512 байт.doh_connect_timeout#
doh_connect_timeout время;doh_connect_timeout 60s;doh_max_size#
doh_max_size размер;размера должно быть не меньше 12 байт. Запрос отклоняется, если его
он меньше 12 байт (это размер заголовка DNS-сообщения) или превышает
размер.doh_next_upstream#
doh_next_upstream error | timeout | invalid_response | off ...;doh_next_upstream error timeout;errortimeoutinvalid_responseoffdoh_next_upstream_timeout#
doh_next_upstream_timeout время;doh_next_upstream_timeout 0;0 отключает это ограничение.doh_next_upstream_tries#
doh_next_upstream_tries число;doh_next_upstream_tries 0;0 отключает это ограничение.doh_pass#
doh_pass 127.0.0.1:53;
doh_pass dns_upstream;
doh_read_timeout#
doh_send_timeout#
doh_socket_keepalive#
doh_socket_keepalive on | off;doh_socket_keepalive off;SO_KEEPALIVE для исходящих соединений с
DNS-сервером. При указании off действуют системные настройки сокета.doh_transport#
doh_transport tcp | udp | auto;doh_transport auto;autoTC) повторяется по TCP;udptcp