You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在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

  1. 首先安装dnsmasq:
sudo apt update && sudo apt install dnsmasq
  1. 编辑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
  1. 配置resolv.conf指向本地dnsmasq:
    先备份原文件以防万一:
sudo cp /etc/resolv.conf /etc/resolv.conf.bak

然后编辑/etc/resolv.conf,改成如下内容:

nameserver 127.0.0.1
options edns0 trust-ad
  1. 重启dnsmasq服务让配置生效:
sudo systemctl restart dnsmasq

方案二:用unbound实现DoT

unbound是更专注于安全性的DNS转发器,适合对隐私要求较高的场景:

  1. 安装unbound:
sudo apt update && sudo apt install unbound
  1. 创建专门的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
  1. 同样修改resolv.conf指向本地unbound:
    和方案一的步骤3一样,把resolv.conf的nameserver改成127.0.0.1即可。

  2. 重启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

火山引擎 最新活动