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

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи Dnscrypt-proxy. Дата последней синхронизации: 13 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

dnscrypt-proxy — это DNS-прокси с поддержкой зашифрованных протоколов DNS over HTTPS и DNSCrypt, что позволяет предотвратить атаки «человек посередине» и подслушивание. dnscrypt-proxy также совместим с DNSSEC.

Установка

Установите пакет dnscrypt-proxy.

Настройка

Запуск

Примечание: Хотя есть два способа запустить прокси, апстрим рекомендует использовать service.[1][2]

Служба может быть запущена одним из двух взаимоисключающих способов (т.е. только один из этих двух юнитов может быть включен):

  1. С помощью systemd-службы dnscrypt-proxy.service.
    • Тогда должна быть настроена опция listen_addresses (напр. listen_addresses = ['127.0.0.1:53', '[::1]:53']) в файле конфигурации.
  2. Или с помощью сокетной активации через 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"