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

Jump to content

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

From ArchWiki

Ссылки по теме

- Domain name resolution (Русский)

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

Categories:

- Domain Name System (Русский)
- Encryption (Русский)

Hidden categories:

- Pages or sections flagged with Template:Accuracy
- Pages or sections flagged with Template:Expansion

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