LINUX.ORG.RU

dnscrypt-proxy и archLinux

 , ,


2

2

Всех приветствую! Столкнулся с проблемой - сломал dnscrypt-proxy клиента. Система следующая

educatedfool@someKind0f-pc ~ % screenfetch
                   -`                 
                  .o+`                 educatedfool@someKind0f-pc
                 `ooo/                 OS: Arch Linux 
                `+oooo:                Kernel: x86_64 Linux 4.15.15-1-hardened
               `+oooooo:               Uptime: 1h 53m
               -+oooooo+:              Packages: 796
             `/:-:++oooo+:             Shell: zsh 5.4.2
            `/++++/+++++++:            Resolution: 1366x768
           `/++++++++++++++:           DE: KDE 5.44.0 / Plasma 5.12.4
          `/+++ooooooooooooo/`         WM: KWin
         ./ooosssso++osssssso+`        GTK Theme: Breeze [GTK2], Default [GTK3]
        .oossssso-````/ossssss+`       Icon Theme: breeze
       -osssssso.      :ssssssso.      Font: Noto Sans Regular
      :osssssss/        osssso+++.     CPU: Intel Core i7-3770 @ 8x 3.9GHz [27.8°C]
     /ossssssss/        +ssssooo/-     GPU: GeForce GTX 650
   `/ossssso+/:-        -:/+osssso+-   RAM: 2176MiB / 11959MiB
  `+sso+:-`                 `.-/+oso: 
 `++:.                           `-/+/
 .`                                 `/

Лог systemd-юнита dnscrypt-proxy.socket

educatedfool@someKind0f-pc ~ % systemctl status dnscrypt-proxy.socket 
● dnscrypt-proxy.socket - DNSCrypt-proxy socket
   Loaded: loaded (/usr/lib/systemd/system/dnscrypt-proxy.socket; enabled; vendor preset: disabled)
   Active: failed (Result: resources)
     Docs: https://github.com/jedisct1/dnscrypt-proxy/wiki
   Listen: 127.0.0.1:53 (Stream)
           [::1]:53 (Stream)
           127.0.0.1:53 (Datagram)
           [::1]:53 (Datagram)

апр 10 20:51:44 someKind0f-pc systemd[1]: Failed to listen on DNSCrypt-proxy socket.
апр 10 20:52:48 someKind0f-pc systemd[1]: dnscrypt-proxy.socket: Failed to receive listening socket: Input/output error
апр 10 20:52:48 someKind0f-pc systemd[1]: dnscrypt-proxy.socket: Failed to listen on sockets: Input/output error
апр 10 20:52:48 someKind0f-pc systemd[1]: dnscrypt-proxy.socket: Failed with result 'resources'.
апр 10 20:52:48 someKind0f-pc systemd[1]: Failed to listen on DNSCrypt-proxy socket.
апр 10 20:52:57 someKind0f-pc systemd[4060]: dnscrypt-proxy.socket: Failed to create listening socket: Cannot assign requested address
апр 10 20:52:57 someKind0f-pc systemd[1]: dnscrypt-proxy.socket: Failed to receive listening socket: Input/output error
апр 10 20:52:57 someKind0f-pc systemd[1]: dnscrypt-proxy.socket: Failed to listen on sockets: Input/output error
апр 10 20:52:57 someKind0f-pc systemd[1]: dnscrypt-proxy.socket: Failed with result 'resources'.
апр 10 20:52:57 someKind0f-pc systemd[1]: Failed to listen on DNSCrypt-proxy socket.                                                            

Лог systemd-юнита dnscrypt-proxy.service

