遇到报错
为了解决 dns 劫持污染问题,就给 debian 安装 dnscrypt-proxy ,安装完改配置重启后,报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ systemctl status dnscrypt-proxy × dnscrypt-proxy.service - DNSCrypt client proxy Loaded: loaded (/lib/systemd/system/dnscrypt-proxy.service; disabled; preset: enabled) Active: failed (Result: exit-code) since Thu 2024-06-20 10:36:31 CST; 1s ago Duration: 22ms TriggeredBy: ● dnscrypt-proxy.socket Docs: https://github.com/DNSCrypt/dnscrypt-proxy/wiki Process: 54010 ExecStart=/usr/sbin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml (code=exited, status=255/EXCEPTION) Main PID: 54010 (code=exited, status=255/EXCEPTION) CPU: 21ms 6月 20 10:36:31 debian12 systemd[1]: Started dnscrypt-proxy.service - DNSCrypt client proxy. 6月 20 10:36:31 debian12 dnscrypt-proxy[54010]: [2024-06-20 10:36:31] [NOTICE] dnscrypt-proxy 2.0.45 6月 20 10:36:31 debian12 dnscrypt-proxy[54010]: [2024-06-20 10:36:31] [NOTICE] Network connectivity detected 6月 20 10:36:31 debian12 dnscrypt-proxy[54010]: [2024-06-20 10:36:31] [FATAL] listen udp 0.0.0.0:53: bind: permission denied 6月 20 10:36:31 debian12 systemd[1]: dnscrypt-proxy.service: Main process exited, code=exited, status=255/EXCEPTION 6月 20 10:36:31 debian12 systemd[1]: dnscrypt-proxy.service: Failed with result 'exit-code'.
显示“ listen udp 0.0.0.0:53: bind: permission denied ”,检查发现 53 端口被 1/init systemd 占用了:
1 2 3 4 5 6 7 $ netstat -tlunp|grep init tcp 0 0 127.0.2.1:53 0.0.0.0:* LISTEN 1/init udp 0 0 127.0.2.1:53 0.0.0.0:* 1/init $ lsof -i :53 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 47u IPv4 454880 0t0 TCP 127.0.2.1:domain (LISTEN) systemd 1 root 48u IPv4 457853 0t0 UDP 127.0.2.1:domain
刚开始还以为是被 systemd-resolved 、 dnsmasq 等软件占用了,检查发现不是。
注意到“ TriggeredBy: ● dnscrypt-proxy.socket ”,“ systemctl stop dnscrypt-proxy.socket ”可以关闭端口占用,不过重启还失效了。
1 2 3 $ systemctl stop dnscrypt-proxy.socket $ lsof -i :53 $ netstat -tlunp|grep init
方法1
参考: https://github.com/DNSCrypt/dnscrypt-proxy/issues/1066
可以这样做(之所以有用是因为不会启动 dnscrypt-proxy.socket ,但这样也无法使用 systemctl 设置自动启动了):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $ dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml -service install $ dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml -service start $ systemctl status dnscrypt-proxy ● dnscrypt-proxy.service - Encrypted/authenticated DNS proxy Loaded: loaded (/etc/systemd/system/dnscrypt-proxy.service; enabled; preset: enabled) Active: active (running) since Thu 2024-06-20 11:01:55 CST; 6s ago TriggeredBy: ○ dnscrypt-proxy.socket Main PID: 54652 (dnscrypt-proxy) Tasks: 8 (limit: 9481) Memory: 5.0M CPU: 4ms CGroup: /system.slice/dnscrypt-proxy.service └─54652 /usr/sbin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml 6月 20 11:01:55 debian12 systemd[1]: Started dnscrypt-proxy.service - Encrypted/authenticated DNS proxy. 6月 20 11:01:55 debian12 dnscrypt-proxy[54652]: [2024-06-20 11:01:55] [NOTICE] dnscrypt-proxy 2.0.45 6月 20 11:01:55 debian12 dnscrypt-proxy[54652]: [2024-06-20 11:01:55] [NOTICE] Network connectivity detected 6月 20 11:01:55 debian12 dnscrypt-proxy[54652]: [2024-06-20 11:01:55] [NOTICE] Now listening to 0.0.0.0:53 [UDP] 6月 20 11:01:55 debian12 dnscrypt-proxy[54652]: [2024-06-20 11:01:55] [NOTICE] Now listening to 0.0.0.0:53 [TCP] 6月 20 11:01:55 debian12 dnscrypt-proxy[54652]: [2024-06-20 11:01:55] [NOTICE] Source [public-resolvers] loaded 6月 20 11:01:55 debian12 dnscrypt-proxy[54652]: [2024-06-20 11:01:55] [NOTICE] Firefox workaround initialized
官方方法
参考官方: https://github.com/dnscrypt/dnscrypt-proxy/wiki/Installation-on-Debian-and-Ubuntu
使用套接字
使用套接字的方法,在 /lib/systemd/system/dnscrypt-proxy.socket 文件中配置端口,在 /etc/dnscrypt-proxy/dnscrypt-proxy.toml 中配置 listen_addresses = [] ,然后:
1 2 systemctl enable dnscrypt-proxy systemctl start dnscrypt-proxy
以上方法对 127.0.0.1:53 有用,但对 0.0.0.0:53 似乎无效。 dnscrypt-proxy.socket 报错:
1 6月 20 15:55:28 debian12 systemd[1]: dnscrypt-proxy.socket: TCP_NODELAY failed: Protocol not available
禁用套接字
官方的禁用套接字的方法:
禁用 dnscrypt-proxy.socket
1 2 sudo systemctl stop dnscrypt-proxy.socket sudo systemctl disable dnscrypt-proxy.socket
配置 /lib/systemd/system/dnscrypt-proxy.service ,删除与 dnscrypt-proxy.socket 的关联(注释了两行)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [Unit] Description=DNSCrypt client proxy Documentation=https://github.com/DNSCrypt/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
官方说还需要配置 /lib/systemd/system/dnscrypt-proxy-resolvconf.service ,删除与 dnscrypt-proxy.socket 的关联,我感觉不需要,也配置不了,这两个本身就是关联的。
重新载入系统套接字的配置
配置 /etc/dnscrypt-proxy/dnscrypt-proxy.toml ,不用管 dnscrypt-proxy.socket 了, 这里 server_names 建议加上 ‘alidns-doh’,国内访问更快更稳定。
启动
1 systemctl restart dnscrypt-proxy.service
成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ systemctl status dnscrypt-proxy.service ● dnscrypt-proxy.service - Encrypted/authenticated DNS proxy Loaded: loaded (/etc/systemd/system/dnscrypt-proxy.service; enabled; preset: enabled) Active: active (running) since Thu 2024-06-20 16:20:30 CST; 6s ago TriggeredBy: ○ dnscrypt-proxy.socket Main PID: 60103 (dnscrypt-proxy) Tasks: 11 (limit: 9481) Memory: 12.7M CPU: 41ms CGroup: /system.slice/dnscrypt-proxy.service └─60103 /usr/sbin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml 6月 20 16:20:30 debian12 systemd[1]: Started dnscrypt-proxy.service - Encrypted/authenticated DNS proxy. 6月 20 16:20:30 debian12 dnscrypt-proxy[60103]: [2024-06-20 16:20:30] [NOTICE] dnscrypt-proxy 2.0.45 6月 20 16:20:30 debian12 dnscrypt-proxy[60103]: [2024-06-20 16:20:30] [NOTICE] Network connectivity detected 6月 20 16:20:30 debian12 dnscrypt-proxy[60103]: [2024-06-20 16:20:30] [NOTICE] Now listening to 0.0.0.0:53 [UDP] 6月 20 16:20:30 debian12 dnscrypt-proxy[60103]: [2024-06-20 16:20:30] [NOTICE] Now listening to 0.0.0.0:53 [TCP] 6月 20 16:20:30 debian12 dnscrypt-proxy[60103]: [2024-06-20 16:20:30] [NOTICE] Source [public-resolvers] loaded 6月 20 16:20:30 debian12 dnscrypt-proxy[60103]: [2024-06-20 16:20:30] [NOTICE] Firefox workaround initialized 6月 20 16:20:31 debian12 dnscrypt-proxy[60103]: [2024-06-20 16:20:31] [NOTICE] [cloudflare] OK (DoH) - rtt: 151ms
测试
功能正常启动,测试一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $ dig raw.githubusercontent.com ; <<>> DiG 9.18.24-1~bpo11+1-Debian <<>> raw.githubusercontent.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41724 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;raw.githubusercontent.com. IN A ;; ANSWER SECTION: raw.githubusercontent.com. 3115 IN A 185.199.111.133 raw.githubusercontent.com. 3115 IN A 185.199.109.133 raw.githubusercontent.com. 3115 IN A 185.199.108.133 raw.githubusercontent.com. 3115 IN A 185.199.110.133 ;; Query time: 444 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Thu Jun 20 11:05:30 CST 2024 ;; MSG SIZE rcvd: 118
搞定了。