Linux系统如何一键配置DoH,防止DNS被污染?
摘要:前言 最近我的 swag 服务突然证书 renew 失败 诊断了一下发现原来是无法解析 acme-v02.api.letsencrypt.org 域名 换了几个 DNS 都不行,应该是 DNS 被污染或者劫持了 这时我才意识到不上 DoH
前言
最近我的 swag 服务突然证书 renew 失败
诊断了一下发现原来是无法解析 acme-v02.api.letsencrypt.org 域名
换了几个 DNS 都不行,应该是 DNS 被污染或者劫持了
这时我才意识到不上 DoH/DoT 怕是没办法了🤣
本文记录一下用一种简单的方法在服务器上实现 DoH/DoT
DoH/DoT
简单科普一下,DNS 是用来把网站解析到IP地址的协议
正常的 DNS 是明文传输,很容易被污染或者劫持
DoH 是 DNS over HTTPS,走加密的 HTTPS 流量(443 端口),看起来就像访问网页一样,不容易被污染或者劫持
除此之外还有 DoT(DNS over TLS)、ODoH(Oblivious DoH,隐私更强),都是更加安全的域名解析方式
cloudflared
https://github.com/cloudflare/cloudflared
这是 Cloudflare 官方开源的一个 Cloudflare Tunnel 客户端,用 go 语言开发的,非常容易安装部署。
简介
这个客户端不仅可以接入 Tunnel 实现内网穿透,还可以实现 DoH 代理
本文使用这个工具来实现 DoH 配置
安装
Ubuntu Server 的官方软件源没有这个工具
需要添加 Cloudflare 官方 APT 源
# 1. 添加 GPG key
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg > /dev/null
# 2. 添加软件源
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared jammy main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
# 3. 更新并安装
sudo apt update
sudo apt install cloudflared
也可以直接下载 DEB 包安装
# 1. 下载 cloudflared 最新 deb 包
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
# 2. 安装
sudo dpkg -i cloudflared-linux-amd64.deb
# 3. 验证
cloudflared --version
测试
安装好以后,运行:
sudo cloudflared proxy-dns --address 127.0.0.1 --port 5053
测试一下:
dig @127.0.0.1 -p 5053 acme-v02.api.letsencrypt.org
如果能返回解析结果,就说明成功了
这里默认使用的是 Cloudflare 官方的 DoH
如果不行的话,可以换成国内的 DoH 服务
比如阿里:
https://223.5.5.5/dns-query
https://223.6.6.6/dns-query
比如腾讯:
https://doh.pub/dns-query
https://dns.pub/dns-query
示例
sudo cloudflared proxy-dns --address 127.0.0.1 --port 5053 \
--upstream https://223.5.5.5/dns-query \
--upstream https://223.6.6.6/dns-query
用 dig 或者 nslookup 之类的工具测试没问题的话,可以进入下一步。
