真正的解决方案

真正的解决方案

我已经通过 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 设置
    • 方法忽略

我注释掉#dns=dnsmasq/etc/NetworkManager/NetworkManager.confsudo 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

答案1

这是 NetworkManager 的一个著名 bug,具体来说就是#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ğatay Yüksel

删除这个配置文件:

sudo rm -rf /etc/resolv.conf

[main]将这一行添加到/etc/NetworkManager/NetworkManager.conf

dns=dnsmasq

如果您dnsmasq安装了该软件包,则应确保dnsmasq未启用该服务,否则将不起作用。您还应该重新启动。

真正的解决方案

这个错误已在 Ubuntu 17.04 中修复。与其在你的系统上尝试随机补丁,不如直接升级,这可能是更好的主意。:)

答案2

更新 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 泄漏测试:沃厄尔泄密事件

相关内容