-- Leo's gemini proxy
-- Connecting to byzoni.org:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini;lang=ru-RU
2024-01-15
DNSCrypt - это протокол, используемый для повышения безопасности DNS путем шифрования соединений между DNS-клиентом и DNS-резольвером. Он помогает пользователям общаться в Интернете в частном порядке, не беспокоясь о безопасности, предотвращая подмену DNS с помощью аутентификации. DNSCrypt использует криптографические подписи для проверки того, что ответы исходят от выбранного DNS-резольвера, и гарантирует, что они не были подделаны при передаче. DNSCrypt доступен для нескольких платформ, таких как macOS, Android, Linux и Windows, а также для маршрутизаторов.
Основными особенностями и преимуществами DNSCrypt являются:
Снижение задержки за счет кэширования ответов и отказа от запроса IPv6-адресов в сетях, использующих только IPv4.
Заставляет трафик использовать TCP, чтобы направить его через туннели только с TCP или Tor.
Локально блокирует рекламу, трекеры, вредоносное ПО, спам и любые сайты, чьи доменные имена или IP-адреса соответствуют заданному вами набору правил.
Позволяет просматривать DNS-трафик, исходящий из вашей сети, в режиме реального времени и обнаруживать скомпрометированные узлы и приложения, звонящие домой.
Предотвращает утечку запросов к локальным зонам.
Поддерживаются протоколы пересылки DNSCrypt v2, Anonymized DNSCrypt и DNS-over-HTTP (DoH), которые могут обслуживаться на одном и том же порту, обычно порту 443.
Существует несколько способов установки зашифрованного DNS-сервера (DNSCrypt). К ним относятся:
Использование предварительно скомпилированных двоичных файлов
компиляция из исходных текстов
Использование Docker
В этом руководстве мы узнаем, как установить зашифрованный DNS-сервер (DNSCrypt), используя предварительно скомпилированный двоичный файл x86_64. К сожалению, существуют двоичные файлы для систем Linux и Windows.
Для Linux вам нужна 64-битная система Debian/Ubuntu, тогда действуйте.
Сначала создайте каталог для DNSCrypt.
sudo mkdir -p /opt/encrypted-dns
В каталоге загрузите последнюю версию https://github.com/DNSCrypt/encrypted-dns-server/releases/tag/0.9.13 прекомпилированного пакета. На момент создания этой документации последней версией была 0.9.13.
Загрузите двоичный файл командой:
VER=$(curl -s https://api.github.com/repos/DNSCrypt/encrypted-dns-server/releases/latest|grep tag_name|cut -d '"' -f 4) wget https://github.com/DNSCrypt/encrypted-dns-server/releases/download/$VER/encrypted-dns_${VER}_amd64.deb
После загрузки установите пакет:
sudo apt install -f ./encrypted-dns_*_amd64.deb
Образец вывода:
Selecting previously unselected package encrypted-dns. (Reading database ... 187584 files and directories currently installed.) Preparing to unpack encrypted-dns_0.9.13_amd64.deb ... Unpacking encrypted-dns (0.9.13) ... Setting up encrypted-dns (0.9.13) ...
После установки Encrypted DNS Server(DNSCrypt) имеет пример конфигурационного файла, хранящегося по адресу **/usr/share/doc/encrypted-dns/**. Мы скопируем этот файл конфигурации в созданную нами директорию:
sudo cp /usr/share/doc/encrypted-dns/example-encrypted-dns.toml /opt/encrypted-dns/encrypted-dns.toml
Теперь мы можем соответствующим образом изменить этот файл конфигурации.
sudo nano /opt/encrypted-dns/encrypted-dns.toml
Здесь измените параметр `listen_addrs` на ваш IP-адрес, который доступен клиентам (это может быть публичный IP, если вы запускаете сервер в облаке).
listen_addrs = [ { local = "0.0.0.0:443", external = "Your_ipv4_address:443" }, ## { local = "[::]:443", external = "[Your_ipv6_address]:443" } ]
Вам также может потребоваться изменить параметр `upstream_addr`, чтобы он указывал на ваш внутренний рекурсивный DNS-сервер, или оставить его как есть. Установите `provider_name`
## Upstream DNS server and port upstream_addr = "1.1.1.1:53" dnscrypt] ## Provider name (with or without the `2.dnscrypt-cert.` prefix) provider_name = "example.com" ## Does the server support DNSSEC? dnssec = true ## Does the server always returns correct answers (no filtering, including ad-blocking)? no_filters = true ## Set to `true` if the server doesn't keep any information that can be used to identify users no_logs = true
После того как конфигурация выполнена, нам необходимо создать файл службы systemd для DNSCrypt. Это можно сделать с помощью команды:
sudo bash -c 'cat << EOF > /etc/systemd/system/encrypted-dns.service # /etc/systemd/system/dnscrypt-server.service [Unit] Description=DNSCrypt v2 server ConditionFileIsExecutable=/usr/bin/encrypted-dns After=syslog.target network-online.target [Service] StartLimitInterval=5 StartLimitBurst=10 ExecStart=/usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml WorkingDirectory=/opt/encrypted-dns/ Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF'
Запустите и включите службу:
sudo systemctl daemon-reload sudo systemctl enable --now encrypted-dns
Проверьте, запущена ли служба:
$ systemctl status encrypted-dns ● encrypted-dns.service - DNSCrypt v2 server Loaded: loaded (/etc/systemd/system/encrypted-dns.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-11-27 13:34:33 EAT; 5s ago Main PID: 376198 (encrypted-dns) Tasks: 6 (limit: 4575) Memory: 16.6M CGroup: /system.slice/encrypted-dns.service └─376198 /usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml Sad 27 13:34:33 dnscrypt.example.com systemd[1]: Started DNSCrypt v2 server. Sad 27 13:34:33 dnscrypt.example.com encrypted-dns[376198]: [WARN encrypted_dns] No state file found... creating a new provider key .... Sad 27 13:34:33 dnscrypt.example.com encrypted-dns[376198]: [INFO encrypted_dns] DNS Stamp: sdns://AQcAAAAAAAAADzg4Ljk5LjkyLjgxOjQ0MyBvFka8viUkAT9gkYMioJ5XjB>
Из приведенного выше результата можно сделать вывод, что сервер DNSCrypt установлен. В конце статуса службы мы видим DNS-штамп сервера DNSCrypt. Это кодирует все параметры, необходимые для подключения к безопасному DNS-серверу, в виде одной строки.
Теперь разрешите необходимые порты через брандмауэр:
sudo ufw allow 443 sudo ufw allow 53
После запуска сервера DNSCrypt нам нужно использовать его для запросов DNS. В этом случае нам необходимо установить DNSCrypt-клиент. Существует длинный список реализаций клиента DNSCrypt. В этом руководстве мы установим [DNSCrypt Proxy](https://dnscrypt.info/implementations/), который может находиться как на локальной, так и на удаленной системе.
Загрузите последнюю версию https://github.com/DNSCrypt/dnscrypt-proxy/releases клиента:
VER=$(curl -s https://api.github.com/repos/DNSCrypt/dnscrypt-proxy/releases/latest|grep tag_name|cut -d '"' -f 4) wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/$VER/dnscrypt-proxy-linux_x86_64-${VER}.tar.gz
После завершения извлеките архив:
tar xvf dnscrypt-proxy-linux_x86_64-${VER}.tar.gz cd linux-x86_64
Создайте файл конфигурации и откройте его для редактирования:
cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml nano dnscrypt-proxy.toml
В этом файле сделайте следующие настройки и задайте имена ваших серверов.
server_names = ['myserver']
В списке публичных резолверов https://dnscrypt.info/public-servers/ включено несколько провайдеров. В данном случае мы проигнорируем их и будем использовать пользовательский.
Далее удалите '#' в начале следующих строк и укажите DNS-штамп вашего сервера DNSCrypt
[static] [static.'myserver'] stamp = 'sdns://AQcAAAAAAAAAAAAQMi5kbnNjcnlwdC1jZXJ0Lg'
Не беспокойтесь о штампе DNS, поскольку его можно получить с помощью команды `sudo systemctl status encrypted-dns` на вашем сервере DNSCrypt.
Вы также можете задать список доменов, которые будут заблокированы:
[blocked_names] ## Path to the file of blocking rules (absolute, or relative to the same directory as the config file) blocked_names_file = 'blocked-names.txt' ....
В каталоге находится файл-образец, который можно скопировать и отредактировать по своему усмотрению:
sudo cp example-blocked-names.txt blocked-names.txt
После внесения изменений сохраните конфигурацию и запустите прокси-службу DNSCrypt:
sudo ./dnscrypt-proxy --config dnscrypt-proxy.toml
Образец вывода:
[2023-10-31 14:16:36] [NOTICE] dnscrypt-proxy 2.1.5 [2023-10-31 14:16:36] [NOTICE] Network connectivity detected [2023-10-31 14:16:36] [NOTICE] Now listening to 127.0.0.1:53 [UDP] [2023-10-31 14:16:36] [NOTICE] Now listening to 127.0.0.1:53 [TCP] [2023-10-31 14:16:36] [NOTICE] Service is not usable yet [2023-10-31 14:16:36] [NOTICE] Resolving server host [raw.githubusercontent.com] using bootstrap resolvers over udp [2023-10-31 14:16:36] [NOTICE] Source [public-resolvers] loaded [2023-10-31 14:16:36] [NOTICE] Service is not usable yet [2023-10-31 14:16:36] [NOTICE] Resolving server host [download.dnscrypt.info] using bootstrap resolvers over udp [2023-10-31 14:16:36] [NOTICE] Source [relays] loaded [2023-10-31 14:16:36] [NOTICE] Firefox workaround initialized [2023-10-31 14:16:36] [NOTICE] [myserver] OK (DNSCrypt) - rtt: 0ms [2023-10-31 14:16:36] [NOTICE] Server with the lowest initial latency: myserver (rtt: 0ms) [2023-10-31 14:16:36] [NOTICE] dnscrypt-proxy is ready - live servers: 1
Теперь вы готовы отправлять безопасные DNS-запросы с клиента на сервер DNSCrypt. Чтобы проверить, проходят ли все DNS-запросы через `127.0.0.1:53`, вам нужно открыть отдельный терминал и отредактировать файл `/etc/resolv.conf`, как показано на рисунке:
$ sudo nano /etc/resolv.conf nameserver 127.0.0.1 #options edns0 trust-ad search .
Выполните следующую команду, чтобы проверить, обрабатываются ли DNS-запросы с помощью DNSCrypt так, как ожидалось.
$ nslookup example.com Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: example.com Address: 93.184.216.34 Name: example.com Address: 2606:2800:220:1:248:1893:25c8:1946
Это свидетельствует о том, что трафик обрабатывается сервером DNSCrypt безопасно.
Мы также можем настроить эту службу на запуск в качестве системной службы:
sudo bash -c 'cat << EOF > /etc/systemd/system/encrypted-dns.service # /etc/systemd/system/dnscrypt-server.service [Unit] Description=DNSCrypt v2 server ConditionFileIsExecutable=/usr/bin/encrypted-dns After=syslog.target network-online.target [Service] StartLimitInterval=5 StartLimitBurst=10 ExecStart=/usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml WorkingDirectory=/opt/encrypted-dns/ Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF'
Скопируйте файлы в нужные каталоги:
sudo mkdir /opt/dnscrypt-proxy sudo cp ~/linux-x86_64/* /opt/dnscrypt-proxy/ sudo cp ~/linux-x86_64/dnscrypt-proxy /usr/local/bin
Остановите запущенную службу:
sudo killall -9 dnscrypt-proxy
Запустите службу dnscrypt-proxy:
sudo systemctl enable --now dnscrypt-proxy
Проверьте, запущена ли служба:
$ systemctl status dnscrypt-proxy ● dnscrypt-proxy.service - DNSCrypt v2 server Loaded: loaded (/etc/systemd/system/dnscrypt-proxy.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-10-31 16:30:16 EAT; 5s ago Main PID: 868360 (dnscrypt-proxy) Tasks: 6 (limit: 4617) Memory: 7.8M CPU: 22ms CGroup: /system.slice/dnscrypt-proxy.service └─868360 /usr/local/bin/dnscrypt-proxy --config /opt/dnscrypt-proxy/dnscrypt-proxy.toml Okt 31 16:30:16 example.com dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Network connectivity detected Okt 31 16:30:16 example.com dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Now listening to 127.0.0.1:53 [UDP] Okt 31 16:30:16 example.com dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Now listening to 127.0.0.1:53 [TCP] Okt 31 16:30:16 example.com dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Source [relays] loaded ....
Проверьте, обрабатывает ли он DNS-запросы:
$ nslookup example.com Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: example.com Address: 93.184.216.34 Name: example.com Address: 2606:2800:220:1:248:1893:25c8:1946
Поздравляем! На этом мы заканчиваем это подробное руководство по установке и настройке зашифрованного DNS-сервера (DNSCrypt).
Если вам понравился эта беззаботная статья о том, как настроить DNSCrypt на Debian 12, поделитесь им с друзьями в социальных сетях. Спасибо.
-- Response ended
-- Page fetched on Mon May 20 08:10:08 2024