3
9月
2026
在 Linux 上启动 DOH - 通过 HTTPS 将名称解析为 DNS IP 地址
11:11

在 Linux 上启动 DOH - 通过 HTTPS 将名称解析为 DNS IP 地址

3 9月 2026 11:11

这篇文章是对 设置系统解析的缓存 DNS 服务器

简介

这篇文章 没有描述 绕过阻塞的方法,致力于通过带有缓存的 HTTPS 解析 DNS 名称的方法,以提高运行 Linux 操作系统的计算机的安全性。

重点是在访问任何网站之前 查询任何 DNS 服务器,无论[自由、独立或政府]均以明文传输。 是什么创造了机会:
1) 本地网段中的任何计算机拦截此类请求。
2) 在提供商或上游提供商级别分析对 DNS 的请求(使用递归 DNS)。
3) 干扰此类消息传输过程的可能性(攻击者发出虚假或空响应、在 DNS 响应中替换 IP 地址)。
4) 许多 DNS 服务器不具备对欺诈、恶意或广告网站的过滤功能,而许多专用 DNS 服务器确实具有此功能(称为“家庭 DNS”或“安全 DNS”)。

技术比较:

  • 使用 DNSSEC 仅解决无法使用消息签名欺骗 DNS 服务器响应的问题。 DNSSEC 客户端发出的请求是“透明的”,与常规 DNS 一样以明文形式清晰可见。
  • 使用基于 TLS 的 DNS (交通部 ):不起作用,原因未知(我无法启动它)。 此外,DOT 协议在远程服务器上使用端口 853/TCP,与 53/UDP (DNS) 一样,在研究流量时很容易确定该端口。
  • 通过 HTTPS 使用 DNS (卫生部 ): 作品 (本文的目的是谈谈使用体验)。 标准 DOH 端口和 HTTPS 端口相同:443。

解决方案描述:在 Linux 上运行 DOH

该解决方案将 DOH 设置为 全部 linux操作系统。 该解决方案需要一个有效的 systemd 解析。 这限制了该指令适用的操作系统列表,仅适用于那些使用服务初始化系统的操作系统 系统

检查是否使用了systemd init系统:

ps -p 1 -o comm=

答案应该是:
systemd

要在客户端上运行 DOH,您需要:
1)执行 安装和配置 systemd-resolved 的说明,
2)安装包 dnscrypt-proxy
3)定制封装 dnscrypt-proxy 使用扩展名为 .toml 的配置文件。
4)启动服务 dnscrypt-proxy
5)将请求重定向到缓存DNS服务器 systemd-resolved на dnscrypt-proxy
6) 配置您的网络浏览器(禁用其中的 DNS-over-HTTPS 以通过 local 缓存本地 DNS 服务器工作)。

行动步骤

1)让我们开始吧 安装、配置 systemd 解析的缓存 DNS 服务器

2)安装包 dnscrypt-proxy

须藤apt更新
sudo apt install dnscrypt-proxy

3)创建配置文件 /etc/dnscrypt-proxy/dnscrypt-proxy.toml

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

并添加到 dnscrypt-proxy.toml 文字:

# Empty listen_addresses to use systemd socket activation
listen_addresses = ['127.0.0.1:5053']
server_names = ['google'] # or 'yandex'. See https://dnscrypt.info/public-servers/ .

# Use reachable
ipv4_servers=true
ipv6_servers=false

# Enable DoH specifically:
doh_servers = true
dnscrypt_servers = false  # Only DoH, no DNScrypt
require_dnssec=false
require_nolog=true
require_nofilter=true
timeout=5000
keepalive=30 # Keep alive connection, seconds
cert_refresh_delay=240
ignore_system_dns=true
netprobe_timeout=60
netprobe_address='9.9.9.9:53'
block_ipv6=true
block_unqualified=true
reject_ttl=10
cache=true
cache_size=4096
cache_min_ttl=2400
cache_max_ttl=86400
cache_neg_min_ttl=60
cache_neg_max_ttl=600

[nx_log]
  file = '/var/log/dnscrypt-proxy/nx.log' # Log file is off by "require_nolog=true" 

