DNSCrypt-Proxy
概述
本文简要介绍了如何在 Alpine Linux 上设置 DNSCrypt-Proxy 服务器。
另请参阅 dnscrypt.info。源代码位于 github.com/jedisct1/dnscrypt-proxy
功能特性
- DNS 流量加密和身份验证。
- 支持 DNSCrypt、基于 TLS 1.3 的 DNS-over-HTTPS (DoH)、匿名 DNS 和隐匿 DoH (ODoH)。
- 本地 DOH 服务器
- DNS 查询监控,为常规和可疑查询提供单独的日志文件
- 过滤:阻止广告、恶意软件和其他不需要的内容。与所有 DNS 服务兼容
- 基于时间的过滤,具有灵活的每周计划
- 将特定域名透明地重定向到特定解析器
- DNS 缓存,以减少延迟并提高隐私
以及更多...
dnscrypt 和 DoH 协议都实现了加密 DNS 流量的相同目标,从而保护数据免受 ISP 或公共热点所有者的窥探。它可以运行在本地机器上,也可以设置为家庭、办公室或任何其他规模群组的 DNS 解析器;它具有良好的可扩展性,并且使用最少的资源。用户无需担心“选择”使用 dnscrypt 或 DoH 协议的服务 - dnscrypt-proxy 可以选择满足日志记录和过滤标准的最快解析器。此外,它还支持使用匿名 DNS 或 ODoH 隧道请求的协议。
安装
安装 dnscrypt-proxy 软件包
apk add dnscrypt-proxy dnscrypt-proxy-openrc
另请参阅 Alpine Linux 软件包管理。
服务命令
启用 dnscrypt-proxy 服务,使其在启动时启动
rc-update add dnscrypt-proxy
立即启动 dnscrypt-proxy 服务
rc-service dnscrypt-proxy start
另请参阅 Alpine Linux Init 系统。
在本地网络上暴露服务
主配置文件是 /etc/dnscrypt-proxy/dnscrypt-proxy.toml。任何以“#”开头的行都将被 dnscrypt-proxy 忽略。替换
listen_addresses = ['127.0.0.1:53', '[::1]:53']
为
listen_addresses = [':53']
然后使用以下命令重启服务
rc-service dnscrypt-proxy restart
启用本地 DOH 服务器
此功能从 2.0.34 版本开始可用。Firefox 可以配置为使用 dnscrypt-proxy 作为本地 DOH 服务器。为此,需要使用以下命令生成证书
openssl req -x509 -nodes -newkey rsa:2048 -days 5000 -sha256 -keyout \ localhost.pem -out localhost.pem
然后复制到 dnscrypt-proxy 文件夹
# cp localhost.pem /etc/dnscrypt-proxy
接下来,编辑主配置文件 /etc/dnscrypt-proxy/dnscrypt-proxy.toml。删除以下行开头的“#”
[local_doh] listen_addresses = [':3000'] path = "/dns-query" cert_file = "localhost.pem" cert_key_file = "localhost.pem"
在此示例中,本地 DoH 服务器的 URL 将是“https://<host ip address>:3000/dns-query
首先尝试使用 Firefox 将此完整 URL 作为常规网站打开。第一次,Firefox 会注意到证书是自签名证书并对此发出警告。这是预期的。单击“高级”和“接受风险”。这没问题,您只会连接到自己的机器。接下来,在 URL 栏中键入 about:config,搜索 trr 并进行以下更改
Set network.trr.custom_uri and network.trr.uri to https://127.0.0.1:3000/dns-query Set network.trr.mode to 2
搜索 esni 并进行以下更改
Set network.security.esni.enabled to true
ESNI 规范以及 Firefox(和 Chrome/Brave/Chromium)中的实现仍处于实验阶段,因此可能会破坏某些网站。在此处测试其是否正常工作 https://www.cloudflare.com/ssl/encrypted-sni/(不要注意“安全 DNS”列,只有在使用 Cloudflare 时才会显示绿色标记)。
要禁用,请进行以下更改
Set network.trr.mode to 0
将内部流量转发到本地 DNS 服务器
如果您在本地网络上使用主机名,则需要执行此操作 - 通常这由您的家用路由器管理。主配置文件是 /etc/dnscrypt-proxy/dnscrypt-proxy.toml。删除此行开头的“#”
# forwarding_rules = '/etc/dnscrypt-proxy/forwarding-rules.txt' forwarding_rules = '/etc/dnscrypt-proxy/forwarding-rules.txt'
复制示例文件
cp /usr/share/dnscrypt-proxy/example-forwarding-rules.txt /etc/dnscrypt-proxy/forwarding-rules.txt
然后编辑该文件,并为您的本地网络添加一行。如果您的网络配置为“.home”,并且您的家用路由器位于 192.168.1.1,则添加
home 192.168.1.1
然后使用以下命令重启服务
rc-service dnscrypt-proxy restart
创建家庭友好型 DNS 服务
一些提供商有自己的成人内容阻止过滤器。它们并非都使用相同的系统,因此研究可能是有价值的。提供商列表可以在这里找到 public-servers。如果某个服务变得不可用,则仅选择一个服务可能是不明智的。编辑 /etc/dnscrypt-proxy/dnscrypt-proxy.toml 并在全局设置中进行如下调整
# server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare'] server_names = ['cleanbrowsing-family']
隐蔽规则也可用于屏蔽某些 URI。例如,重定向 google 以强制执行安全搜索。主配置文件是 /etc/dnscrypt-proxy/dnscrypt-proxy.toml。删除此行开头的“#”
- cloaking_rules = 'cloaking-rules.txt'
cloaking_rules = 'cloaking-rules.txt'
然后复制示例文件
cp /usr/share/dnscrypt-proxy/example-cloaking-rules.txt /etc/dnscrypt-proxy/cloaking-rules.txt
然后编辑该文件,并添加您喜欢的行
www.google.* forcesafesearch.google.com www.youtube.com restrictmoderate.youtube.com m.youtube.com restrictmoderate.youtube.com youtubei.googleapis.com restrictmoderate.youtube.com youtube.googleapis.com restrictmoderate.youtube.com www.youtube-nocookie.com restrictmoderate.youtube.com
然后使用以下命令重启服务
rc-service dnscrypt-proxy restart
更通用的过滤
可以基于服务器的属性进行更通用的过滤,例如仅选择不记录日志的服务器;谷歌会记录对其服务器发出的查询,即使是加密的查询。这在这里进行了解释: [1]。
可以根据以下属性进行选择
# Use servers reachable over IPv4 ipv4_servers = true # Use servers reachable over IPv6 -- Do not enable if you don't have IPv6 connectivity ipv6_servers = false # Use servers implementing the DNSCrypt protocol dnscrypt_servers = true # Use servers implementing the DNS-over-HTTPS protocol doh_servers = true # Do not use servers implementing the Oblivious DNS-over-HTTPS protocol odoh_servers = false # Server must support DNS security extensions (DNSSEC) require_dnssec = false # Server must not log user queries (declarative) require_nolog = true # Server must not enforce its own blacklist (for parental control, ads blocking...) require_nofilter = true # Skip resolvers incompatible with anonymization instead of using them directly skip_incompatible = false
匿名 DNS 和隐匿 DoH
匿名 DNS 是为 dnscrypt 协议指定的;配置详情请见此处: [2]
匿名 DNS 使用“中继”来传递请求。请求首先为目标解析器加密,然后为“中继”节点加密。中继不知道请求的内容(因为它已为最终解析器加密)。解析器不知道请求的来源(因为来源是“中继”)。响应也以类似方式加密,因此中继和解析器都无法将查询映射到客户端。
隐匿 DoH 为 DoH 协议的变体实现了相同的目的,其配置在此处进行了解释: [3]
引用的链接会随时更新,以提供兼容的服务器和配置选项。