根据官方wiki的步骤:https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Installation-on-Debian-and-Ubuntu
安装完成之后,修改dnscrypt-proxy.toml配置文件的listen_addresses
部分
默认为: listen_addresses = []
可以修改成自己想要listen的地址(注意加端口号)
但是修改之后,systemctl restart dnscrypt-proxy.service
会提示如图的错误
Dec 04 05:37:27 Tokyo dnscrypt-proxy[1857]: [2019-12-04 05:37:27] [FATAL] listen udp 127.0.0.1:53: bind: permission denied
一开始我考虑是不是因为使用了user_name = 'nobody'
这个选项导致权限不足(实际上一开始是root身份执行,初始化完成之后downgrade privilege,类似openvpn)
并不是,然后考虑是不是ubuntu/debian自带的AppArmor搞的鬼,结果没有警告,停止掉AppArmor也没有任何变化。
事情从这里就开始变得诡异了((
后来找了一圈,在这里
https://github.com/DNSCrypt/dnscrypt-proxy/issues/1066#issuecomment-557873668
我是不知道dnscrypt官方人怎么想的,有关于Permission denied问题的issue全部被Close,然后实际上什么问题都没有解决
用包管理器本来为了方便,省去一些破事,结果变得更加麻烦了
*用此方法后可能导致apt无法删除dnscrypt-proxy
Github上的命令如下
#停掉+禁用dnscrypt-proxy的service和socket
systemctl stop dnscrypt-proxy.service
systemctl stop dnscrypt-proxy.socket
systemctl disable dnscrypt-proxy.socket
systemctl disable dnscrypt-proxy.service
#删除dnscrypt-proxy的service和socket文件
rm /lib/systemd/system/dnscrypt-proxy.service /lib/systemd/system/dnscrypt-proxy.socket
rm /var/lib/systemd/deb-systemd-helper-enabled/dnscrypt-proxy.service.dsh-also /var/lib/systemd/deb-systemd-helper-enabled/dnscrypt-proxy.socket.dsh-also /var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/dnscrypt-proxy.service /var/lib/systemd/deb-systemd-helper-enabled/sockets.target.wants/dnscrypt-proxy.socket
#Reload daemon
systemctl daemon-reload
systemctl reset-failed
#使用dnscrypt-proxy程序来安装服务(?????????????????)
dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml -service install
#最后手动开一下dnscrypt-proxy服务
systemctl start dnscrypt-proxy.service && systemctl enable dnscrypt-proxy.service
感觉。。。。这只是包管理器装的服务文件不对
比较一下。。。
(Debian 10 buster, ubuntu是使用PPA安装的,所以服务文件有些不同)
这是apt包管理器安装的服务文件,在/lib/systemd/system/dnscrypt-proxy.service
下
[Unit]
Description=DNSCrypt client proxy
Documentation=https://github.com/jedisct1/dnscrypt-proxy/wiki
Requires=dnscrypt-proxy.socket
After=network.target
Before=nss-lookup.target
Wants=nss-lookup.target
[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target
[Service]
NonBlocking=true
ExecStart=/usr/sbin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
ProtectHome=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectControlGroups=true
MemoryDenyWriteExecute=true
User=_dnscrypt-proxy
CacheDirectory=dnscrypt-proxy
LogsDirectory=dnscrypt-proxy
RuntimeDirectory=dnscrypt-proxy
这是使用dnscrypt-proxy命令安装的
[Unit]
Description=Encrypted/authenticated DNS proxy
ConditionFileIsExecutable=/usr/sbin/dnscrypt-proxy
[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/sbin/dnscrypt-proxy
WorkingDirectory=/etc/dnscrypt-proxy
Restart=always
RestartSec=120
EnvironmentFile=-/etc/sysconfig/dnscrypt-proxy
[Install]
WantedBy=multi-user.target
(我是没话说了)