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

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Состояние перевода: На этой странице представлен перевод статьи 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'

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

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

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

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

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

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"