成功连接VPN后,是否可以从/etc/resolv.conf中删除我的默认网关?
我已经通过NetworkManager(nm-pptp-ppp-plugin)在Ubuntu 16.04.3 LTS上配置了PPTP VPN连接,它可以工作。 我的配置:
- VPN
- 网关
- 用户名
- 密码
- 高级 – 在PPTP高级选项上设置一些选项
- IPv4设置
- 方法 : 仅自动(VPN)地址
- DNS服务器 :192.168.1.1(VPN默认网关的内部IP地址)
- IPv6 Settins
- 方法 : 忽略
我在/etc/NetworkManager/NetworkManager.conf
注释了/etc/NetworkManager/NetworkManager.conf
#dns=dnsmasq
,运行了sudo dpkg-reconfigure resolvconf
和sudo 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 。