#dns-server #dns #proxy #proxy-server #encryption #doh #dnscrypt

app encrypted-dns

一个现代加密DNS服务器(DNSCrypt v2,匿名DNSCrypt,DoH)

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网络编程 中排名

Download history 2/week @ 2024-05-19 6/week @ 2024-06-02 174/week @ 2024-06-16 1/week @ 2024-06-23 6/week @ 2024-06-30 197/week @ 2024-07-28 1/week @ 2024-08-11

198 每月下载量

MIT 许可证

125KB
3K SLoC

Encrypted DNS Server

Github CI status Gitter chat

一个易于安装、高性能、零维护的代理,用于运行加密DNS服务器。

Dashboard

协议

该代理支持以下协议

所有这些都可以同时在同一端口(通常是端口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_addrsprovider_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-proxyquery_meta配置值进行配置。

Prometheus指标

可以可选地启用Prometheus指标,以监控性能、缓存效率等。

匿名DNSCrypt

启用匿名DNSCrypt允许服务器作为加密DNS中继使用。

依赖项

~10–24MB
~320K SLoC