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.shdhcp-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
相关产品推荐
相关产品推荐

