zaLinux.ru

Ошибка «E: Невозможно найти пакет dnscrypt-proxy» в Kali Linux и Debian (РЕШЕНО)


Как установить последнюю версию dnscrypt-proxy

dnscrypt-proxy — это популярная программа для запуска локального (на своём компьютере) DNS-прокси, используется для кэширования DNS запросов, что немного ускоряет подключения и снижает трафик, а также для добавления функции DNS-over-HTTPS, благодаря которой DNS запросы и ответы шифруются, что увеличивает конфиденциальность пользователя (поскольку его DNS не могут быть перехвачены и проанализированы), а также делает невозможными атаки на основе DNS спуфинга.

Пакет dnscrypt-proxy много лет присутствует в репозиториях Debian, а следовательно и во всех других дистрибутивах на основе Debian (таких, как Kali Linux, Linux Mint, Ubuntu).

Но в свежих версиях Debian Testing и Kali Linux при попытке установить пакет:

sudo apt update
sudo apt install dnscrypt-proxy

Вы можете столкнуться с ошибкой:

Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
E: Невозможно найти пакет dnscrypt-proxy

Причина ошибки в том, что 2022-09-28 пакет был исключён из репозитория Debian Testing, а следовательно и из Kali Linux, которая основывается на Debian Testing. Подробности об этом можно прочитать на странице https://tracker.debian.org/pkg/dnscrypt-proxy, как можно понять из этой страницы, пакет dnscrypt-proxy был исключён автоматически из-за не разрешённой зависимости.

Скорее всего, рано или поздно dnscrypt-proxy будет возвращён в Debian Testing, а следовательно и в Kali Linux, но что если вам нужно установить и использовать dnscrypt-proxy прямо сейчас?

На самом деле программа dnscrypt-proxy распространяется автором в виде скомпилированного исполнимого файла, установка которого не требует никаких зависимостей. Поэтому dnscrypt-proxy легко установить вручную.

Даже если dnscrypt-proxy уже возвращён в репозитории, возможно вы захотите вручную установить последнюю версию данной программы.

Как вручную установить dnscrypt-proxy

Эта инструкция расскажет, как вручную установить dnscrypt-proxy, а также добавить файл в автозагрузку.

Чтобы в командной строке скачать последнюю версию dnscrypt-proxy запустите следующую команду:

wget https://github.com/`curl -s https://github.com/DNSCrypt/dnscrypt-proxy/releases/expanded_assets/$(curl -s https://github.com/DNSCrypt/dnscrypt-proxy/releases | grep -E -o '/DNSCrypt/dnscrypt-proxy/releases/tag/[0-9.]+' | head -n 1 | grep -o -E '[0-9.]{2,}') | grep -E -o '[^"]+/dnscrypt-proxy-linux_x86_64[0-9.-]+.tar.gz"' | sed 's/"//'`

Она определит и скачает последний выпуск dnscrypt-proxy.

Вы также можете скачать исполнимый файл вручную на странице https://github.com/DNSCrypt/dnscrypt-proxy/releases, вам нужен файл вида dnscrypt-proxy-linux_x86_64*.tar.gz.

Теперь распакуйте скачанный архив:

tar xvzf dnscrypt-proxy-linux_x86_64-*.tar.gz

Перейдите в директорию с распакованными файлами:

cd linux-x86_64/

Переместите исполнимый файл dnscrypt-proxy в директорию /usr/bin/:

sudo cp dnscrypt-proxy /usr/bin/

Создайте директорию /etc/dnscrypt-proxy/ и скопируйте в неё файл example-dnscrypt-proxy.toml, при этом файл нужно переименовать в dnscrypt-proxy.toml:

sudo mkdir /etc/dnscrypt-proxy/
sudo cp example-dnscrypt-proxy.toml /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Создайте файл /usr/lib/systemd/system/dnscrypt-proxy.service:

sudo gedit /usr/lib/systemd/system/dnscrypt-proxy.service

И скопируйте в него следующее:


[Unit]
Description=DNSCrypt-proxy client
Documentation=https://github.com/jedisct1/dnscrypt-proxy/wiki
Wants=network-online.target nss-lookup.target
Before=nss-lookup.target

