在Ubuntu 24.04 LTS中不依赖systemd-resolved,如何通过/etc/resolv.conf实现DNS over TLS?
在Ubuntu 24.04 LTS中不依赖systemd-resolved,如何通过/etc/resolv.conf实现DNS over TLS?
嗨,我来帮你捋清楚这个问题~ 首先得明确一个关键点:/etc/resolv.conf本身并没有直接支持DNS over TLS(DoT)的配置选项。就像你提到的options use-vc是专门用来开启DNS over TCP的,但DoT需要额外的工具来处理加密层逻辑——毕竟resolv.conf只是告诉系统“去哪里找DNS服务器”,没法自己完成TLS加密的握手和数据传输。
不过别担心,我们可以通过部署本地DNS转发器(比如dnsmasq或unbound)来实现DoT,同时让系统通过resolv.conf指向这个本地转发器,间接实现加密DNS查询。下面给你两种常用的方案:
方案一:用dnsmasq实现DoT
- 首先安装dnsmasq:
sudo apt update && sudo apt install dnsmasq
- 编辑dnsmasq的配置文件,开启DoT支持:
打开/etc/dnsmasq.conf,添加或修改以下内容:
# 禁用默认的DNS解析,只使用我们指定的DoT服务器 no-resolv # 指定支持DoT的公共DNS服务器(这里用Cloudflare的例子,端口853是DoT标准端口) server=1.1.1.1#853 server=1.0.0.1#853 # 开启DNSSEC验证(可选但推荐,增强安全性) dnssec # 指定系统根证书文件,用于验证DoT服务器的证书 tls-ca-file=/etc/ssl/certs/ca-certificates.crt
- 配置resolv.conf指向本地dnsmasq:
先备份原文件以防万一:
sudo cp /etc/resolv.conf /etc/resolv.conf.bak
然后编辑/etc/resolv.conf,改成如下内容:
nameserver 127.0.0.1 options edns0 trust-ad
- 重启dnsmasq服务让配置生效:
sudo systemctl restart dnsmasq
方案二:用unbound实现DoT
unbound是更专注于安全性的DNS转发器,适合对隐私要求较高的场景:
- 安装unbound:
sudo apt update && sudo apt install unbound
- 创建专门的DoT配置文件:
在/etc/unbound/unbound.conf.d/目录下新建dot.conf文件,添加以下内容:
server: # 开启上游TLS加密 tls-upstream: yes # 配置转发到DoT服务器(这里以Cloudflare为例,注意要指定服务器域名来验证证书) forward-zone: name: "." forward-tls-upstream: yes forward-addr: 1.1.1.1@853#cloudflare-dns.com forward-addr: 1.0.0.1@853#cloudflare-dns.com
同样修改resolv.conf指向本地unbound:
和方案一的步骤3一样,把resolv.conf的nameserver改成127.0.0.1即可。重启unbound服务:
sudo systemctl restart unbound
额外注意事项
因为你已经手动移除了systemd-resolved,为了防止其他服务自动修改resolv.conf,你可以把它设置为静态文件:
sudo chattr +i /etc/resolv.conf
之后如果需要修改resolv.conf,先执行sudo chattr -i /etc/resolv.conf取消保护,编辑完成后再重新加上保护即可。
备注:内容来源于stack exchange,提问作者Kid A




