- Установка DNSCrypt (dnscrypt-proxy) в Windows, Linux и MacOS
- Настройка dnscrypt-proxy
- Установка системной службы dnscrypt-proxy (Windows, Linux, MacOS)
- Установка dnscrypt-proxy в Ubuntu 18.04, 20.04
- Установка системной службы dnscrypt-proxy (Arch Linux, Manjaro)
- Проверка работы
- Simple DNSCrypt для Windows
- dnscrypt-proxy
- Installation
- Configuration
- Startup
- Select resolver
- Disable any services bound to port 53
- Modify resolv.conf
- Start systemd service
- Check if dnscrypt-proxy is working
- Tips and tricks
- Local DNS cache configuration
- Change port
- Example local DNS cache configurations
- Enable EDNS0
- Test EDNS0
Установка DNSCrypt (dnscrypt-proxy) в Windows, Linux и MacOS
Установки службы DNSCrypt-proxy в ОС Windows, Linux и MacOS для шифрования DNS трафика между пользователем и защищенными DNS-серверами. Это позволяет предотвратить попытки отслеживания, перехвата DNS и MITM-атаки
DNSCrypt — это спецификация, реализованная в программном обеспечении unbound, dnsdist, dnscrypt-wrapper и dnscrypt-proxy.
dnscrypt-proxy — гибкая служба DNS прокси. Служба может работать на вашем компьютере или роутере, и вы можете локально блокировать нежелательный контент, выяснять, куда ваши устройства отправляют данные, ускорять работу приложений за счет кэширования DNS ответов, а также улучшать безопасность и конфиденциальность за счет связи с DNS серверами по защищенным каналам.
Настройка dnscrypt-proxy
1. Скачайте и установите dnscrypt-proxy для выбранной системы (Windows, Linux, MacOS):
2. Сохраните копию исходного файла конфигурации example-dnscrypt-proxy.toml и настройте согласно вашим требованиям как dnscrypt-proxy.toml.
Наш пример настройки файла dnscrypt-proxy.toml. Список общедоступных DNS-резольверов доступен по этой ссылке.
3. Убедитесь, что другие приложения и сервисы не прослушивают 53 порт в вашей системе и запустите приложение dnscrypt-proxy в командной строке Windows в режиме администратора устройства. Измените ваши настройки DNS для настроенного IP-адреса.
В нашем случае необходимо настроить DNS на 127.0.0.1 (указанное значение для параметра listen_addresses в конфигурационном файле) в параметрах протокола TCP/IP. Как это сделать для Windows рассказывается в статье настройка DNS на компьютере с ОС Windows. Приведем скриншот настройки для нашего случая:
4. Установите системную службу.
Установка системной службы dnscrypt-proxy (Windows, Linux, MacOS)
В командной строке, запущенной с правами администратора, введите следующую команду dnscrypt-proxy -service install для регистрации dnscrypt-proxy в качестве системной службы, а затем введите команду dnscrypt-proxy -service start для запуска службы.
В Windows данный шаг не требуется. Просто дважды щелкните по файлу server-install.bat для установки службы.
Служба будет автоматически запускаться при каждой перезагрузке.
Процедура установки совместима с операционными системами Windows, Linux (systemd, Upstart, SysV) и macOS (launchd).
Другие полезные команды: stop , restart (полезна при изменении конфигурации) и uninstall .
Установка dnscrypt-proxy в Ubuntu 18.04, 20.04
sudo add-apt-repository ppa:shevchuk/dnscrypt-proxy
sudo apt update
sudo apt install dnscrypt-proxy
Используемые сервера можно оставить по умолчанию, а можно отредактировать файл конфигурации и указать нужные сервер, для этого нужно раскомментировать (убирать значок #) строку server_names (и заменяем имена серверов на нужные нам). Для сохранения изменений нажимаем CTRL+O соглашаемся на изменения и затем CTRL+X для закрытия. Либо от имени Администратора в текстовом редакторе правим файл dnscrypt-proxy.toml расположенный в /etc/dnscrypt-proxy/.
sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
В настройках сети — IPV4 — DNS — отключаем Автоматический и ставим 127.0.2.1 . Перезапускаем NetworkManager:
sudo systemctl restart NetworkManager
sudo systemctl restart dnscrypt-proxy
Установка системной службы dnscrypt-proxy (Arch Linux, Manjaro)
sudo pacman -S dnscrypt-proxy
2. Активируйте и запустите службу:
systemctl enable dnscrypt-proxy.service
systemctl start dnscrypt-proxy.service
В настройках сети — IPV4 — DNS — отключаем Автоматический и ставим 127.0.0.1 . Перезапускаем NetworkManager:
sudo systemctl restart NetworkManager
sudo systemctl restart dnscrypt-proxy
3. Проверьте, был ли успешен запуск службы:
systemctl status dnscrypt-proxy.service
Проверка работы
Проверьте, что все работает корректно. DNS-запрос для resolver.dnscrypt.info должен возвращать один из выбранных DNS-серверов вместо серверов вашего провайдера
Вы можете проверить информацию о DNS с помощью сервиса DNSLeak.com. Данные сайты возвращают информацию о вашем IP-адресе и владельце используемого DNS сервера. Если в результатах отображается сервис вашего Интернет-провайдера, то происходит утечка DNS.
Так же проверить шифрование DNS трафика можно с помощью утилиты Wireshark — анализатор трафика компьютерных сетей. Программа доступна для операционных систем Windows и GNU/Linux.
Установка Wireshark в Ubuntu и подобные дистрибутивы:
sudo apt install wireshark
В окне программы выбираем нужный сетевой интерфейс и нажимаем Enter. В следующей окне, в графе Filter вводим слово DNS и снова нажимаем Enter.
Пример отсутствия шифрования DNS запросов:
Пример шифрования DNS запросов с помощью dnscrypt-proxy:
Тот же сетевой интерфейс, тот же фильтр — DNS, но запросы не отображены, т.к зашифрованы.
Simple DNSCrypt для Windows
Для Windows также можно использовать Simple DNSCrypt — инструмент для настройки шифрования DNSCrypt на компьютерах Windows с помощью простого в использовании интерфейса.
dnscrypt-proxy
dnscrypt-proxy is a DNS proxy client with support for the encrypted DNS protocols DNS over HTTPS and DNSCrypt, which can be used to prevent man-in-the-middle attacks and eavesdropping. dnscrypt-proxy is also compatible with DNSSEC.
Installation
Configuration
The default configuration file referred to is at /etc/dnscrypt-proxy/dnscrypt-proxy.toml .
Tip: While dnscrypt-proxy has no manual currently, the project maintains an extensive configuration wiki.
Startup
Note: Even though there are two ways to start the proxy, upstream recommends the service one.[1][2]
The service can be started in two mutually exclusive ways (i.e. only one of the two may be enabled):
- With the systemd service dnscrypt-proxy.service .
- The listen_addresses option must be configured (e.g. listen_addresses = [‘127.0.0.1:53’, ‘[::1]:53’] ) in the configuration file when using the service.
- Through socket activation using dnscrypt-proxy.socket .
- The listen_addresses option must be set to empty (i.e. listen_addresses = [ ] ) in the configuration file, since systemd is taking care of the socket configuration.
Select resolver
By leaving server_names commented out in the configuration file, dnscrypt-proxy will choose the fastest server from the sources already configured under [sources] [3]. The lists will be downloaded, verified, and automatically updated [4]. Thus, configuring a specific set of servers is optional.
To manually set which server is used, uncomment the server_names variable in the configuration file and select one or more of the servers. For example, to use Cloudflare’s servers:
server_names = ['cloudflare', 'cloudflare-ipv6']
A full list of resolvers is located at the upstream page or Github. If dnscrypt-proxy has run successfully on the system before, /var/cache/dnscrypt-proxy/public-resolvers.md will also contain a list. Look at the description for servers note which validate DNSSEC, do not log, and are uncensored. These requirements can be configured globally with the require_dnssec , require_nolog , require_nofilter options.
Disable any services bound to port 53
Tip: If using #Unbound as your local DNS cache this section can be ignored, as unbound runs on port 53 by default.
To see if any programs are using port 53, run:
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)
If the output contains more than the first line of column names, you need to disable whatever service is using port 53. One common culprit is systemd-resolved.service (NetworkManager#Unit dbus-org.freedesktop.resolve1.service not found), but other network managers may have analogous components. You are ready to proceed once the above command outputs nothing more than the following line:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
Modify resolv.conf
This article or section needs expansion.
Modify the resolv.conf file and replace the current set of resolver addresses with the address for localhost and options [5]:
nameserver ::1 nameserver 127.0.0.1 options edns0
Other programs may overwrite this setting; see resolv.conf#Overwriting of /etc/resolv.conf for details.
Start systemd service
Finally, start/enable the dnscrypt-proxy.service unit or dnscrypt-proxy.socket , depending on which method you chose above.
Check if dnscrypt-proxy is working
Open the browser and head to DnsLeakTest and do an extended test, if the results show servers that you have set in the configuration files it means that dnscrypt-proxy is working, otherwise something is wrong.
Tips and tricks
Local DNS cache configuration
Tip: dnscrypt-proxy can cache entries without relying on another program. This feature is enabled by default with the line cache = true in the configuration file.
It is recommended to run dnscrypt-proxy as a forwarder for a local DNS cache if not using dnscrypt-proxy’s cache feature; otherwise, every single query will make a round-trip to the upstream resolver. Any local DNS caching program should work. In addition to setting up dnscrypt-proxy, you must setup your local DNS cache program.
Change port
In order to forward queries from a local DNS cache, dnscrypt-proxy should listen on a port different from the default 53 , since the DNS cache itself needs to listen on 53 and query dnscrypt-proxy on a different port. Port number 53000 is used as an example in this section. In this example, the port number is larger than 1024 so dnscrypt-proxy is not required to be run by root.
There are two methods for changing the default port:
Edit dnscrypt-proxy.socket with the following contents:
[Socket] ListenStream= ListenDatagram= ListenStream=127.0.0.1:53000 ListenStream=[::1]:53000 ListenDatagram=127.0.0.1:53000 ListenDatagram=[::1]:53000
When queries are forwarded from the local DNS cache to 53000 , dnscrypt-proxy.socket will start dnscrypt-proxy.service .
Edit the listen_addresses option in /etc/dnscrypt-proxy/dnscrypt-proxy.toml with the following:
listen_addresses = ['127.0.0.1:53000', '[::1]:53000']
Example local DNS cache configurations
The following configurations should work with dnscrypt-proxy and assume that it is listening on port 53000 .
Unbound
Configure Unbound to your liking (in particular, see Unbound#Local DNS server) and add the following lines to the end of the server section in /etc/unbound/unbound.conf :
do-not-query-localhost: no forward-zone: name: "." forward-addr: ::1@53000 forward-addr: 127.0.0.1@53000
Tip: If you are setting up a server, add interface: 0.0.0.0@53 and access-control: your-network/subnet-mask allow inside the server: section so that the other computers can connect to the server. A client must be configured with nameserver address-of-your-server in /etc/resolv.conf .
Restart unbound.service to apply the changes.
dnsmasq
Configure dnsmasq as a local DNS cache. The basic configuration to work with dnscrypt-proxy:
no-resolv server=::1#53000 server=127.0.0.1#53000 listen-address=::1,127.0.0.1
If you configured dnscrypt-proxy to use a resolver with enabled DNSSEC validation, make sure to enable it also in dnsmasq:
conf-file=/usr/share/dnsmasq/trust-anchors.conf dnssec
Restart dnsmasq.service to apply the changes.
pdnsd
Install pdnsd. A basic configuration to work with dnscrypt-proxy is:
Restart pdnsd.service to apply the changes.
Enable EDNS0
This article or section needs expansion.
Extension Mechanisms for DNS that, among other things, allows a client to specify how large a reply over UDP can be.
Add the following line to your /etc/resolv.conf :
Test EDNS0
Make use of the DNS Reply Size Test Server, use the drill command line tool to issue a TXT query for the name rs.dns-oarc.net:
With EDNS0 supported, the «answer section» of the output should look similar to this:
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"