惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
博客园 - 司徒正美
Microsoft Azure Blog
Microsoft Azure Blog
J
Java Code Geeks
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
Blog — PlanetScale
Blog — PlanetScale
G
Google Developers Blog
WordPress大学
WordPress大学
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
T
Tor Project blog
阮一峰的网络日志
阮一峰的网络日志
Recent Commits to openclaw:main
Recent Commits to openclaw:main
The Hacker News
The Hacker News
F
Full Disclosure
有赞技术团队
有赞技术团队
H
Help Net Security
Security Latest
Security Latest
P
Palo Alto Networks Blog
MyScale Blog
MyScale Blog
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
P
Privacy International News Feed
P
Proofpoint News Feed
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
罗磊的独立博客
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
Latest news
Latest news
Jina AI
Jina AI
Stack Overflow Blog
Stack Overflow Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Hacker News: Ask HN
Hacker News: Ask HN
爱范儿
爱范儿
T
Threat Research - Cisco Blogs
Last Week in AI
Last Week in AI
The Last Watchdog
The Last Watchdog
N
Netflix TechBlog - Medium
D
DataBreaches.Net
L
LINUX DO - 热门话题
Application and Cybersecurity Blog
Application and Cybersecurity Blog
L
Lohrmann on Cybersecurity
O
OpenAI News
S
SegmentFault 最新的问题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

Liups233の小站

YubiKey OpenPGP 智能卡使用指南 - Liups233の小站 通过 WKD / OPENPGPKEY DNS 记录部署 GPG 公钥 - Liups233の小站 OpenLiteSpeed 安装与建站配置 详细教程 - Liups233 WordPress 7.0 编辑器改回无衬线字体 - Liups233の小站 Redis 数据库权限与 Unix Socket 配置 - Liups233の小站 Cloudflare 设置 mTLS 验证来源拉取 - Liups233の小站 Docker 自建 RustDesk 远程和 API 服务 - Liups233の小站 ChatGPT Go 印度区免费试用白嫖 1 年 - Liups233の小站 使用 S/MIME 证书签名并加密电子邮件 - Liups233の小站 为 WordPress 外发邮件添加 S/MIME 签名 - Liups233の小站 网站域名变更迁移教程/记录 - Liups233の小站 将动漫视频刻录为视频光盘-蓝光/AVCHD DVD - Liups233の小站 百乐 CUSTOM 912 钢笔使用体验 - Liups233の小站 使用 Cloudflare mTLS 用户端凭证保护博客登入页面 - Liups233の小站 Kobo 手动安装 NickelMenu 和 KOReader - Liups233の小站 Kobo 阅读器字典缺字解决 - Liups233の小站 iCloud+ 域名邮箱的注册和使用 - Liups233の小站 9 美元一年的通配符 SSL 证书 - Liups233の小站 宝塔面板 Nginx 启用 Brotli 和 Pagespeed - Liups233の小站 拷贝 DVD/Blu-ray 光盘并使用 MeGUI 压制 - Liups233の小站 Spotify 相较 Apple Music 的优点 - Liups233の小站 欧卡/美卡自定义手排挡位布局 - Liups233の小站 内地居民到港开户汇丰和中银香港全过程 - Liups233の小站 给光驱刷入 LibreDrive 固件解锁区域和加密限制 - Liups233の小站 个人博客适用的 Cloudflare 防火墙和缓存规则 - Liups233の小站 为Kobo阅读器添加Google Drive和Dropbox功能 - Liups233の小站 百乐 PILOT Capless Fermo 钢笔评测 - Liups233の小站 业余无线电 B 类考试笔记 - Liups233の小站 黑白阅读器的绝唱?Kobo Clara BW 简单评测 - Liups233の小站 八重洲 WIRES-X 网络注册与使用教程 - Liups233の小站 异世的同路人 — 恋语 Juliamo 游戏简评 - Liups233の小站 欢迎加入我的 FreeDMR 服务器 - Liups233の小站 低至 6 港币一年的 Club SIM eSIM 保号卡 - Liups233の小站 H310/H710(P)/H810 阵列卡刷写为直通模式 - Liups233の小站
使用 DNSCrypt-Proxy 为 Linux 配置加密 DNS - Liups233
Liups233 · 2026-05-25 · via Liups233の小站

