DoH(DNS over HTTPS)服务搭建方案,分为两类:
🧩 第一类:通过下载安装包安装(系统方式)
我们将使用 dnscrypt-proxy 来搭建 DoH 服务,它支持本地转发 DNS 并提供 DoH 服务能力。
✅ A. Ubuntu 与 Debian 安装方案对比说明
| 项目 | Ubuntu | Debian |
|---|---|---|
| 包管理器 | apt(附带 universe 软件源) |
apt(部分旧版本包更少) |
| 系统默认组件 | systemd,Netplan(网络配置) | systemd 或 sysvinit,传统 ifupdown |
dnscrypt-proxy 可用性 |
新版本通常可用或编译较新 | 部分老版本源中无,需要手动下载 |
| 证书工具 | certbot、snap 安装方便 |
需要额外安装 python3-certbot-nginx |
📦 1. 下载与安装 dnscrypt-proxy(适用于 Ubuntu 和 Debian)
步骤 1:下载安装
cd /opt
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/latest/download/dnscrypt-proxy-linux_x86_64.tar.gz
tar -xzf dnscrypt-proxy-linux_x86_64.tar.gz
cd linux-x86_64
sudo cp dnscrypt-proxy /usr/local/bin/
sudo mkdir -p /etc/dnscrypt-proxy
sudo cp example-dnscrypt-proxy.toml /etc/dnscrypt-proxy/dnscrypt-proxy.toml
步骤 2:配置文件
修改 /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
listen_addresses = ['127.0.0.1:5053']
doh_server_names = ['doh.mydomain.com']
doh_certificate_file = '/etc/letsencrypt/live/doh.mydomain.com/fullchain.pem'
doh_private_key_file = '/etc/letsencrypt/live/doh.mydomain.com/privkey.pem'
步骤 3:创建 systemd 服务
sudo tee /etc/systemd/system/dnscrypt-proxy.service > /dev/null <<EOF
[Unit]
Description=dnscrypt-proxy
After=network.target
[Service]
ExecStart=/usr/local/bin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reexec
sudo systemctl enable --now dnscrypt-proxy
🧩 第二类:通过 Docker 安装
📌 方案 A:普通 Docker 方式安装
步骤 1:拉取镜像
docker pull jedisct1/dnscrypt-server
注意: 这是原始 dnscrypt-server 镜像(包含 DoH 功能)。
步骤 2:运行容器
docker run -d --name doh-server \
-p 443:443 \
-p 80:80 \
-e TZ=Asia/Shanghai \
-v /etc/letsencrypt:/certs:ro \
jedisct1/dnscrypt-server \
doh.example.com 192.168.1.1:53 \
--cert=/certs/live/doh.example.com/fullchain.pem \
--key=/certs/live/doh.example.com/privkey.pem
说明:
-
doh.example.com是你绑定证书的域名 -
192.168.1.1:53是后端 DNS 的地址(如 unbound、本地 dnsmasq) -
/certs是 Let’s Encrypt 的证书挂载路径
📌 方案 B:Docker Compose 安装
步骤 1:编写 docker-compose.yml
version: '3'
services:
doh:
image: jedisct1/dnscrypt-server
container_name: doh-server
restart: always
ports:
- "443:443"
- "80:80"
volumes:
- /etc/letsencrypt:/certs:ro
command: >
doh.example.com 192.168.1.1:53
--cert=/certs/live/doh.example.com/fullchain.pem
--key=/certs/live/doh.example.com/privkey.pem
步骤 2:启动服务
docker-compose up -d
📌 建议配置结构图
+-----------+
DNS Req. >| Client |
+-----+-----+
|
+-----v------+
| nginx | <-- 反向代理 /dns-query
+-----+------+
|
+--------v--------+
| dnscrypt-proxy | <-- DoH 服务提供者
+--------+--------+
|
+-----v------+
| unbound | <-- 本地递归 DNS
+------------+
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
