You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

验证效果

  1. 运行resolvectl status检查:
    • Global区域的DNS是你指定的服务器,DNSOverTLS=yes
    • enp0s10的DNS Servers为空
    • tun0的Current Scopes应该显示DNS
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:49:36