Dnscrypt — Проксирование dns-трафика.

Установка, настройка, эксплуатация.

Модератор: ROOT

Dnscrypt — Проксирование dns-трафика.

Сообщение ROOT » 10 июн 2019, 13:48

Оглавление


Темы
 Dnscrypt-proxy функциональность 
 В чем разница между DNSCrypt, DNSSEC, DNS over TLS/HTTPS? 
 Установка Dnscrypt 
 Исключение запросов к локальному DNS-серверу из проксирования 
Дополнительные материалы
TOR
Wake on Lan: Удалённое включение компьютера
Синхронизация времени
OpenVPN: Открытая виртуальная частная сеть
BIND — DNS-сервер
ISCSI — Транспортный протокол для SCSI
QUAGGA — Протоколы динамической маршрутизации


 Dnscrypt-proxy функциональность 
  • шифрования dns-трафика,
  • проксирование dns-запросов,
  • Направление запросов для определенных доменов (по правилам) на определённый список DNS-серверов (forwarding),
  • Кэширование dns-запросов,
  • Блокировка на основе шаблонов (черные списки),
  • Белый список на основе шаблона (обход черных списков),
  • Ограничение доступа по времени,
  • Поддержка передачи своего трафика через прокси (SOCKS, HTTP/HTTPS proxy)

 В чем разница между DNSCrypt, DNSSEC, DNS over TLS/HTTPS? 

  • DNSCrypt может работать по UDP и TCP. Подключение на порт 443. Для шифрования используется собственный протокол, который отличается от HTTPS. Может быть легко выделен с помощью DPI. Это скорее черновик, который тестировали до внедрения DNS over TLS/HTTPS, так как он не имеет RFC, то есть не является официальным стандартом интернета. Вероятнее всего, в скором, времени он будет полностью вытеснен последними.
  • DNS over TLS (DoT) — TCP-подключение происходит на порт 853, внутри тоннеля передается обычный DNS-запрос. Провайдер видит, что это DNS запрос но не может в него вмешаться. При прочих равных, в DNS over TLS должно быть чуть меньше накладных расходов на каждый запрос, чем в over HTTPS.
  • DNS over HTTP (DoH) — TCP-подключение на порт 443, подобно обычному HTTPS. Внутри другой формат запроса, с HTTP-заголовками. Однако для провайдера такой запрос будет виден как обычное HTTPS-подключение. Полагаю, этот протокол был придуман на случай, когда DNS-запросы к чужим серверам будут заблокированы, чтобы маскировать под обычный веб трафик. А также, чтобы браузеры могли сами резолвить домены и не создавать при этом аномальный трафик.

    По сути, DNS over HTTPS и over TLS — одно и то же, с немного отличающемся форматом запросов. Оба эти протокола приняты в качестве стандартов и имеют RFC. Вероятнее всего, в ближайшее время мы увидим массовое распространение их обоих.

  • DNSSEC — протокол цифровой подписи DNS-записей. Не имеет отношения к шифрованию, так как все запросы передаются в открытом виде. Может работать как по старому классическому протоколу DNS, то есть UDP/TCP на порту 53, так и внутри DNS over TLS/HTTPS. Целью DNSSEC является подтверждение подлинности DNS-записи. Владелец домена может добавить публичный ключ на корневые сервера своей доменной зоны и подписывать все записи на мастер NS-серверах. По сути, к каждой DNS записи, например, A-записи или MX-записи, добавляется еще одна запись типа RRSIG, содержащая подпись. Процедура валидации DNSSEC на рекурсивном резолвере позволяет установить, действительно эта запись была создана владельцем домена.

 Установка Dnscrypt 
  1. Устанавливаем dnscrypt
    Код: выделить все
    dnf install dnscrypt-proxy
  2. Модифицируем сервис
    Файлы сервиса и сокета написаны немного не правильно изначально и при смене интерфейса с loopback на любой иной socket отказывается запускаться при запуске системы. Во избежание проблем с запуском нужно править файлы
    Код: выделить все
    cp /usr/lib/systemd/system/dnscrypt-proxy.service /etc/systemd/system/

    Чтобы при обновлении пакета не заменялся модифицированный нами файл нужно скопировать или создать dnscrypt-proxy.service в каталог /etc/systemd/system/.
    cat /etc/systemd/system/dnscrypt-proxy.service
    Код: выделить все
    [Unit]
    Description=DNSCrypt-proxy client
    Documentation=https://github.com/jedisct1/dnscrypt-proxy/wiki
    ## Commenting 1 line
    #Requires=dnscrypt-proxy.socket
    After=network-online.target
    Wants=network-online.target
    Before=nss-lookup.target
    Wants=nss-lookup.target

    [Service]
    NonBlocking=true
    ExecStart=/usr/bin/dnscrypt-proxy --config /etc/dnscrypt-proxy/dnscrypt-proxy.toml

    DynamicUser=yes
    ProtectControlGroups=yes
    ProtectKernelModules=yes
    ProtectKernelTunables=yes

    CacheDirectory=dnscrypt-proxy
    ConfigurationDirectory=dnscrypt-proxy
    LogsDirectory=dnscrypt-proxy
    RuntimeDirectory=dnscrypt-proxy

    ## Add 2 lines. Allow binding to IP_ADDRESS:53 as non-root user without the .socket unit
    CapabilityBoundingSet=CAP_NET_BIND_SERVICE
    AmbientCapabilities=CAP_NET_BIND_SERVICE

    [Install]
    ## Commenting 1 line
    #Also=dnscrypt-proxy.socket
    WantedBy=multi-user.target
  3. Перечитываем конфигурацию служб systemd после внесения изменений на предыдущем шаге
    Код: выделить все
    systemctl daemon-reload
  4. Меняем в файле /etc/dnscrypt-proxy/dnscrypt-proxy.toml директиву:
    Код: выделить все
    listen_addresses = []

    указывая там IP интерфейса и порт
    Код: выделить все
    listen_addresses = ['195.0.1.33:53']
  5. Стартуем dnscrypt-proxy и разрешаем автоматический запуск службы
    Код: выделить все
    systemctl enable --now dnscrypt-proxy.service
  6. Проверяем статус службы dnscrypt-proxy
    Код: выделить все
    systemctl status dnscrypt-proxy.service


 Исключение запросов к локальному DNS-серверу из проксирования 
