每次上网时你的 DNS 请求都在互联网上裸奔?没错,传统的 DNS 查询就像是在人来人往的大街上大声喊出你要去哪里一样。而且,谁知道途中会不会遇到一些"热心"的旁观者,悄悄地把你指向了错误的方向呢?这就是臭名昭著的 DNS 污染啦!
但别担心,我们有一个既酷又安全的解决方案:DNS over HTTPS(DOH)。想象一下,你的 DNS 请求穿上了一件隐形衣,悄悄地通过 HTTPS 的安全隧道溜到目的地。
Cloudflared为此提供了一个解决方案,本文将教你如何通过Cloudflarred实现在Linux上全局使用DOH.
1. 安装 Cloudflared
这里只介绍Debian系的安装方法,其它方法请前往文章末尾”参考文档”链接查看
- 添加 Cloudflare 的包签名密钥
mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
- 将 Cloudflare 的 apt 存储库添加到您的 apt 存储库
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
- 安装
sudo apt-get update && sudo apt-get install cloudflared
- 验证安装
cloudflared --version
如果有输出,说明安装成功
2. 测试
- 执行
cloudflared proxy-dns
默认情况下是在 localhost:53 开放端口可以通过 --address 和 --port 指定上游 DOH 服务器默认使用Cloudflare的 1.1.1.1 和 1.0.0.1
可以使用 --upstream 指定,例如
cloudflared proxy-dns --upstream https://9.9.9.9/dns-query
- 测试
保持cloudflared仍在运行,可以后台再开一个SSH或终端
执行
dig @127.0.0.1 google.com
如果正确解析到ip地址,则算成功
可以关闭cloudflared了
3. 部署
- 设置服务
为了使其在开机自动启动和更方便的管理,所以需要将cloudflared设置为服务
使用喜欢的编辑器打开 /etc/systemd/system/cloudflared-proxy-dns.service
写入以下内容
[Unit]Description=DNS over HTTPS (DoH) proxy client
Wants=network-online.target nss-lookup.target
Before=nss-lookup.target
[Service]AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
DynamicUser=yes
ExecStart=/usr/local/bin/cloudflared proxy-dns
[Install]
WantedBy=multi-user.target
其中 ExecStart= 后面的部分为启动命令,可以改为测试时的命令,更改端口、地址、上游DOH等
端口需要是 53,也就是默认端口
保存后执行此命令来启用并启动服务
sudo systemctl enable --now cloudflared-proxy-dns
- 设置DNS
用喜欢的文件编辑器打开 /etc/resolv.conf 删去其他 nameserver
写入 nameserver 127.0.0.1
保存并退出
现在使用的就是DOH了
部分服务可能会将
/etc/resolv.conf改回去,注意关闭这类服务或者修改配置,防止被更改
4. 修改配置
如果需要修改配置,如上游DOH,端口等
- 修改启动命令
用喜欢的编辑器打开之前的 /etc/systemd/system/cloudflared-proxy-dns.service 按需要修改即可,务必保存
2. 重新加载配置文件
systemctl daemon-reload
- 重启服务
systemctl restart cloudflared-proxy-dns
参考文档:
- 官方文档
2. 官方安装文档
作者: 小焰
链接: 在 Linux 使用 DOH(DNS over HTTPS) | Sakura Homura 的垃圾桶
声明: 本文采用 CC BY-NC-SA 4.0 许可协议,转载请标明出处。
本转载已经过作者授权。