在Linux上安装dnscrypt-proxy 无污染DNS

183次阅读
没有评论

共计 4345 个字符,预计需要花费 11 分钟才能阅读完成。

在Linux上安装:概述

内核要求(来自golang的最低要求):

  • 内核版本2.6.23或更高版本。
  • Linux / ARMv5需要更新得多的内核,至少v3.1(针对__kuser_cmpxchg64)。
  • 我们不支持CentOS5。内核太旧(2.6.18)。
  • 对于低端MIPS64,已知内核版本4.1会失败,并且4.8可以运行。

步骤1:获取root shell

在大多数Linux发行版中,该sudo -s命令将完成任务。

步骤2:检查还有什么可能已经在监听端口53

如果您已经拥有本地DNS缓存,则最终必须将其替换为dnscrypt-proxy。两者可以同时使用,但这超出了本指南的范围(或至少在此Wiki页面的范围之外)。

输入以下命令:

SS -lp '运动=:域'

这可能类似于以下内容:

tcp    LISTEN     0      128    127.0.0.1:domain                *:*                     users:(("unbound",pid=28146,fd=6))
tcp    LISTEN     0      128    127.0.0.1:domain                *:*                     users:(("unbound",pid=28146,fd=4))

unbound使用特定于发行版的命令(例如apt-get remove或)卸载相应的软件包(在上面的示例中:)pacman -R,然后使用再次检查ss -lp 'sport = :domain':不再有任何监听domain端口的内容。

您可能还会看到所服务的端口systemd-resolved。该命令无法卸载,但可以使用以下命令禁用:

systemctl stop systemd-resolved
systemctl disable systemd-resolved

检查是否再也没有监听端口53了:

ss -lp 'sport = :domain'

看起来还好吗 让我们继续下一步。

步骤3:下载并运行dnscrypt-proxy

在此处下载dnscrypt-proxy:dnscrypt-proxy二进制文件。

这里有很多文件,但是您只需要一个文件,即可匹配您的操作系统和体系结构。

dnscrypt-proxy-linux_x86_64-*.tar.gz 是大多数人想要的。

因此,下载此文件,然后将其解压缩到任意位置。In可以位于您的主目录中,也可以位于您/opt/dnscrypt-proxy想要的任何位置。

完全可能将可执行文件放在一个位置,将配置文件放在另一个位置,将缓存文件放在其他位置,将日志文件放在其他位置。

但是,如果这是您第一次安装该软件,并且没有充分的理由使事情变得比应有的复杂,则只需将所有内容保存在同一目录中即可。至少要从头开始,并确保一切正常。

然后,如果您愿意,发疯。但是请不要在启动代理之前更改所有内容,然后抱怨“它不起作用”。从一些无聊的事情开始,然后逐渐进行调整。如果您确实需要。

另外,此时请勿更改DNS设置。

只需根据示例一创建一个配置文件:

cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml

现在,对于紧张的事情,请转到dnscrypt-proxy目录,然后键入:

./dnscrypt-proxy

看起来是否正确启动了吗?如果没有,请尝试找出原因。这里有一些提示:

  • dnscrypt-proxy.toml: no such file or directory:按照上述说明复制示例配置文件dnscrypt-proxy.toml
  • not found ELF - not found - Syntax error: ")" unexpected 或类似的东西:您没有为操作系统和CPU下载正确的文件。
  • listen udp 127.0.0.1:53: bind: permission denied:您没有使用root shell(请参阅步骤1)。使用sudo -s得到一个。或者su如果sudo您的系统上不存在。
  • listen udp 127.0.0.1:53: bind: address already in use:某些内容已经在侦听DNS端口。也许还有其他事情,也许是您在启动新的dnscrypt-proxy之前没有停止的实例。返回步骤2,然后重试。
  • dnscrypt-proxy.socket: TCP_NODELAY failed: Protocol not available注意:使用systemd套接字激活时,这些警告是预期的,可以安全地忽略。之所以会发生这种情况,是因为systemd尝试为UDP套接字应用仅TCP选项。这不应该影响功能。
  • dnscrypt-proxy.socket: TCP_DEFER_ACCEPT failed: Protocol not available:同上
  • systemctl failed:您跳开了枪,没有遵循上面的指示。
  • <something about IPv6 not being available>:编辑dnscrypt-proxy.toml, [::1]:53从中删除listen_addresses

没有错误吗?惊人!

不要关闭终端窗口。我们将更改系统DNS设置。

步骤4:更改系统DNS设置

您的系统是否有一个名为的目录/etc/resolvconf(不是resolv.conf文件)?如果是这种情况,请将其删除:

apt-get remove resolvconf

现在,备份/etc/resolv.conf文件:

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

