Linux安装DOH解析服务

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
喜欢就支持一下吧
点赞15 分享