在Linux系统上一键配置DoH,解决DNS解析被污染

news/2025/10/2 11:33:55/文章来源:https://www.cnblogs.com/deali/p/19123387

前言

最近我的 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 之类的工具测试没问题的话,可以进入下一步。

添加服务

创建 systemd service,让 cloudflared 常驻运行

sudo nano /etc/systemd/system/cloudflared-dns.service

内容:

[Unit]
Description=Cloudflared DNS over HTTPS proxy
After=network.target[Service]
ExecStart=/usr/local/bin/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 \--upstream https://doh.pub/dns-query \--upstream https://dns.pub/dns-query
Restart=always
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE[Install]
WantedBy=multi-user.target

应用 & 启动

sudo systemctl daemon-reexec
sudo systemctl enable --now cloudflared-dns

配置DNS

使用 drop-in 配置的方式来设置 DNS

不要直接改 /etc/systemd/resolved.conf

sudo mkdir -p /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/dns.conf

内容:

[Resolve]
DNS=127.0.0.1:5053
FallbackDNS=223.5.5.5 223.6.6.6
DNSSEC=no

重启服务

sudo systemctl restart systemd-resolved

检查生效情况

resolvectl status

可以看到以下输出

$ resolvectl status
GlobalProtocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupportedresolv.conf mode: stubDNS Servers: 127.0.0.1:5053
Fallback DNS Servers: 223.5.5.5 223.6.6.6

这时候就搞定了,docker容器也会默认使用系统的这个 DNS

此时再去 swag renew 证书,就成功了✌️

一键脚本

老规矩,我让大模型爷爷帮忙写了一个一键配置DoH的脚本

默认使用从官方 GitHub 仓库下载 deb 包安装的方式

可以直接执行

bash -c "$(curl -fsSL https://gist.github.com/Deali-Axy/8b2ad8e5a601f2c43f6e7debdfb0aa29/raw/3c57dbce7dc0e224ad4ad35606f15cbc34d4810e/install-doh.sh)"

脚本源码

#!/usr/bin/env bash
set -eecho "[1/6] 安装 cloudflared..."
if ! command -v cloudflared >/dev/null 2>&1; thenwget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -O /tmp/cloudflared.debsudo dpkg -i /tmp/cloudflared.deb || sudo apt-get install -f -yrm -f /tmp/cloudflared.deb
elseecho "cloudflared 已安装,跳过。"
fiCLOUDFLARED_BIN=$(command -v cloudflared)
echo "cloudflared 路径: $CLOUDFLARED_BIN"echo "[2/6] 创建 systemd service..."
sudo tee /etc/systemd/system/cloudflared-dns.service >/dev/null <<EOF
[Unit]
Description=Cloudflared DNS over HTTPS proxy
After=network.target[Service]
ExecStart=${CLOUDFLARED_BIN} 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 \--upstream https://doh.pub/dns-query \--upstream https://dns.pub/dns-query
Restart=always
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE[Install]
WantedBy=multi-user.target
EOFecho "[3/6] 重新加载 systemd 并启用服务..."
sudo systemctl daemon-reexec
sudo systemctl enable --now cloudflared-dnsecho "[4/6] 配置 systemd-resolved..."
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo tee /etc/systemd/resolved.conf.d/dns.conf >/dev/null <<EOF
[Resolve]
DNS=127.0.0.1:5053
FallbackDNS=223.5.5.5 223.6.6.6
DNSSEC=no
EOFecho "[5/6] 重启 systemd-resolved..."
sudo systemctl restart systemd-resolvedecho "[6/6] 检查 DNS 配置..."
resolvectl status | grep "DNS Servers"echo "✅ 安装完成!现在系统 DNS 已经走 DoH。"

将以上代码保存为 install-doh.sh

运行

chmod +x install-doh.sh
./install-doh.sh

脚本会自动:

  1. 下载并安装 cloudflared
  2. 写入 systemd 服务文件并启动
  3. 配置 systemd-resolved
  4. 自动重启相关服务并检查生效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费网站源码下载器网站开发报价文件

介绍 ai查询 在Java中&#xff0c;动态数组通常通过ArrayList类来实现&#xff0c;它是Java集合框架&#xff08;Java Collections Framework&#xff09;的一部分。ArrayList是一个可调整大小的数组实现&#xff0c;提供了比标准数组更多的灵活性和功能。 以下是使用ArrayLis…

大连模板网站制作哪家专业天津专业网站制作流程优势

目录 一.Python 线程队列 Queue 分类二.Python 线程优先队列 PriorityQueue 简介三.Python 线程优先队列 PriorityQueue 函数介绍四.Python 线程优先队列 PriorityQueue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 线程队列…

服务器搭建网站方案500字淮北人论坛招聘信息

预算2014年院线预算 影城&#xff08;多选&#xff09;北京CBD影城 查询 科目蚌埠万达广场店北京CBD影城  营业收入11 票房收入11 卖品收入00 逾期收入00 广告收入00 映前广告00 LCD广告00 阵地收入00 IMAX广告收入00 其他广告收入00 其…

网页设计制作网站模板图片自己做的网站放在服务器哪里