[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
CacheDirectory=dnscrypt-proxy
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
DynamicUser=yes
ExecStart=/usr/bin/dnscrypt-proxy --config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
LockPersonality=yes
LogsDirectory=dnscrypt-proxy
MemoryDenyWriteExecute=true
NonBlocking=true
NoNewPrivileges=true
PrivateDevices=true
ProtectControlGroups=yes
ProtectHome=yes
ProtectHostname=yes
ProtectKernelLogs=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectSystem=strict
RestrictAddressFamilies=AF_INET AF_INET6
RestrictNamespaces=true
RestrictRealtime=true
RuntimeDirectory=dnscrypt-proxy
StateDirectory=dnscrypt-proxy
SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallFilter=~@resources @privileged
SystemCallFilter=@chown

[Install]
WantedBy=multi-user.target

Проверьте, чтобы порт 53 не был занят:


sudo ss -tulpn 'sport = :domain'

В моём случае я получил следующее:

Netid               State                Recv-Q               Send-Q                              Local Address:Port                               Peer Address:Port               Process                                                   
udp                 UNCONN               0                    0                                        10.0.3.1:53                                      0.0.0.0:*                   users:(("dnsmasq",pid=754,fd=6))                         
tcp                 LISTEN               0                    32                                       10.0.3.1:53                                      0.0.0.0:*                   users:(("dnsmasq",pid=754,fd=7))

То есть процесс dnsmasq прослушивает 53 порт на адресе 10.0.3.1. Этот процесс запущен службой NetworkManager. Он не будет мешать и можно игнорировать его. Главное, чтобы не было процессов прослушивающих порт 53 на IP адресе 127.0.0.1.

Запустите службу dnscrypt-proxy:

sudo systemctl start dnscrypt-proxy.service

и проверьте её статус:

systemctl status dnscrypt-proxy.service

Если всё в порядке, добавьте службу в автозагрузку:

sudo systemctl enable dnscrypt-proxy.service

Откройте файл /etc/NetworkManager/NetworkManager.conf:

sudo gedit /etc/NetworkManager/NetworkManager.conf

и в раздел

[main]

добавьте

dns=none


Перезапустите NetworkManager:

sudo systemctl restart NetworkManager

Сделайте резервную копию файла /etc/resolv.conf:

sudo cp /etc/resolv.conf /etc/resolv.conf.backup

А затем удалите /etc/resolv.conf (это важно, поскольку это может быть ссылка на файл, а не настоящий файл):

sudo rm -f /etc/resolv.conf

И создайте файл /etc/resolv.conf

sudo gedit /etc/resolv.conf

со следующим содержимым:

nameserver 127.0.0.1
# nameserver ::1 # для IPv6
options edns0 single-request-reopen
EDNSPayloadSize 4096

Защита файла /etc/resolv.conf от изменений

Выше мы добавили настройку NetworkManager чтобы эта служба не меняла содержимое файла /etc/resolv.conf, как это делает она без предупреждений. На самом деле, NetworkManager действительно является самой частой причиной сброса настроек в /etc/resolv.conf, но не единственной. Подробности, а также способы, как определить, какая программа меняет файл /etc/resolv.conf и как надёжно заблокировать этот файл от изменения любыми программами, смотрите в статье «Как запретить NetworkManager менять файл /etc/resolv.conf».

Продолжение смотрите в разделах:

7. Как настроить dnscrypt-proxy

8. Проверка работы dnscrypt-proxy

9. Настройка dnscrypt-proxy для использования с IPv6


Рекомендуемые статьи:

3 Комментарии

  1. KalinA

    Здравствуйте.

    Делала всё по порядку, у меня возникла ошибка на стадии:

    sudo systemctl start dnscrypt-proxy.service

    Failed to start dnscrypt-proxy.service: Unit dnscrypt-proxy.service is masked.

     

    1. Alexey (Автор записи)

      Приветствую! У вас Kali Linux или другой дистрибутив?

      Я с таким не сталкивался, но снять маску с процесса можно следующей командой:

      sudo systemctl unmask dnscrypt-proxy.service

      А затем опять попробуйте запустить:

      sudo systemctl start dnscrypt-proxy.service
      
  2. Cassa

    Приветствую,

    А как полностью удалить старую версию программы 2.0.45 и ее проблемные зависимости?!

Добавить комментарий для Alexey Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *