57个版本
0.9.16 | 2024年6月16日 |
---|---|
0.9.14 | 2024年1月17日 |
0.9.13 | 2023年7月15日 |
0.9.12 | 2023年1月30日 |
0.3.9 | 2019年11月20日 |
#516 在 网络编程 中排名
198 每月下载量
125KB
3K SLoC
一个易于安装、高性能、零维护的代理,用于运行加密DNS服务器。
协议
该代理支持以下协议
- DNSCrypt v2
- 匿名DNSCrypt
- DNS-over-HTTP (DoH) 转发
所有这些都可以同时在同一端口(通常是端口443)上提供服务。代理会自动检测每个客户端使用的协议。
安装
选项1:预编译的x86_64二进制文件
Debian软件包、Linux和Windows的存档可以在这里下载。
无需安装其他内容。服务器不需要任何外部依赖。
在Debian软件包中,示例配置文件位于/usr/share/doc/encrypted-dns/
。
选项2:从源代码编译
代理需要rust >= 1.0.39或rust-nightly。
Rust可以通过以下方式安装
curl -sSf https://sh.rustup.rs | bash -s -- -y --default-toolchain nightly
source $HOME/.cargo/env
安装rust后,可以按照以下方式编译和安装代理
cargo install encrypted-dns
strip ~/.cargo/bin/encrypted-dns
默认情况下,可执行文件将被复制到~/.cargo/bin/encrypted-dns
。
选项3:Docker
dnscrypt-server-docker 是部署加密DNS服务器最流行的方式。
这个Docker镜像包含一个缓存DNS解析器、加密DNS代理和自动配置一切所需的脚本。
设置
代理需要一个递归DNS解析器,如Knot、PowerDNS或Unbound。
该解析器可以在本地运行,并且只对127.0.01
做出响应。也可以使用外部解析器,如Quad9或Cloudflare DNS,但由于速率限制,这可能不太可靠。
为了支持DNSCrypt以外的DoH,还需要运行一个DoH代理。推荐使用rust-doh作为DoH代理服务器。由于证书管理比较复杂,DoH支持是可选的,比DNSCrypt设置更复杂。
将配置文件example-encrypted-dns.toml
复制一份,命名为encrypted-dns.toml
。
然后,查看encrypted-dns.toml
文件。这里可以配置所有参数,包括监听的IP地址。
您可能至少需要更改listen_addrs
和provider_name
设置。
启动代理。如果没有,它将自动创建一个新的提供者密钥对。
打印DNS戳记。它们可以直接与dnscrypt-proxy
一起使用。
没有其他事情要做。证书将自动生成和轮换。
从dnscrypt-wrapper迁移
如果您目前使用dnscrypt-wrapper
运行加密DNS服务器,迁移到新的代理很简单
- 请确保
encrypted-dns.toml
中的提供者名称与之前配置的一致。如果您忘记了,它可以从其DNS戳记中恢复。 - 运行
encrypted-dns --import-from-dnscrypt-wrapper secret.key
,其中secret.key
是包含dnscrypt-wrapper
提供者密钥的文件。
完成。您的服务器现在正在运行新的代理。
内置DNS缓存
代理包括密钥缓存,以及DNS缓存,可以显著减少对上游服务器的负载。
此外,如果服务器速度慢或无响应,过期的缓存查询将被返回,确保流行的域名始终被提供服务。
状态文件
代理默认创建并更新名为encrypted-dns.state
的文件。该文件包含提供者密钥,以及证书和加密密钥。
除非您想更改参数(例如提供者名称),否则不要删除该文件,并保持其机密性,否则密钥将会丢失。
将其放在只有超级用户可读的目录中是个不错的主意。
过滤
可以通过代理直接过滤域名,请参阅配置文件中的[filtering]
部分。注意:过滤仅在DNSCrypt协议中工作,不适用于DNS-over-HTTP(DoH)转发。
访问控制
可以在[access_control]
部分启用访问控制,并使用dnscrypt-proxy
的query_meta
配置值进行配置。
Prometheus指标
可以可选地启用Prometheus指标,以监控性能、缓存效率等。
匿名DNSCrypt
启用匿名DNSCrypt允许服务器作为加密DNS中继使用。
依赖项
~10–24MB
~320K SLoC