文章目录 一、绪论1.1、数据结构的基本概念1.2、数据结构三要素1.2.1、逻辑结构1.2.2、数据的运算1.2.3、物理结构&#xff08;存储结构&#xff09;1.2.4、数据类型和抽象数据类型 二、算法的基本概念2.1、算法的特性2.2、“好”算法的特质2.2.1、算法时间复杂度2.2.2、算法空…

网站商城微信支付wordpress大前端2.0

V90伺服驱动器其它相关介绍,请参考V90控制专栏,常用地址如下: V90 Epos模式下点动控制 https://rxxw-control.blog.csdn.net/article/details/134263795https://rxxw-control.blog.csdn.net/article/details/134263795绝对定位往复运动可以参考下面文章链接: https://rx…

《电路基础》第五章学习笔记

《电路基础》第五章学习笔记本章主要介绍运算放大器。 一个特性与电压控制电压源类似的电子元件。可以对信号进行相加、放大、积分和微分。可以看作增益非常高的电压放大器。运算放大器定义: 运算放大器是一个用于执行…

完整教程:C 语言各种指针详解

完整教程:C 语言各种指针详解2025-10-02 11:23 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

51单片机-实现DAC(PWM)数模转换PWM控制呼吸灯、直流电机实验教程 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Elasticsearch集群监控信息(亲测) - 教程

Elasticsearch集群监控信息(亲测) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

基于Java springboot农村政务服务管理便捷的系统(源码+文档+运行视频+讲解视频)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

三木做网站初中校园网站建设制度

Java面向对象编程篇3——接口与抽象类 1、接口&#xff08;interface&#xff09; 接口中可以含有变量和方法。但是要注意&#xff0c;接口中的变量会被隐式地指定为public static final变量&#xff08;并且只能是public static final变量&#xff0c;用private修饰会报编译…

Matplotlib子图布局与响应式设计实战:GridSpec与CSS框架深度结合 - 教程

Matplotlib子图布局与响应式设计实战:GridSpec与CSS框架深度结合 - 教程2025-10-02 11:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: a…

专做机械类毕业设计的网站网站如何备案流程图

由于Vmware虚拟网卡和linux兼容问题导致驱动无法正常安装&#xff0c;默认的网卡类型不兼容. 解决方法 找到我们的Vmware虚拟机文件夹&#xff0c;将VMware 虚拟机配置 (.vmx)&#xff0c;追加一条设置我们网卡类型 ethernet0.virtualDev "e1000" 原因 VMware 都在虚…

怎样建一个好的网站万能素材

一、触摸事件&#xff1a; 1.touchstart&#xff1a;手指刚接触屏幕时触发。 2.touchmove:手指在屏幕上移动时触发。 3.touchend:手指移开屏幕时触发。 eg: var span document.getElementsByTagName(“span”)[0]; var div document.getElementsByTagName(“div”)[0]; //手指…

做网站卖东西赚钱吗华为应用商店下载安装

算法&#xff1a;输入一个链表&#xff0c;输出该链表中倒数第k个结点。《剑指offer》 思路加到注释里面了&#xff1b; 1&#xff1a;两个if判断是否返回值为空&#xff0c;首个为空&#xff0c;没有第k个值&#xff1b; 2&#xff1a;for循环找到倒数第k个值&#xff0c;返回…

一般做网站需要多少钱网站设计知识

动态规划算法&#xff08;DP&#xff09;&#xff1a;在马尔可夫决策过程&#xff08;MDP&#xff09;的完美环境模型下计算最优策略。但其在强化学习中实用性有限&#xff0c;其一是它是基于环境模型已知&#xff1b;其二是它的计算成本很大。但它在理论伤仍然很重要&#xff…

那个网站平台可以做兼职网页设计尺寸1440

Canvas是什么&#xff1f;怎样写Canvas&#xff1f; Canvas是HTML5的一个元素&#xff0c;它使用JavaScript在网页上绘制图形。Canvas是一个矩形区域。它的每一个像素都可以由HTML5语言来控制。使用Canvas绘制路径、框、圆、字符和添加图像有几种方法。 如果要在我们的HTML文…

tp网站开发东莞做网站公司首选

来源&#xff1a;网络大数据摘要&#xff1a;在智慧城市建设中&#xff0c;以支持政府决策为名的大数据中心建设如火如荼&#xff0c;但利用大数据改进决策的成功案例却鲜有&#xff0c;与大数据中心的投资不成比例&#xff0c;令人质疑大数据中心遍地开花模式的合理性。一、政…

色彩搭配 网站学校网站建设市场

写时复制和写时拷贝是一个意思写时复制是一种策略&#xff0c;并不是Linux独有的&#xff0c;如果你正在设计某个系统架构&#xff0c;也可以参考这种思想。写时复制的英文解释如下Copy-on-write (sometimes referred to as "COW") is an optimization strategy used…

2025超声波清洗机厂家TOP企业品牌推荐排行榜,龙门式,悬挂式,全自动,多臂式,多槽式,履带式,通过式,单槽式,摆动式,平移式超声波清洗机公司推荐!

随着电子、机械、医疗、汽车、新能源等精密制造行业的快速发展,对零部件清洗的精度、效率和环保要求日益提升,超声波清洗机作为关键清洗设备,市场需求持续增长。然而,当前超声波清洗机市场品牌众多,产品质量与服务…