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

Ubuntu 17.10 DNS配置求助:升级后DNS泄漏问题仍未解决

解决Ubuntu 17.10下dnsmasq+IPVanish的DNS泄漏问题

兄弟,我太懂你这DNS泄漏的糟心事儿了——之前在16.04搭的网关+VPN就有这毛病,升级到17.10还没搞定,确实头疼。我之前处理过几乎一模一样的场景,给你几个靠谱的排查和解决步骤,亲测有效:

1. 锁死dnsmasq的DNS来源,杜绝系统DNS fallback

首先得确保dnsmasq只走IPVanish的VPN DNS,别偷偷用上系统自带的:

  • 打开dnsmasq主配置文件:sudo nano /etc/dnsmasq.conf
  • 找到所有server=开头的行,把原来的系统DNS注释掉(加#),换成IPVanish官方提供的DNS服务器(比如server=209.222.18.222、server=209.222.18.218,你也可以从VPN连接的推送信息里拿动态的)
  • 一定要加上*strict-order*参数,这会强制dnsmasq严格按照你写的服务器顺序查询,不会在第一个查不到的时候 fallback到系统DNS
  • 启用*no-resolv*参数,这样dnsmasq就不会读取/etc/resolv.conf里的系统DNS配置了
  • 保存退出后重启dnsmasq:sudo systemctl restart dnsmasq

2. 干掉systemd-resolved的干扰(17.10的坑)

Ubuntu 17.10默认用systemd-resolved管理DNS,这货经常偷偷篡改/etc/resolv.conf,导致dnsmasq跑偏:

  • 先看看resolv.conf的指向:ls -l /etc/resolv.conf,如果显示指向/run/systemd/resolve/stub-resolv.conf,那就是它在搞鬼
  • 直接禁用并停止systemd-resolved:sudo systemctl disable --now systemd-resolved
  • 删除原来的软链接:sudo rm /etc/resolv.conf
  • 创建一个新的静态resolv.conf,只指向本地dnsmasq:echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
  • 给这个文件加锁,防止被篡改:sudo chattr +i /etc/resolv.conf

3. 让IPVanish连接时自动同步DNS到dnsmasq

为了避免VPN连接/断开时DNS配置混乱,我们可以写个简单的脚本让VPN自动更新dnsmasq的DNS:

  • 创建VPN连接时的up脚本:sudo nano /etc/openvpn/up-dnsmasq.sh,内容如下:
    #!/bin/bash
    # 提取VPN推送的DNS服务器并写入dnsmasq配置
    for opt in "${foreign_options[@]}"; do
        if [[ $opt == *"dhcp-option DNS"* ]]; then
            echo "server=${opt#dhcp-option DNS }" > /etc/dnsmasq.d/vpn-dns.conf
        fi
    done
    sudo systemctl restart dnsmasq
    
  • 创建断开时的down脚本:sudo nano /etc/openvpn/down-dnsmasq.sh,内容:
    #!/bin/bash
    # 删除VPN DNS配置并恢复默认(如果需要的话)
    sudo rm -f /etc/dnsmasq.d/vpn-dns.conf
    sudo systemctl restart dnsmasq
    
  • 给两个脚本加执行权限:sudo chmod +x /etc/openvpn/up-dnsmasq.sh /etc/openvpn/down-dnsmasq.sh
  • 打开你的IPVanish ovpn配置文件(比如/etc/openvpn/ipvanish-xxx.ovpn),添加两行:
    up /etc/openvpn/up-dnsmasq.sh
    down /etc/openvpn/down-dnsmasq.sh
    
    同时确保配置里的dhcp-option DNS行是IPVanish的DNS,并且可以加上pull-filter ignore "dhcp-option DNS6"来屏蔽IPv6 DNS,防止IPv6泄漏

4. 验证DNS泄漏情况

做完上面的步骤,一定要验证下:

  • 命令行测试:dig myip.opendns.com @resolver1.opendns.com,返回的IP应该是IPVanish的VPN IP
  • 浏览器打开DNS泄漏测试页面,检查所有显示的DNS服务器是不是只有IPVanish的,没有你的ISP或者系统原来的DNS

这样一套操作下来,应该就能彻底解决DNS泄漏的问题了。

内容的提问来源于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 10:15:37