[sources]
  [sources.'public-resolvers']
  url = 'https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md'
  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 73
  prefix = ''
[sources.relays]
  url = 'https://download.dnscrypt.info/resolvers-list/v3/relays.md'
  cache_file = '/var/cache/dnscrypt-proxy/relays.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 73
  prefix = ''

保存并退出:Ctrl+S、Ctrl+X

重新启动服务 dnscrypt-proxy:

sudo systemctl restart dnscrypt-proxy

评论:

  • 系统解析的缓存 DNS 服务器在端口 53 和 127.0.0.53:53 上的本地主机上运行
  • 新的 dnscrypt-proxy 服务将侦听端口 5053。
  • 通过 [google] 进行名称解析,DNS over HTTPS 服务(符合 https://dns.google/dns-query - RFC 8484(GET 和 POST))
  • IPv4 正在使用,IPv6 已禁用
  • DOH 服务器 - 使用
  • DNSCRYPT 服务器已禁用
  • DNSSEC 选项已禁用
  • 查询日志已禁用
  • 域过滤器选项已禁用
    ...
  • 解析第一个查询的 DNS 服务器的 IP 地址 netprobe_address='9.9.9.9:53'。
  • dnscrypt-proxy 服务需要“sources”、“sources.'public-resolvers'”和“sources.relays”部分才能正常工作。

通过 DOH 的名称解析会影响整个 Linux 操作系统、其中的所有程序和实用程序(dig、ping、traceroute)。

4)启动服务 dnscrypt-proxy 并允许操作系统启动时自动启动:

sudo systemctl 启用 dnscrypt 代理
sudo systemctl start dnscrypt-proxy

5) DNS 请求重定向。

如果您创建了符号链接,

ls -l /etc/resolv.conf

仅当存在链接时才将其删除:

sudo rm /etc/resolv.conf

打开文件 /etc/resolv.conf 用于编辑

sudo nano /etc/resolv.conf

并向其中添加文本:

nameserver 127.0.0.53

保存并退出:Ctrl+S、Ctrl+X。

将根据什么重定向 /etc/resolv.conf запросы приложений "ping", "dig" на systemd-resolved 位于本地地址 127.0.0.53。

服务 systemd-resolved будет передавать запросы DNS на dnscrypt-proxy 到 127.0.0.1:5053,我们为此编辑文件:

sudo nano /etc/systemd/resolved.conf

文件的内容应如下所示:

<前>[解决]
DNS=127.0.0.1:5053
后备 DNS=
域名=~.

! 这里127.0.0.1:5053是IP地址和端口 dnscrypt-proxy

保存并退出:Ctrl+S、Ctrl+X。

重新启动服务:

sudo systemctl restart systemd-resolved

!!! 将请求从“SystemD-ResolveD”服务重定向到 dnscrypt-proxy (127.0.0.1:5053)完成!

!!!反过来,dnscrypt-proxy перенаправит запросы через DNS over HTTPS в Интернет на DOH-сервер, который указан в конфигурации TOML в разделе server_names = []

检查

首先,检查dnscrypt代理和缓存DNS服务器的状态

sudo systemctl status dnscrypt-proxy
sudo systemctl status systemd-resolved

不应该有错误,但是状态 “Active:活跃(运行)”“现在正在监听 127.0.0.1:5053 [TCP]” 第一个和相同的状态 “Active:活跃(运行)” 在第二个。

请求执行时间:

time resolvectl query lenta.com
lenta.com: 178.248.232.88

-- Information acquired via protocol DNS in 53.8ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

real    0m0,065s
user    0m0,000s
sys 0m0,010s
time resolvectl query lenta.com
lenta.com: 178.248.232.88

-- Information acquired via protocol DNS in 2.4ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

real    0m0,009s
user    0m0,003s
sys 0m0,004s

另外,连续运行两个命令:

dig ya.ru
dig ya.ru

名称解析和查询响应缓存有效。

注意: 团队 resolvectl statistics 产生不正确的“缓存未命中”值,可以忽略。 最主要的是对请求的响应时间为零。

现在让我们停止该服务,看看停止后 DNS 名称解析是否可以工作 dnscrypt-proxy
那些。 是否存在 DNS 泄漏?

