成功连接VPN后,是否可以从/etc/resolv.conf中删除我的默认网关?

我已经通过NetworkManager(nm-pptp-ppp-plugin)在Ubuntu 16.04.3 LTS上配置了PPTP VPN连接,它可以工作。 我的配置:

  1. VPN
    • 网关
    • 用户名
    • 密码
    • 高级 – 在PPTP高级选项上设置一些选项
  2. IPv4设置
    • 方法仅自动(VPN)地址
    • DNS服务器 :192.168.1.1(VPN默认网关的内部IP地址)
  3. IPv6 Settins
    • 方法忽略

我在/etc/NetworkManager/NetworkManager.conf注释了/etc/NetworkManager/NetworkManager.conf #dns=dnsmasq ,运行了sudo dpkg-reconfigure resolvconfsudo resolvconf -u

没有VPN连接,我的/etc/resolv.conf包含以下行:

 nameserver 192.168.3.1 

其中192.168.3.1是我的路由器的IP。
之后,VPN连接/etc/resolv.conf变为:

 nameserver 192.168.1.1 nameserver 192.168.3.1 

但据我所知,它应该只包含192.168.1.1。

是否可以通过编程方式从/etc/resolv.conf删除路由器的IP(192.168.3.1)?
我的意思是NetworkManager调度员或类似的。

我的当前配置似乎没有DNS泄漏问题 。

PS我明白我的问题可能以前曾经讨论过,但可能重复的问题不适合我的需要。

更新1.在我的其他16.04笔记本电脑上,我还需要禁用systemd-resolved.service

 sudo systemctl stop systemd-resolved.service sudo systemctl disable systemd-resolved.service 

这是一个众所周知的NetworkManager错误,特别是#1211110 。 它可以追溯到Ubuntu 13.04到16.04, 更糟糕的是Ubuntu 16.10。

我的当前配置似乎没有DNS泄漏问题。

然后认为自己很幸运。 :)大多数用户(包括我自己)经历了严重的DNS泄漏,并尝试了不同的方法来解决它们。

以下是错误报告中建议的一些方法(总结):

评论#22由Mac Bassett撰写

制作此NetworkManager文件的备份副本:

 sudo cp /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig 

将以下3行添加到文件中。

 #!/bin/bash /etc/openvpn/update-resolv-conf $@ /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig $@ 

然后:

 sudo chmod +x /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper 

警告:断开VPN后需要运行以下命令。

 sudo script_type=down dev=tun0 /etc/openvpn/update-resolv-conf 

我自己评论#27和#29

编辑VPN连接(通过NM)并设置静态DNS,例如使用Google服务器:

 8.8.8.8, 8.8.4.4 

这样,DNS请求通过外部IP发送,因此使用VPN路由。

然后还设置无线连接以使用这些静态DNS服务器。

DaveHenson评论#31

通过命令行运行openvpn


(…其他一些我不会在这里讨论的繁琐的解决方案…)


评论#81由ÇağatayYüksel撰写

删除此配置文件:

 sudo rm -rf /etc/resolv.conf 

将此行添加到/etc/NetworkManager/NetworkManager.conf[main]部分:

 dns=dnsmasq 

如果您安装了dnsmasq软件包,则应确保未启用dnsmasq服务,否则将无法运行。 你也应该重启。

真正的解决方案

在Ubuntu 17.04中已修复此错误。 而不是在您的系统上尝试随机补丁,简单升级可能是一个更好的主意。 🙂

更新2我编写了简单直接的脏调度程序并将其放在/etc/NetworkManager/dispatcher.d/03vpn

 #!/bin/sh -e RESOLV_CONF=`readlink /etc/resolv.conf` ROUTER_IP="nameserver 192.168.3.1" logger -t DNS-antileak "start" # disable local router IP in /etc/resolv.conf if [ "$2" = "vpn-up" ]; then sed -i "s/$ROUTER_IP/#$ROUTER_IP/g" $RESOLV_CONF logger -t DNS-antileak "disabled $ROUTER_IP on vpn-up" fi if [ "$2" = "vpn-down" ]; then sed -i "s/#$ROUTER_IP/$ROUTER_IP/g" $RESOLV_CONF logger -t DNS-antileak "enabled $ROUTER_IP on vpn-down" fi logger -t DNS-antileak "end" exit 0 

它可以激活

 sudo chown root:root /etc/NetworkManager/dispatcher.d/03vpn sudo chmod 755 /etc/NetworkManager/dispatcher.d/03vpn 

我用OpenVPN和PPTP连接测试了它。

我还发现了其他DNS泄漏测试: Whoer和WhatLeaks 。