DNSCrypt-Proxy

出自 阿尔派 Linux

概述

本文简要介绍了如何在 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

注意: 如果您是从 RAM 运行,请确保根据需要使用“lbu ci”命令保存您的设置。请参阅 Alpine 本地备份
注意: 配置选项显示在 /etc/dnscrypt-proxy/dnscrypt-proxy.toml 中。该文件包含解释许多选项的注释。

另请参阅 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。删除此行开头的“#”

  1. 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]

引用的链接会随时更新,以提供兼容的服务器和配置选项。