sudo pkill -STOP dnscrypt-proxy

现在以下命令挂起:

resolvectl query lenta.com

Ctrl+C

让我们再次运行它并检查工作:

sudo pkill -CONT dnscrypt-proxy
resolvectl query lenta.com

名称解析再次生效! 测试方法基于 文件

6) 设置网络浏览器

在 Web 浏览器中,如果启用了基于 HTTPS 的 DNS,则需要禁用它们。 由于所有请求现在都经过本地缓存 DNS,后者通过系统 dnscrypt-proxy 重定向它们。

火狐浏览器:

  • 编辑 - 设置 - 隐私和安全 - DNS over HTTPS -关闭 (使用您的默认 DNS 解析器)。
    谷歌浏览器、Chromium-Gost:
  • 设置 - 隐私和安全 - 使用安全 DNS 服务器 -关闭

! 检查: browserleaks.com DNS 泄漏测试-https://browserleaks.com/dns[/标记]

7) 在网络管理器网络设置中指定缓存 DNS 服务器。

网络管理器设置位于系统托盘(时钟附近的栏)中。
在连接本地网络或Wi-Fi的设置中,如上一篇文章所示,需要指定DNS:127.0.0.53,对应systemd解析的服务。

选项“server_names = [...]”的可能值

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

_TOML 文件中 servernames = [...] 部分的 DOH 服务器名称的一些变体
controld-unfiltered- Control D 是一个免费的 DNS 服务器,没有过滤。 不阻止或重写域。 不保留请求日志。 全球选播网络。 https://controld.com/free-dns 由 Control D 管理。服务页面:https://controld.com/free-dns
dnsforfamily-doh- DNS for Family 是一项安全搜索服务。 阻止与成人内容、赌博、毒品、恶意软件、欺诈/网络钓鱼、代理/匿名程序和广告相关的域;黑名单每天更新。 在 Google、YouTube、Brave、Ecosia、Bing、DuckDuckGo 和 Yandex 上提供安全搜索。 Facebook 和 Instagram 等社交网络不会被屏蔽。 不记录 DNS 查询。 免费服务。 提供者:https://dnsforfamily.com
google- 谷歌公共 DNS 服务器。 由 Google 运营的全球选播服务。 该服务由 Google 公共 DNS 管理。 服务页面:https://developers.google.com/speed/public-dns
yandex- Yandex 公共 DNS 安全解析器。 该服务由 Yandex 管理。 服务页面:https://dns.yandex.com/ 可以注册请求。
*yandex-safe- Yandex 公共 DNS 安全解析器。 Yandex 提供的具有恶意软件过滤功能的 Anycast 服务。 该服务由 Yandex 管理。 服务页面:https://dns.yandex.com/ 可以注册请求。

  • quad9-doh-ip4-port443-filter-pri - 来自 Quad9 的 DNS-over-HTTPS 服务器.在上图中。

更改服务器后,重新启动服务:

sudo systemctl restart dnscrypt-proxy

对于名称匹配,请参见主页 -https://dnscrypt.info/public-servers/

结果

我们已将 DNS 配置为通过缓存服务器进行工作,并通过以下方式进行传输: dnscrypt-proxy
除了安全级别提高之外,打开网页的速度也显着提高,因为 双缓存 DNS 服务器响应(在 dnscrypt-proxy 和 systemd-resolved 中)。

删除 dnscrypt-proxy

如有必要,可以删除 dnscrypt-proxy 包:

sudo apt remove dnscrypt-proxy

删除后,不要忘记修复该文件

sudo nano /etc/systemd/resolved.conf

文件的内容应如下所示:

<前>[解决]
DNS=192.168.1.1:53
后备 DNS=77.88.8.1
域名=~.

其中 192.168.1.1 表示本地网络路由器的 IP 地址。

重新启动服务:

sudo systemctl restart systemd-resolved

来源

这篇文章与官方说明有很大不同,其中安装 dnscrypt-proxy 在端口 53 上并且不使用 systemd-resolved 服务。

*https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Installation-linux

主要来源是示例配置文件“example-dnscrypt-proxy.toml”:

*https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/dnscrypt-proxy/example-dnscrypt-proxy.toml



相关出版物