跳到正文
发现
doh-server:DoH/ODoH 服务端代理
命令行工具开发者工具

doh-server:DoH/ODoH 服务端代理

用 Rust 编写的 DoH 与 ODoH 服务端代理,可为任意 DNS 解析器补上加密查询能力。

admin
发布于 2026-11-02
浏览
1
访问
0
下载
0
版本
v0.11.1
平台
Linux
该作品还没有经过官方审核。访问演示、下载或复制命令前,请自行确认来源可信。

详细介绍

项目简介

doh-proxy(仓库名 doh-server)是一个用 Rust 编写的高性能 DoH(DNS-over-HTTPS)与 ODoH(Oblivious DoH)服务端代理。它自身不做 DNS 解析,而是部署在任意 DNS 解析器前面,为这个解析器增加 DoH 能力。项目自 2018 年 2 月起在生产环境使用,采用 MIT 许可证。

主要功能

  • DoH:通过 HTTPS 加密 DNS 查询
  • JSON API:兼容 Google DNS-over-HTTPS JSON API 格式
  • ODoH:隐藏客户端 IP 地址,进一步提升隐私
  • EDNS Client Subnet:把客户端 IP 信息转发给上游解析器,以获取地理优化的结果
  • 高性能:基于 Rust 与 Tokio 构建
  • 部署灵活:可独立运行并使用内置 TLS,也可放在反向代理后面
  • 多 IP 支持:可指定多个外部 IP 实现负载均衡,并为每个 IP 生成独立的 DNS stamp
  • 证书自动重载:TLS 证书更新后无需重启、无需停机
  • 可配置缓存:可设置 TTL 的最小值与最大值,以及错误 TTL

安装与使用

Linux 平台的预编译压缩包与 Debian 包可在 releases 页面下载;从源码安装需要先安装 Rust 编译器:

cargo install doh-proxy

如不需要内置 HTTPS 支持:

cargo install doh-proxy --no-default-features

最简用法:默认监听 127.0.0.1:3000,把请求转发给本地的 DNS 解析器:

doh-proxy -H 'doh.example.com' -u 127.0.0.1:53

使用内置 TLS 独立运行:

doh-proxy -H 'doh.example.com' -u 127.0.0.1:53 -l 0.0.0.0:443 -i /path/to/fullchain.pem -I /path/to/privkey.pem

常用参数:-l 监听地址(默认 127.0.0.1:3000)、-p URI 路径(默认 /dns-query)、-c 最大客户端连接数(默认 512)、-C 每客户端最大并发请求数(默认 16)、-t 请求时间预算(默认 10 秒)、-X / -T 最大与最小 TTL。

推荐部署方式是把 doh-proxy 放在 nginx、Caddy、HAProxy 或 CDN 等负责 TLS 终止的反向代理后面,这样可以与现有网站共享 443 端口、复用证书管理,并获得反向代理提供的 HTTP/2、HTTP/3 与限流能力。例如 nginx:

location /dns-query {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

JSON API 可直接用 curl 测试:

curl -H "Accept: application/dns-json" "http://localhost:3000/dns-query?name=example.com&type=1"

注意事项

  • 内置 TLS 要求证书与私钥为 PEM/PKCS#8 格式;若 ECDSA 证书以 -----BEGIN EC PRIVATE KEY----- 开头,需要先用 openssl pkcs8 转换成 PKCS#8。
  • 一旦启用 HTTPS,就不再接受 HTTP 连接。仓库提供一个自签名测试证书 localhost.pem 可用于测试。
  • 放在 nginx 后面时,建议使用带 keepalive 的 upstream 块复用连接,并启用 proxy_next_upstream ... non_idempotent,避免后端关闭空闲连接时请求失败;DoH 与 ODoH 查询可安全重试。
  • 请求超时、连接数上限等参数需根据实际负载调整,过短的超时会在压力下更早关闭空闲连接。

本作品整理自 GitHub 开源项目 DNSCrypt/doh-server,原作者 @DNSCrypt,许可证 MIT。中文介绍由 AI 根据项目 README 整理,以原仓库为准。

更新记录

  1. v0.11.1当前版本

    同步自 GitHub Release 0.11.1

评论