然后删除/etc/resolv.conf文件(重要的是,因为这可能是一个悬挂的链接,而不是实际的文件):

rm -f /etc/resolv.conf

并创建一个/etc/resolv.conf具有以下内容的新文件:

nameserver 127.0.0.1
options edns0

让我们通过使用dnscrypt-proxy发送第一个查询来检查一切是否正常:

./dnscrypt-proxy -resolve example.com

看起来成功解决了example.com吗?甜!尝试其他一些操作:Web浏览,文件下载,正常使用系统并查看是否仍然可以连接而没有任何与DNS相关的问题。

如果发生任何错误,并且您想要还原所有内容:

  • 如果已卸载resolvconf,请使用apt-get install resolv.conf
  • 恢复/etc/resolv.conf备份:cp /etc/resolv.conf.backup /etc/resolv.conf
  • 如果即使重新启动后您仍然无法解决任何问题,请将其放在/etc/resolv.confnameserver 1.0.0.1

步骤5:调整配置文件

ControlCdnscrypt-proxy终端窗口阻止它。

此时,您仍必须位于dnscrypt-proxy目录中。

dnscrypt-proxy.toml文件具有许多可以调整的选项。如果愿意,请调整它们。但是,一个接一个地调整它们,这样,一旦您搞砸了,您就会知道发生了什么确切的变化。

该消息bare keys cannot contain '\n'通常表示配置文件中存在语法错误。

键入./dnscrypt-proxy启动服务器,以及Control– C停止它。测试,调整,停止,测试,调整,停止,直到您满意为止。

你满意吗?好,让我们跳到步骤6!

步骤6:将代理安装为系统服务

ControlCdnscrypt-proxy终端窗口停止代理。

现在,将其注册为系统服务(仍然具有root特权,并且位于包含配置文件的目录中):

./dnscrypt-proxy -service install

如果它没有吐出任何错误,那就太好了!您的Linux发行版与内置安装程序兼容。

这假定可执行文件和配置文件在同一目录中。如果您不遵循这些建议,那么您将自己修改单元文件。

现在已经安装,可以启动它:

./dnscrypt-proxy -service start

做完了!

如果确实出现错误,则需要执行Linux发行版的步骤。保持镇静,不要喝咖啡,而要去健身房,然后寻求具体说明。

Failed to start DNSCrypt client proxy: "systemctl" failed: exit status 5表示您尝试start了服务而没有install先使用它。

要停止服务吗?

./dnscrypt-proxy -service stop

是否要在更改配置文件后重新启动当前正在运行的服务?

./dnscrypt-proxy -service restart

要卸载该服务吗?

./dnscrypt-proxy -service uninstall

是否想检查DNS解析是否有效?

./dnscrypt-proxy -resolve example.com

是否要完全删除该东西?

删除目录。做完了

以非root用户身份运行

以下命令将必需的属性添加到dnscrypt-proxy文件,以便它可以以非root用户身份运行:

sudo setcap cap_net_bind_service = + pe dnscrypt-proxy

这可能不适用于某些发行版和文件系统。

如果内容/etc/resolv.conf不坚持

编辑它,然后在根控制台中键入以下命令以将其锁定:

chattr + i /etc/resolv.conf

解锁:

chattr -i /etc/resolv.conf

如果您只能通过HTTPS访问DNS服务器

运行时dnscrypt-proxy,可能是仅成功到达HTTPS上的DNS(DoH)服务器,而没有成功到达DNSCrypt服务器的情况。一个症状是,在运行时./dnscrypt-proxy唯一不超时的服务器是DoH服务器,例如

...
[NOTICE] [securedns] TIMEOUT
[NOTICE] [securedns-doh] OK (DoH) - rtt: 40ms
...

在这种情况下,请确保不仅dnscrypt-proxy可以在TCP 443(HTTPS,因此是DoH)上而且可以在UDP 443上连接对等方。如果iptables在Linux 上使用,则可以添加以下规则

iptables -A输出-p udp --sport 443 -j接受

然后重新启动dnscrypt-proxy

升级中

为了安装新版本,只需将可执行文件(dnscrypt-proxy)替换为新版本,然后重新启动服务。

与systemd结合使用

dnscrypt-proxy 可以从systemd开始。

由于对于经验丰富的Linux用户来说这是一个复杂的主题,因此有一个专用页面:带有systemd的dnscrypt-proxy。

自动更新代理

使代理保持最新状态的最简单方法是使用始终附带最新软件包的操作系统或发行版。

或者,对于Linux,这些说明可能会有所帮助:更新。

正文完
 
admin
版权声明:本站原创文章,由 admin 2019-12-25发表,共计4345字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码