Данная ситуация возможна при наличии собственного DNS-сервера, который обслуживает локальную сеть. В этом случае IP dnscrypt-proxy используется в качестве DNS-сервера, а все запросы к локальному домену перенаправляются на DNS-сервер обслуживающий локальную сеть. Для пересылки запросов нужно раскомментировать строку
Код: выделить все
forwarding_rules = '/etc/dnscrypt-proxy/forwarding-rules.txt'

и отредактировать файл forwarding-rules.txt под параметры локальных DNS-зон
Код: выделить все
## Перенаправляем запросы для free-adm.ru и *.free-adm.ru на DNS-сервер 127.0.0.1
free-adm.ru     127.0.0.1
## Перенаправляем запросы для обратной зоны 1.0.195.in-addr.arpa на DNS-сервер 127.0.0.1
1.0.195.in-addr.arpa 127.0.0.1
test.ru         127.0.0.1
10.in-addr.arpa 127.0.0.1

==============
Включаем передачу трафика на петлевой интерфейс
Код: выделить все
$EDITOR /etc/sysctl.d/network.conf
# включаем пересылку пакетов на LOCALHOST
net.ipv4.conf.enp5s0.route_localnet=1

Применение внесённых изменений
Код: выделить все
sysctl -p /etc/sysctl.d/network.conf

Настраиваем перенаправление 53 порта tcp/udp на адрес 127.0.0.1 и порт 5353
Код: выделить все
firewall-cmd --list-forward-ports
port=53:proto=tcp:toport=5353:toaddr=127.0.0.1
port=53:proto=udp:toport=5353:toaddr=127.0.0.1
Для желающих отблагодарить
SB: 4274320029755744
QIWI: +79175241450
Аватар пользователя
ROOT
Администратор
 
Сообщений: 136
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron