我已经通过 NetworkManager (nm-pptp-ppp-plugin) 在 Ubuntu 16.04.3 LTS 上配置了 PPTP VPN 连接,并且它可以正常工作。我的配置:
- VPN
- 网关
- 用户名
- 密码
- 先进的- 设置一些选项PPTP 高级选项
- IPv4 设置
- 方法:仅限自动 (VPN) 地址
- DNS 服务器:192.168.1.1(VPN 默认网关的内部 IP 地址)
- IPv6 设置
- 方法:忽略
我注释掉#dns=dnsmasq
了/etc/NetworkManager/NetworkManager.conf
,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
答案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 连接对其进行了测试。