Ubuntu22.04使用dnscrypt-proxy配置DoH(DNS)教程
Ubuntu22.04使用dnscrypt-proxy配置DoH(DNS)教程
特殊说明:
1.无法关闭53端口,通过转发5353端口实现。
2.假设域名为poiu.abcde.xyz,使用此教程前把域名替换为自己的即可
第一步:登录服务器与安装 dnscrypt-proxy
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl tar nano micro systemd ufw
#手动下载并安装 dnscrypt-proxy,前往其 GitHub Releases 页面检查最新的 linux_x86_64 版本号
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.1.12/dnscrypt-proxy-linux_x86_64-2.1.12.tar.gz
tar -xf dnscrypt-proxy-linux_x86_64-2.1.12.tar.gz
cd linux-x86_64
sudo mv dnscrypt-proxy /usr/local/bin/
sudo mkdir -p /etc/dnscrypt-proxy
sudo mv example-dnscrypt-proxy.toml /etc/dnscrypt-proxy/dnscrypt-proxy.toml
第二步:获取 SSL 证书
#使用 Certbot 获取 SSL 证书,以实现 DoH 的 HTTPS 加密,先安装 Certbot 和 Cloudflare 插件:
sudo apt install -y certbot python3-certbot-dns-cloudflare
#创建 Cloudflare API 令牌文件:
sudo mkdir -p /etc/cloudflare
sudo micro /etc/cloudflare/cloudflare.ini
#在/etc/cloudflare/cloudflare.ini文件中输入 Cloudflare API 令牌信息,务必使用权限受限的 API 令牌,而非全局 API Key。在cloudflare中找到Edit zone DNS——权限(Permissions):区域(Zone) -> DNS -> 编辑(Edit)—— 区域资源(Zone Resources):选择“包括”(Include) -> “所有区域”(All zones),或者精确地选择 abcde.xyz 这个区域(此处注意要使用主域名)——Operator(is in)-> Value为服务器ip地址——其他不要改动按提示进入下步获得 cloudflare_api_token。cloudflare.ini文件内容如下:
dns_cloudflare_api_token = “cloudflare_api_token” #修改后保存退出
#设置文件权限:
sudo chmod 600 /etc/cloudflare/cloudflare.ini
#获取证书,注意替换邮箱地址:
sudo certbot certonly –dns-cloudflare –dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini -d poiu.abcde.xyz –agree-tos –email [email protected] -n
#检查证书位置是否一致
Certificate is saved at: /etc/letsencrypt/live/poiu.abcde.xyz/fullchain.pem
Key is saved at: /etc/letsencrypt/live/poiu.abcde.xyz/privkey.pem
第三步:核心配置与端口重定向
#采用端口重定向的方案来解决端口 53 冲突,打开配置文件 /etc/dnscrypt-proxy/dnscrypt-proxy.toml
1.找到listen_addresses行修改为如下内容
listen_addresses [‘127.0.0.1:5353’, ‘[::1]:5353’]
2.找到server_names 处,确保您选择了上游 DNS 服务器,例如:
server_names = [‘cloudflare’, ‘google’]
3. 在文件中找到 [local_doh] 部分(注意是 [local_doh] 而不是 [doh]),按照如下方式配置证书和密钥
[local_doh]
listen_addresses = [‘0.0.0.0:443’]
path = ‘/dns-query’
cert_file = “/etc/letsencrypt/live/poiu.abcde.xyz/fullchain.pem”
cert_key_file = “/etc/letsencrypt/live/poiu.abcde.xyz/privkey.pem”
4.添加端口重定向规则,在命令行中执行:
sudo iptables -t nat -A OUTPUT -p udp -d 127.0.0.1 –dport 53 -j REDIRECT –to-port 5353
sudo iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 –dport 53 -j REDIRECT –to-port 5353
5.配置系统 DNS:修改 /etc/resolv.conf 文件,将其内容设置为:
nameserver 127.0.0.1
第四步:创建 Systemd 服务与防火墙配置
#创建服务文件:
sudo micro /etc/systemd/system/dnscrypt-proxy.service
#添加以下内容:
[Unit]
Description=DNSCrypt-proxy
After=network.target
[Service]
ExecStart=/usr/local/bin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
Restart=always
[Install]
WantedBy=multi-user.target
#启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
sudo systemctl status dnscrypt-proxy
sudo journalctl -u dnscrypt-proxy.service –no-pager #在不能运行时进行检测
#配置防火墙 (UFW):
sudo ufw allow 5353/tcp
sudo ufw allow 5353/udp
sudo ufw allow 443/tcp
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw enable
第五步:服务器测试与客户端配置
1.服务器内部测试 (SSH到VPS):
sudo systemctl status dnscrypt-proxy.service
sudo journalctl -u dnscrypt-proxy.service
dig google.com @127.0.0.1
curl -H “Accept: application/dns-json” “https://poiu.abcde.xyz/dns-query?name=google.com“
2.外部客户端测试 (在本地电脑上):
curl -H “Accept: application/dns-json” “https://poiu.abcde.xyz/dns-query?name=google.com“
3.浏览器访问 https://poiu.abcde.xyz/dns-query 显示安全锁,并反馈dnscrypt-proxy local DoH server
4.Firefox配置:在 设置 -> 网络设置 -> 启用基于 HTTPS 的 DNS 中设置为 自定义(建议使用最大保护),并输入https://poiu.abcde.xyz/dns-query,至此可用,可以打开https://ipleak.net/网站进行测试