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

Ubuntu 16.04 OpenVPN DNS泄露:如何仅使用VPN提供的DNS?

搞定这个DNS泄露问题不难,在Ubuntu 16.04里这是个挺常见的场景,我给你几个按优先级排序的解决方案,你一步步试:

1. 修改OpenVPN配置文件(最推荐,一劳永逸)

直接让OpenVPN接管DNS的控制权,连接时自动替换系统DNS,断开后恢复。

  • 找到你的OpenVPN配置文件(通常是/etc/openvpn/client.conf或者你自己导入的.ovpn文件),用编辑器打开:
    sudo nano /etc/openvpn/client.conf
    
  • 在文件末尾添加这两行:
    script-security 2
    up /etc/openvpn/update-resolv-conf
    down /etc/openvpn/update-resolv-conf
    
    这两行是调用Ubuntu自带的update-resolv-conf脚本,它会自动处理resolv.conf的替换和恢复,完美适配OpenVPN的生命周期。
  • 保存退出后,重启OpenVPN服务生效:
    sudo systemctl restart openvpn@client
    
    如果你的OpenVPN是用传统service管理的,就用:
    sudo service openvpn restart
    
2. 锁定resolv.conf防止被篡改

如果第一种方法没生效,可能是有其他进程(比如networking服务)在偷偷修改resolv.conf,那我们直接把它锁起来:

  • 先备份原配置,以防万一:
    sudo cp /etc/resolv.conf /etc/resolv.conf.backup
    
  • 连接VPN,确认resolv.conf里已经是VPN提供的DNS后,给文件加只读锁:
    sudo chattr +i /etc/resolv.conf
    
  • 注意:断开VPN前一定要解锁并恢复原配置,不然系统会没有可用DNS:
    sudo chattr -i /etc/resolv.conf && sudo cp /etc/resolv.conf.backup /etc/resolv.conf
    
3. 从源头移除network/interfaces的DNS配置

如果不想依赖脚本或锁文件,可以直接把系统自带的DNS配置删掉:

  • 编辑/etc/network/interfaces:
    sudo nano /etc/network/interfaces
    
  • 找到类似dns-nameservers x.x.x.x的行,把它注释掉(前面加#)或者直接删除。
  • 重启网络服务让修改生效:
    sudo systemctl restart networking
    
    这个方法的缺点是:VPN断开后系统会没有默认DNS,你需要手动临时添加或者配置fallback的DNS服务器。
额外检查:排除NetworkManager的干扰

如果你用的是Ubuntu默认的NetworkManager管理网络,它可能会自动添加DNS,导致泄露:

  • 打开NetworkManager的图形界面,找到你的网络连接(有线或无线),进入IPv4设置页签。
  • 把“DNS服务器”字段留空,或者选择“自动(仅地址)”选项,这样NetworkManager只会获取IP地址,不会自动添加DNS。
  • 重启NetworkManager服务:
    sudo systemctl restart network-manager
    

内容的提问来源于stack exchange,提问作者BrettM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:05:31