前言

前几天给电脑折腾加密 DNS 的时候突然意识到,我还没有给我用过的所有 Linux 服务器设置过加密 DNS。为了增加点安全性,还是配置一下的好,毕竟自己电脑都会注意这些问题,没理由不在服务器上弄。本文会介绍如何在 RHEL 系发行版(以 AlmaLinux 10 为例)里通过 DNSCrypt-Proxy 设置 Cloudflare DNS over HTTPS,并配置 NetworkManager 服务来让系统 DNS 指向 DNSCrypt-Proxy。

对于 Debian 系,可以使用已经自带的 systemd-resolved 来配置 DNS over TLS(但不支持 DoH),也可以卸载 systemd-resolved 转而使用 DNSCrypt-Proxy,但我还是建议用系统自带的。另外,国内服务器用不了 Cloudflare 加密 DNS,请自行设置国内的加密 DNS 服务。

封面图来自 DNSCrypt / dnscrypt-proxy GitHub,版权声明见 ISC License

目录

安装前检查

由于我们会使用 53 端口为本机提供 DNS 服务,所以需要先检查是否有程序占用该端口:

# 需要安装 lsof 包
sudo lsof -i:53

如果没有返回任何结果就没问题。但如果有的话,就需要你看下是什么在占用了。当然也可以将 DNSCrypt-Proxy 的监听端口改为 53 以外的,但我懒得。

然后用 dig cloudflare-dns.com 检查下目前是否使用外部 DNS 来解析域名(需安装 bind-utils 包),只要不是本机 IP 就行,如图,目前使用的 1.1.1.1 来解析:

注意:如果你这里看到的 DNS 服务器是像 169.254.169.254 这样的 Instance Metadata Service IP,修改之后可能会影响内网其他 VPS 主机名的解析。如果你只有一台 VPS,或者愿意修改 hosts,那应该不影响。

dig 检查 DNS 服务器
dig 检查 DNS 服务器

安装

先启用 CRB 支持,并安装 epel-release 软件包来启用 EPEL 源(其它发行版方法可能不同):

sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release
sudo dnf update

然后安装 dnscrypt-proxy 包:

sudo dnf install dnscrypt-proxy

安装好后先将原有的配置备份一份,然后就可以开始修改配置文件了:

sudo cp /etc/dnscrypt-proxy/dnscrypt-proxy.toml /etc/dnscrypt-proxy/dnscrypt-proxy.toml.bak
sudo vim /etc/dnscrypt-proxy/dnscrypt-proxy.toml

修改配置

以下以带 IPv6 的服务器为例配置,如果只有 IPv4,则可以跳过所有和 IPv6 有关的配置项。

配置文件里注释也写的很清楚了,请按需自行修改,不一定完全要按照我的。

全局设置(修改 DNS 服务器和监听地址)

将第 30 行(Vim 使用 :set nu 可以看行号)的 server_names 注释删掉,改为以下这样,就可以使用 Cloudflare 加密 DNS 了:

server_names = ['cloudflare', 'cloudflare-ipv6']

具体有哪些 DNS 服务器可选,请访问 DNSCrypt DNS 服务器列表。然后将第 40 行的监听地址改为:

listen_addresses = ['127.0.0.1:53', '[::1]:53']

DNS 服务器选择(控制程序要使用符合哪些标准的 DNS 服务)

将第 66 行的 ipv6_servers = false 改为 ipv6_servers = true,表示程序可以使用 IPv6 的 DNS 服务器。

将 81 行的 require_dnssec = false 改为 require_dnssec = true,表示程序必须使用支持 DNSSEC 的 DNS 服务器。

连接设定(控制程序如何连接到 DNS 服务器)

