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

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

Модератор: sergey

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

Сообщение sergey » 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. Разрешаем автоматический запуск сервиса dnscrypt-proxy
    Код: выделить все
    systemctl enable dnscrypt-proxy.service
  3. Поскольку на сервере запущен BIND, то для изменения IP, который будет прослушивать dnscrypt, можно будет поменять в файле инициализации сокета
    Код: выделить все
    e /lib/systemd/system/dnscrypt-proxy.socket

    Код: выделить все
    [Unit]
    Description=DNSCrypt-proxy socket
    Documentation=https://github.com/jedisct1/dnscrypt-proxy/wiki
    # старт сервиса после запуска сетевых интерфейсов
    After=network-online.target
    [Socket]
    ListenStream=127.0.0.1:5353
    ListenStream=[::1]:53
    ListenDatagram=127.0.0.1:5353
    ListenDatagram=[::1]:53
    NoDelay=true
    DeferAcceptSec=1
    [Install]
    WantedBy=sockets.target
  4. Перечитываем конфигурацию служб systemd после внесения изменений на предыдущем шаге
    Код: выделить все
    systemctl daemon-reload
  5. Запускаем сервис dnscrypt-proxy
    Код: выделить все
    systemctl start dnscrypt-proxy
  6. Проверяем статус сервиса
    Код: выделить все
    systemctl status dnscrypt-proxy
Включаем передачу трафика на петлевой интерфейс
Код: выделить все
$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



 Исключение запросов к локальному 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
Для желающих отблагодарить
SB: 4274320029755744
QIWI: +79175241450
Аватар пользователя
sergey
Администратор
 
Сообщений: 132
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

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

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

cron