educatedfool@someKind0f-pc ~ % systemctl status dnscrypt-proxy.service                                                                          :(
● dnscrypt-proxy.service - DNSCrypt-proxy client
   Loaded: loaded (/usr/lib/systemd/system/dnscrypt-proxy.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://github.com/jedisct1/dnscrypt-proxy/wiki

апр 10 19:34:24 someKind0f-pc systemd[1]: Dependency failed for DNSCrypt-proxy client.
апр 10 19:34:24 someKind0f-pc systemd[1]: dnscrypt-proxy.service: Job dnscrypt-proxy.service/start failed with result 'dependency'.
апр 10 19:41:27 someKind0f-pc systemd[1]: Dependency failed for DNSCrypt-proxy client.
апр 10 19:41:27 someKind0f-pc systemd[1]: dnscrypt-proxy.service: Job dnscrypt-proxy.service/start failed with result 'dependency'.
апр 10 20:50:47 someKind0f-pc systemd[1]: Dependency failed for DNSCrypt-proxy client.
апр 10 20:50:47 someKind0f-pc systemd[1]: dnscrypt-proxy.service: Job dnscrypt-proxy.service/start failed with result 'dependency'.

Конфиг dnscrypt-proxy.toml по умолчанию: https://pastebin.com/aSn0wZdX

Конфиги systemd-юнитов по умолчанию

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

[Socket]
ListenStream=127.0.0.1:53
ListenStream=[::1]:53
ListenDatagram=127.0.0.1:53
ListenDatagram=[::1]:53
NoDelay=true
DeferAcceptSec=1

[Install]
WantedBy=sockets.target
[Unit]
Description=DNSCrypt-proxy client
Documentation=https://github.com/jedisct1/dnscrypt-proxy/wiki
Requires=dnscrypt-proxy.socket
After=network.target
Before=nss-lookup.target
Wants=nss-lookup.target

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

# Run dnscrypt-proxy as unprivileged user with
# temporary assigned UID/GID. See man:systemd.exec
# for more info. Requires systemd 232+.
DynamicUser=yes
CacheDirectory=dnscrypt-proxy
LogsDirectory=dnscrypt-proxy
RuntimeDirectory=dnscrypt-proxy

[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target

systemd-юниты, которые требуются в зависимостях (nss-lookup) - рабоают. Проверил на девственно-чистой виртуалке - работает, так что я что сломал.

Если требуются ещё какие-то логи, вы только скажите.

кто-то уже слушает port? dnsmasq?

ksim ()

дополнительная информация:

netstat -al
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0     78 someKind0f-pc:52442     104.24.16.62:https      FIN_WAIT1  
tcp        0      0 someKind0f-pc:53770     music.yandex.ru:https   ESTABLISHED
tcp        0      0 someKind0f-pc:53962     music.yandex.ru:https   ESTABLISHED
tcp        0      0 someKind0f-pc:54852     104.20.10.222:https     TIME_WAIT  
tcp        0      0 someKind0f-pc:54496     lo-in-f103.1e100.:https ESTABLISHED
tcp        0      0 someKind0f-pc:49250     178.248.233.:cslistener ESTABLISHED
tcp        0      0 someKind0f-pc:49932     104.18.62.223:https     TIME_WAIT  
tcp        0      0 someKind0f-pc:57090     178.248.233.6:https     TIME_WAIT  
tcp        0      0 someKind0f-pc:46536     lo-in-f139.1e1:www-http TIME_WAIT  
tcp       32      0 someKind0f-pc:35404     storage.mds.yande:https CLOSE_WAIT 
tcp       32      0 someKind0f-pc:46668     s40f.storage.yand:https CLOSE_WAIT 
tcp        0      0 someKind0f-pc:49424     le-in-f95.1e100.n:https ESTABLISHED
tcp        0      0 someKind0f-pc:55364     lo-in-f94.1e100.n:https TIME_WAIT  
tcp        0      0 someKind0f-pc:49544     192.0.73.2:https        ESTABLISHED
udp        0      0 someKind0f-pc:bootpc    0.0.0.0:*                        
вроде никто(?) не слушает 53 порт

average-user ()
Ответ на: комментарий от average-user

netstat -vnalp | grep \:53
Наверняка слушает systemd
Поменяй в /etc/dnscrypt-proxy/dnscrypt-proxy.toml порт на 1053 например и запусти
strace /usr/bin/dnscrypt-proxy --config /etc/dnscrypt-proxy/dnscrypt-proxy.toml

imul ★★★★★ ()
Ответ на: комментарий от imul

Благодарю за отклик и за подробности, после того как поменял порт получается следующее - оно запускается, но адреса не резолвит:

educatedfool@someKind0f-pc ~ % netstat -vnalp | grep \:53                                   :(
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
netstat: no support for `AF INET (sctp)' on this system.
netstat: no support for `AF INET (sctp)' on this system.
tcp        0      0 127.0.0.1:5353          0.0.0.0:*               LISTEN      8242/dnscrypt-proxy 
udp        0      0 127.0.0.1:5353          0.0.0.0:*                           8242/dnscrypt-proxy 
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.
netstat: no support for `AF ROSE' on this system.
educatedfool@someKind0f-pc ~ % 

Отладочная информация из strace https://pastebin.com/B9QYQUJ6

Перед этим пробовал менять порт по умолчанию в systemd-юните dnscrypt-proxy.socket, но оно не стартует(с той же ошибкой).

average-user ()

В общем вернул конфиг /etc/dnscrypt-proxy/dnscrypt-proxy.toml к настройкам по умолчанию (закоментировал listen address), привел systemd-юниты к следующему виду: dnscrypt-proxy.socket

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5353
ListenDatagram=127.0.0.1:5353

dnscrypt-proxy.service

# Run dnscrypt-proxy as unprivileged user with
# temporary assigned UID/GID. See man:systemd.exec
# for more info. Requires systemd 232+.
#DynamicUser=yes
#CacheDirectory=dnscrypt-proxy
#LogsDirectory=dnscrypt-proxy
#RuntimeDirectory=dnscrypt-proxy

dnscrypt-proxy.socket - был сделан таким образом согласно archlinux wiki(хоть статья и устарела) https://wiki.archlinux.org/index.php/DNSCrypt#Change_port

dnscrypt-proxy.service - закоментировал строки, которые запускают демон от имени непривилегированного пользователя, если этого не сделать, то демон не запускается с ошибкой

listen udp 127.0.0.1:53: bind: permission denied

Другими словами - оно заработало, НО меня так не устраивает т.к. демон работает от рута, а это не есть хорошо. Есть какие-нибудб идеи или это надо другую тему создавать?

average-user ()
Ответ на: комментарий от average-user

попробуй поменять IP вместо порта, мой конфиг:

cat /etc/systemd/system/dnscrypt-proxy.socket.d/override.conf
[Socket]
ListenStream=
ListenStream=127.0.0.2:53
ListenDatagram=
ListenDatagram=127.0.0.2:53

и в /etc/resolv.conf прописать 127.0.0.2 вместо 127.0.0.1

/etc/dnscrypt-proxy/dnscrypt-proxy.toml, socket и service стандартные из пакета

ksim ()
Последнее исправление: ksim (всего исправлений: 2)
Ответ на: комментарий от ksim

Благодарю за отклик! Попробовал сделать так - получается, что socket стартует нормально, а service выдаёт ту же ошибку

dnscrypt-proxy[11348]: listen udp 127.0.0.2:53: bind: permission denied
я так понимимаю у того пользователя, который указвается в sevice
DynamicUser=yes
CacheDirectory=dnscrypt-proxy
LogsDirectory=dnscrypt-proxy
RuntimeDirectory=dnscrypt-proxy
нет соответствующих прав, поэтому оно не работает, однако ж я пробовал на свежей виртуалке запускать - всё работает «из коробки» без смены портов/адресов/пользователей

average-user ()
Ответ на: комментарий от average-user

покажи ещё раз

systemctl cat dnscrypt-proxy.socket
и
systemctl cat dnscrypt-proxy.service

ksim ()

Решено! Нагуглил информацию о том как должен выглядить service https://github.com/jedisct1/dnscrypt-proxy/issues/239

В общем финальный(?) вариант dnscrypt-proxy.service имеет следующий вид

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

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

# Run dnscrypt-proxy as unprivileged user with
# temporary assigned UID/GID. See man:systemd.exec
# for more info. Requires systemd 232+.
DynamicUser=yes
CacheDirectory=dnscrypt-proxy
LogsDirectory=dnscrypt-proxy
RuntimeDirectory=dnscrypt-proxy
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target

Теперь service запускается от не-рута и это хорошо!

Заковырка была в отстутсвии этих строчек

CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE

Всех благодарю за помощь!

average-user ()
Ответ на: комментарий от average-user

У меня нормально работает на 127.0.0.2
Получается такой конфиг:

grep -v ^[\ ]*# dnscrypt-proxy.toml | grep -v ^$
listen_addresses = ['127.0.0.2:53']
max_clients = 250
ipv4_servers = true
ipv6_servers = false
dnscrypt_servers = true
doh_servers = true
require_dnssec = false
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 2500
cert_refresh_delay = 240
fallback_resolver = '9.9.9.9:53'
ignore_system_dns = false
log_files_max_size = 10
log_files_max_age = 7
log_files_max_backups = 1
block_ipv6 = false
cache = true
cache_size = 256
cache_min_ttl = 600
cache_max_ttl = 86400
cache_neg_ttl = 60
[query_log]
  format = 'tsv'
[nx_log]
  format = 'tsv'
[blacklist]
[ip_blacklist]
[schedules]
[sources][
 [sources.'public-resolvers']
 urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md']
  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 72
  prefix = ''
[static]
Ну и в resolve.conf соответственно 127.0.0.2

imul ★★★★★ ()
Последнее исправление: imul (всего исправлений: 2)
Ответ на: комментарий от average-user

С этим конфигом не работает.
После запуска системы dnscrypt работает.
Но при подключении к интернету командой
# dhcpcd enp0s20u10
dnscrypt падает и его приходится перезапускать
$ systemctl restart dnscrypt-proxy.service

Конфиг:

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

[Socket]
ListenStream=127.0.0.1:53
ListenDatagram=127.0.0.1:53
NoDelay=true
DeferAcceptSec=1

[Install]
WantedBy=sockets.target

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

[Service]
NonBlocking=true
ExecStart=/usr/bin/dnscrypt-proxy --config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
ProtectHome=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
DynamicUser=yes
CacheDirectory=dnscrypt-proxy
LogsDirectory=dnscrypt-proxy
RuntimeDirectory=dnscrypt-proxy
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target

Coyote112358 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.