dnscrypt-proxy (Русский)

Ссылки по теме
Domain name resolution (Русский)
Состояние перевода:
На этой странице представлен перевод статьи
Dnscrypt-proxy
. Дата последней синхронизации: 13 сентября 2021. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
dnscrypt-proxy
— это DNS-прокси с поддержкой зашифрованных протоколов
DNS over HTTPS
и
DNSCrypt
, что позволяет предотвратить атаки «человек посередине» и подслушивание.
dnscrypt-proxy
также совместим с
DNSSEC
.
Установка
Установите
пакет
dnscrypt-proxy
.
Настройка
Запуск
Примечание
Хотя есть два способа запустить прокси, апстрим рекомендует использовать
service
.
[1]
[2]
Служба может быть
запущена
одним из двух взаимоисключающих способов (т.е. только один из этих двух юнитов может быть
включен
):
С помощью systemd-службы
dnscrypt-proxy.service
.
Тогда должна быть настроена опция
listen_addresses
(напр.
listen_addresses = ['127.0.0.1:53', '[::1]:53']
) в файле конфигурации.
Или с помощью сокетной активации через
dnscrypt-proxy.socket
.
Тогда опция
listen_addresses
должна быть пустой (напр.
listen_addresses = [ ]
) в файле конфигурации, так как systemd сам позаботится о настройке сокета.
Выберите распознаватели
Если оставить опцию
server_names
закомментированной в файле
/etc/dnscrypt-proxy/dnscrypt-proxy.toml
, то
dnscrypt-proxy
выберет самый быстрый сервер из источников, прописанных в секции
[sources]
[3]
. Эти списки скачиваются, проверяются и автоматически обновляются
[4]
. Таким образом, ручная настройка определённого набора серверов необязательна.
Чтобы вручную задать набор используемых серверов, раскомментируйте опцию
server_names
в файле
/etc/dnscrypt-proxy/dnscrypt-proxy.toml
и пропишите в ней один или несколько серверов. Например, чтобы использовать серверы Cloudflare:
server_names = ['cloudflare', 'cloudflare-ipv6']
Полный список распознавателей (resolvers) расположен на
странице апстрима
или
Github
. Если
dnscrypt-proxy
успешно запускался ранее в системе, список также будет расположен в файле
/var/cache/dnscrypt-proxy/public-resolvers.md
. Посмотрите описание серверов, которые проверяют
DNSSEC
, не ведут логи и не занимаются цензурой. Эти требования могут быть настроены глобально с помощью опций
require_dnssec
,
require_nolog
и
require_nofilter
.
Отключите любые службы, слушающие порт 53
Совет
Если вы используете
#Unbound
как локальный кэш DNS, вы можете пропустить этот раздел, так как
unbound
запускается на порту 53 по умолчанию.
Чтобы проверить наличие программ, использующих порт 53, выполните:
$ ss -lp 'sport = :domain'
The factual accuracy of this article or section is disputed.
Reason:
systemd-resolved listens on 127.0.0.53:53, it should not affect dnscrypt-proxy that listens on 127.0.0.1:53. (Discuss in
Talk:Dnscrypt-proxy (Русский)
)
Если вывод содержит что-то помимо строки с названием столбцов, вам нужно отключить все службы, использующие порт 53. Один из распространённых виновников —
systemd-resolved.service
(
NetworkManager#Unit dbus-org.freedesktop.resolve1.service not found
), но другие менеджеры сети также могут иметь аналогичные компоненты. Можно продолжать, если приведённая выше команда не выводит ничего кроме этой строки:
Netid               State                 Recv-Q                Send-Q                                 Local Address:Port                                   Peer Address:Port
Измените resolv.conf
This article or section needs expansion.
Reason:
Explain what the options mean. (Discuss in
Talk:Dnscrypt-proxy (Русский)
)
Измените файл
resolv.conf
и замените ваш текущий адрес распознавателя на
localhost
с опциями
[5]
:
nameserver ::1
nameserver 127.0.0.1
options edns0 single-request-reopen
Другие программы могут перезаписывать этот файл; подробнее см.
Domain name resolution (Русский)#Перезапись файла /etc/resolv.conf
.
Запустите systemd-службу
Наконец,
запустите/включите
юнит
dnscrypt-proxy.service
или
dnscrypt-proxy.socket
в зависимости от выбранного вами ранее способа запуска.
Проверьте работоспособность dnscrypt-proxy
Откройте в браузере
DnsLeakTest
и выполните «Extended test». Если результат отображает серверы, которые вы выбрали в файле конфигурации, это означает, что dnscrypt-proxy работает; в противном случае что-то пошло не так.
Советы и рекомендации
Настройка локального кэша DNS
Совет
dnscrypt-proxy
может сам кэшировать записи, не полагаясь на другие программы. Эта возможность включена по умолчанию в строке
cache = true
в файле конфигурации
dnscrypt-proxy
.
Если встроенная возможность кэширования не используется, рекомендуется запускать
dnscrypt-proxy
как сервер пересылки (forwarder) для локального кэша DNS; иначе любой запрос будет приводить к его отправке на вышестоящий распознаватель. Должна работать любая кэширующая программа. В таком случае вам нужно настроить её в дополнение к
dnscrypt-proxy
.
Изменение порта
В случае пересылки запросов из локального кеша DNS
dnscrypt-proxy
должен слушать порт отличный от стандартного
53
, так как DNS-кэш сам будет слушать этот порт и обращаться к
dnscrypt-proxy
на другом порту. В этом разделе для примера используется порт
53000
(так как порт больше 1024,
dnscrypt-proxy
необязательно запускать от имени root).
Есть два метода изменения порта в зависимости от того, каким способом вы запускаете службу:
Сокет
Измените
dnscrypt-proxy.socket
, добавив следующее:
[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:53000
ListenStream=[::1]:53000
ListenDatagram=127.0.0.1:53000
ListenDatagram=[::1]:53000
Когда запрос перенаправляется из DNS-кэша на порт
53000
,
dnscrypt-proxy.socket
автоматически запустит
dnscrypt-proxy.service
.
Служба
Измените опцию
listen_addresses
в файле
/etc/dnscrypt-proxy/dnscrypt-proxy.toml
:
listen_addresses = ['127.0.0.1:53000', '[::1]:53000']
Примеры настройки локального кэша DNS
Приведённые настройки должны работать с
dnscrypt-proxy
, предполагая, что он слушает порт
53000
.
Unbound
Настройте
Unbound
как вам нужно (см.
Unbound (Русский)#Локальный DNS сервер
) и добавьте следующие строки в конце секции
server
в файле
/etc/unbound/unbound.conf
:
do-not-query-localhost: no
forward-zone:
  name: "."
  forward-addr: ::1@53000
  forward-addr: 127.0.0.1@53000
Совет
Если вы настраиваете сервер, добавьте
interface: 0.0.0.0@53
и
access-control:
ваша-сеть
/
маска-подсети
allow
в секции
server:
, чтобы другие устройства могли подключиться к этому серверу. Клиенты должны настраиваться опцией
nameserver
адрес-вашего-сервера
в файле
/etc/resolv.conf
.
Перезапустите
unbound.service
для применения изменений.
dnsmasq
Настройте dnsmasq как
локальный кэш DNS
. Базовая конфигурация для работы с
dnscrypt-proxy
:
/etc/dnsmasq.conf
no-resolv
server=::1#53000
server=127.0.0.1#53000
listen-address=::1,127.0.0.1
Если вы настроили
dnscrypt-proxy
на использование распознавателя с включенной проверкой
DNSSEC
, включите её и в dnsmasq тоже:
/etc/dnsmasq.conf
conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec
Перезапустите
dnsmasq.service
для применения изменений.
pdnsd
Установите
pdnsd
. Базовая конфигурация для работы с
dnscrypt-proxy
:
/etc/pdnsd.conf
global {
    perm_cache = 1024;
    cache_dir = "/var/cache/pdnsd";
    run_as = "pdnsd";
    server_ip = 127.0.0.1;
    status_ctl = on;
    query_method = udp_tcp;
    min_ttl = 15m;       # Хранить кэшированные записи не менее 15 минут.
    max_ttl = 1w;        # Не более 1 недели.
    timeout = 10;        # Глобальный таймаут (10 секунд).
    neg_domain_pol = on;
    udpbufsize = 1024;   # Повышение лимита размера UDP-сообщений.
}

server {
    label = "dnscrypt-proxy";
    ip = 127.0.0.1;
    port = 53000;
    timeout = 4;
    proxy_only = on;
}

source {
    owner = localhost;
    file = "/etc/hosts";
}
Перезапустите
pdnsd.service
для применения изменений.
Включение EDNS0
This article or section needs expansion.
Reason:
Name the advantages/motivation for enabling this. (Discuss in
Talk:Dnscrypt-proxy (Русский)
)
EDNS позволяет, помимо других вещей, разрешить указать клиенту, насколько большим может быть UDP-ответ.
Добавьте следующую строку в
/etc/resolv.conf
:
options edns0
Проверка EDNS0
Используйте
DNS Reply Size Test Server
, запустите утилиту
drill
для отправки TXT-запроса для адреса
rs.dns-oarc.net
:
$ drill rs.dns-oarc.net TXT
Если
EDNS0
поддерживается, «answer section» будет содержать примерно такой вывод:
rst.x3827.rs.dns-oarc.net.
rst.x4049.x3827.rs.dns-oarc.net.
rst.x4055.x4049.x3827.rs.dns-oarc.net.
"2a00:d880:3:1::a6c1:2e89 DNS reply size limit is at least 4055 bytes"
"2a00:d880:3:1::a6c1:2e89 sent EDNS buffer size 4096"