使用systemd配置DNSOverTLS时如何解决DNS泄漏问题
我完全懂你现在的困扰:明明Quad9的专属检测页面显示你已经在使用它的服务,但dnsleaktest却测出了其他DNS地址,这种“不一致”确实让人摸不着头脑。结合你已经做的操作(禁用IPv6、NetworkManager里设IPv4为自动仅地址并清空DNS列表),咱们来一步步排查并解决这个DNS泄漏问题:
核心问题分析
Kubuntu 22.04默认用systemd-resolved管理DNS服务,你之前的操作可能没完全让systemd-resolved接管全局DNS,或者它的DNSOverTLS配置没正确生效,导致部分请求还是走了其他DNS。
具体解决步骤
第一步:确认systemd-resolved状态
先检查这个服务是否在正常运行,打开终端输入:systemctl status systemd-resolved如果显示
active (running)就没问题,要是没运行,先启动并设置开机自启:sudo systemctl start systemd-resolved && sudo systemctl enable systemd-resolved第二步:配置systemd-resolved的DNSOverTLS
编辑systemd-resolved的主配置文件:sudo nano /etc/systemd/resolved.conf把文件里的内容修改成下面这样(去掉注释符号
#):[Resolve] DNS=9.9.9.9 FallbackDNS=149.112.112.112 DNSOverTLS=yes DNSSEC=allow-downgrade简单解释下:
DNS=9.9.9.9:指定主用Quad9 DNS地址FallbackDNS=149.112.112.112:Quad9的备用地址,防止主地址不可用DNSOverTLS=yes:强制启用DNS over TLS加密传输DNSSEC=allow-downgrade:开启DNSSEC验证,同时兼容不支持DNSSEC的网络环境
保存文件(按
Ctrl+O,回车确认,再按Ctrl+X退出编辑器)。第三步:重启服务让配置生效
重启systemd-resolved和NetworkManager,确保配置同步生效:sudo systemctl restart systemd-resolved sudo systemctl restart NetworkManager第四步:验证配置是否生效
用下面的命令查看当前DNS配置详情:resolvectl status找到你当前连接的WiFi(比如
wlo1对应的TP-LINK_58DE),检查输出里的DNS Servers是不是9.9.9.9,并且DNSOverTLS状态是yes或者active。第五步:排查其他潜在的DNS服务
有些系统可能还会运行dnsmasq这类第三方DNS服务,抢占DNS请求,你可以检查它的状态:systemctl status dnsmasq如果显示正在运行,就停止并禁用它:
sudo systemctl stop dnsmasq && sudo systemctl disable dnsmasq
最后验证
完成上面的步骤后,关闭所有浏览器重新打开,再去dnsleaktest测试,应该就只会显示Quad9的DNS地址了。
备注:内容来源于stack exchange,提问作者boernsen