http3 = false 改为 http3 = true,来让程序可以使用 HTTP/3 协议连接到 DNS 服务器(Cloudflare 是支持的),速度理论上更快。

http3_probe = false 改为 http3_probe = true,来让程序首选 HTTP/3 协议连接到 DNS 服务器,并在连接失败时退回 HTTP/2。

修改好后保存,然后创建一个缓存文件夹,再使用以下命令启动 DNSCrypt-Proxy,并设置开机自启:

sudo mkdir -p /var/cache/dnscrypt-proxy
sudo systemctl enable --now dnscrypt-proxy.service

接着可以用 sudo systemctl status dnscrypt-proxy.service 来查看日志。第一次启动耗时较长,因为程序会从网上下载目前的 DNS 列表。等看到 dnscrypt-proxy is ready 就行了,如图:

DNSCrypt-Proxy 启动成功
DNSCrypt-Proxy 启动成功

然后使用 dig @127.0.0.1 cloudflare-dns.com 检查下有没有返回查询信息,有就行。

配置 NetworkManager

我们可以直接使用 nmcli 工具来配置,先使用 sudo nmcli connection show 来找到连接外网使用的配置名称(注意,第一列是连接配置名称,最后一列才是网卡名称),如图:

nmcli 检查连接配置名称
nmcli 检查连接配置名称

此处以 cloud-init eth0(对应网卡为 eth0)为例:

sudo nmcli connection modify "cloud-init eth0" ipv4.dns "127.0.0.1" ipv6.dns "::1"
sudo nmcli connection modify "cloud-init eth0" ipv4.ignore-auto-dns yes ipv6.ignore-auto-dns yes
sudo nmcli connection up "cloud-init eth0"

然后使用以下两条命令来检查 DNS 是否设置成功:

sudo nmcli connection show "cloud-init eth0" | grep dns
dig cloudflare-dns.com

如果第一条命令返回的 ipv4.dnsipv6.dns 是对应的本地地址,并且 dig 所使用的 DNS 服务器也是本地地址即可。

nmcli 检查 DNS
nmcli 检查 DNS

检验

我们可以使用 tcpdump 命令(需要安装 tcpdump 包)来捕获经过外网网卡,且端口为 53 的流量:

sudo tcpdump -n -i eth0 port 53

开始监听后,我们打开一个新的 SSH 窗口执行 dig @1.1.1.1 cloudflare-dns.com,再回到 tcpdump 就可以发现有明文的 DNS 响应信息,如图:

tcpdump 解析出了明文 DNS 信息
tcpdump 解析出了明文 DNS 信息

我们再执行 dig cloudflare-dns.com(这次使用刚才设置好的 DNSCrypt-Proxy),然后回到 tcpdump,发现看不到 DNS 响应信息。这是因为 DNSCrypt-Proxy 是通过 443 端口请求的 Cloudflare 加密 DNS,不会走 53 端口。

我们将这个 tcpdump CTRL + C 掉,再 sudo tcpdump -n -i eth0 port 443 来监听 443 端口。执行 dig cloudflare-dns.com 可以发现,DNS 走的是 443 端口,UDP 协议来解析,也就是我们刚才设置的 HTTP/3,如图:

tcpdump enc dns
加密 DNS 请求

其它

默认情况下 DNSCrypt-Proxy 使用 root 身份启动。为了安全性,你可以新建一个专用用户来运行,并且通过 sudo systemctl edit dnscrypt-proxy.service 修改服务文件,来让其以非 root 运行。具体请自行研究。

另外,进程默认以 system_u:system_r:unconfined_service_t:s0 的 SELinux 上下文运行,没有任何限制,也不是很安全。你可能需要自行研究如何更改掉 unconfined_service_t,同时能让进程读取配置文件和缓存目录,并且监听 53 端口。

你可以去 DNSCrypt-Proxy 的 GitHub Wiki 页面 研究更多功能,也欢迎到我 主页 看更多内容。