Ubuntu 22.04 Server 如何强制仅使用指定DNS服务器并通过tun0隧道启用DNS-over-TLS(避免使用路由器DNS)
Ubuntu 22.04 Server 如何强制仅使用指定DNS服务器并通过tun0隧道启用DNS-over-TLS(避免使用路由器DNS)
嘿,我完全懂你折腾五小时的崩溃——桌面版的网络设置方法在纯服务器上根本没用,systemd-resolved和OpenVPN的交互确实容易踩坑。咱们一步步把问题捋顺解决:
核心问题拆解
从你贴的resolvectl status输出能抓到关键症结:
- 物理网卡
enp0s10还带着DefaultRoute和路由器的DNS(192.168.1.1),systemd-resolved会优先选用这个接口的DNS配置 - VPN隧道
tun0没有被标记为DNS解析的有效接口 - 静态
resolv.conf没法支持DNS-over-TLS(你之前混淆了use-vc——它只是强制DNS用TCP传输,和加密的TLS完全不是一回事)
分步解决方案
1. 恢复systemd-resolved的默认resolv.conf链接
静态resolv.conf无法利用systemd-resolved的DNS-over-TLS功能,先把它改回默认的软链接:
sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
2. 配置systemd-resolved强制全局DoT并忽略接口DNS
编辑/etc/systemd/resolved.conf,确保内容如下:
[Resolve] DNS=9.9.9.9 149.112.112.112 1.1.1.1 1.0.0.1 DNSOverTLS=yes DNSSEC=no FallbackDNS= Domains=~.
Domains=~.是核心配置:它告诉systemd-resolved所有域名都使用全局指定的DNS服务器,彻底无视其他接口的DNS设置FallbackDNS=清空备用DNS列表,避免系统自动 fallback 到未知服务器
3. 禁止物理网卡从DHCP获取DNS
你的Netplan配置里enp0s10用DHCP自动获取IP,同时会顺带拿到路由器的DNS。修改/etc/netplan/00-installer-config.yaml:
network: ethernets: enp0s10: dhcp4: true dhcp4-overrides: use-dns: false # 禁用DHCP自动获取DNS version: 2
应用配置生效:
sudo netplan generate sudo netplan apply
4. 调整OpenVPN配置适配systemd-resolved
你原来的update-resolv-conf脚本是给传统resolv.conf设计的,换成适配systemd-resolved的版本:
编辑你的OpenVPN配置文件(xBuQqzYnLLTezXRvrOofMBGgYAEgcY.ovpn),替换up/down脚本相关行:
# 替换原有up/down脚本 up /etc/openvpn/update-systemd-resolved down /etc/openvpn/update-systemd-resolved down-pre # 强制所有域名的DNS请求走tun0 dhcp-option DOMAIN-ROUTE . # 保留你原有配置里的redirect-gateway、加密设置等内容
这个脚本会自动告诉systemd-resolved把tun0标记为DNS解析的优先接口,DOMAIN-ROUTE .确保所有域名的DNS请求都走VPN隧道。
5. 重启服务让配置生效
sudo systemctl restart systemd-resolved # 重启OpenVPN客户端(或者用你原来的启动命令重新运行) sudo /usr/sbin/openvpn --client --config /etc/openvpn/client/xBuQqzYnLLTezXRvrOofMBGgYAEgcY.ovpn
验证效果
- 运行
resolvectl status检查:Global区域的DNS是你指定的服务器,DNSOverTLS=yesenp0s10的DNS Servers为空tun0的Current Scopes应该显示DNS
- 用tcpdump确认流量走向:
# 查看tun0的853端口流量(DNS-over-TLS) sudo tcpdump -ni tun0 -p port 853 # 查看enp0s10,应该没有任何53/853端口的DNS流量 sudo tcpdump -ni enp0s10 -p port 53 or port 853
此时所有DNS请求都会通过tun0隧道走853端口的加密DNS-over-TLS,完全不会触碰路由器的DNS。
备注:内容来源于stack exchange,提问作者UbuntuUser
相关产品推荐
相关产品推荐

