![如何修复 OpenVPN DNS 泄漏](https://linux22.com/image/130750/%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%20OpenVPN%20DNS%20%E6%B3%84%E6%BC%8F.png)
我刚刚订阅了 VPN 提供商。
我有 Xubuntu 17.10,openvpn 2.4.3。启动 openvpn 命令后,我检查 IP(很好)并执行了一个简单的操作DNS泄漏测试:不好,它显示了我的互联网服务提供商!
如何解决这个 DNS 泄漏问题?
我有一个初步审讯:
- 我这边“可以修复”吗?或者远程服务器配置错误?
在我这边,我尝试更改 openvpn 的 .ovpn 配置文件中的一些值:
最初已经有这些行,预计可以工作,但是不行:
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
我按照这个改变了它们红迪网答案(明确指定 DNS 地址):
dhcp-option DNS 208.67.222.222 dhcp-option DNS 208.67.220.220 dhcp-option DNS 8.26.56.26 up "/etc/openvpn/update-resolv-conf foreign_option_1='dhcp-option DNS 208.67.222.222' foreign_option_2='dhcp-option DNS 208.67.220.220' foreign_option_3='dhcp-option DNS 8.26.56.26'" down "/etc/openvpn/update-resolv-conf foreign_option_1='dhcp-option DNS 208.67.222.222' foreign_option_2='dhcp-option DNS 208.67.220.220' foreign_option_3='dhcp-option DNS 8.26.56.26'"
这样做似乎可以完成工作,因为 的内容
/etc/resolvconf
由向上/向下脚本更新:# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN # 127.0.0.53 is the systemd-resolved stub resolver. # run "systemd-resolve --status" to see details about the actual nameservers. nameserver 208.67.222.222 nameserver 208.67.220.220 nameserver 8.26.56.26 search lan
但 DNSleaktest 仍然显示我的 ISP。
那么我学到了ubuntu 软件包的存在
openvpn-systemd-resolved
提供了一个类似于 systemd 的脚本,update-resolve-conf
但使其可以与 systemd 一起使用(这里我不知道哪些进程使用此脚本:network-manager?openvpn?)。我安装了该软件包并被取代我的 .ovpn 文件中的脚本名称:up "/etc/openvpn/update-systemd-resolved ..." down "..." down-pre
还是没有运气。[在写这篇文章时我刚刚找到了解决方案,请参阅我的答案以下]
然后我对这个文件进行了很多修改
/etc/resolv.conf
。通常情况下不应更改,因此我将 DNS 服务器地址放入/etc/resolvconf/resolv.conf.d/base
,但发布resolvconf -u
似乎不起作用。与VPN公司的支持人员交谈,没有解决方案。
我尝试了像这样的各种解决方案一,以及随后未接受的答案:
我忘记了我尝试过的其他事情,然后我想,stackexchange 会将我从痛苦中解救出来,而且它奇迹般地做到了,仅仅通过提出问题的力量。
[编辑1:未解决!实际上我的第一个答案并不是它起作用的原因]
经过更多检查后我注意到了这一点。我可以删除这些systemd-update-resolved
行,它仍然有效,但仅限于某些条件:
当。。。的时候openvpn
服务正在运行,我遇到 DNS 泄漏。如果我停止它,然后仅重新启动我的客户端的服务:
sudo service openvpn stop
sudo service openvpn@client start
然后就可以了。
抱歉,我想我还没有彻底检查 openvpn 手册,但是这是为什么?这不是安全漏洞吗?特别是因为 openvpn 服务在从 apt 安装后会自动激活。如何让改变永久化?(我尝试过sudo systemctl disable openvpn
,但在下次启动时我仍然遇到同样的问题)。
[编辑2:路由表]
一旦我停止openvpn
并启动openvpn@client
,我就没有 DNS 泄漏,并且输出route -n
是:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 91.240.65.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 eno1
91.240.64.17 192.168.1.254 255.255.255.255 UGH 0 0 0 eno1
91.240.65.0 0.0.0.0 255.255.255.224 U 0 0 0 tun0
128.0.0.0 91.240.65.1 128.0.0.0 UG 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
之后sudo service openvpn restart
:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 91.240.66.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 eno1
91.240.64.16 192.168.1.254 255.255.255.255 UGH 0 0 0 eno1
91.240.66.0 0.0.0.0 255.255.255.224 U 0 0 0 tun0
128.0.0.0 91.240.66.1 128.0.0.0 UG 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
不再工作了,我在这两种情况下都遇到了 DNS 泄漏。我尝试安装该软件包openresolv
(它取代了 resolvconf),它似乎有效。这是新的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 91.240.66.161 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 eno1
91.240.64.15 192.168.1.254 255.255.255.255 UGH 0 0 0 eno1
91.240.66.160 0.0.0.0 255.255.255.224 U 0 0 0 tun0
128.0.0.0 91.240.66.161 128.0.0.0 UG 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
答案1
所以答案是仔细遵循 ArchLinux wiki 中始终有效的说明:
https://wiki.archlinux.org/index.php/OpenVPN#Update_systemd-resolved_script
并附加相应的行。
所以,分两步:
sudo apt install openvpn-systemd-resolved
和附加将以下行添加到您的 .ovpn 文件中:
script-security 2
dhcp-option DNS 208.67.222.222
dhcp-option DNS 208.67.220.220
dhcp-option DNS 8.26.56.26
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
如果不清楚,您的文件现在应该包含二“向上”行和二“向下”行:
# old lines
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
# new lines
script-security 2
dhcp-option DNS 208.67.222.222
dhcp-option DNS 208.67.220.220
dhcp-option DNS 8.26.56.26
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
[编辑1:实际上不,这不是它起作用的原因]
看编辑1在我的问题中。
[编辑2:我想这次我做对了]
这个奇怪systemd-resolved.service
行为的问题被引用这里。
似乎要放入客户端配置文件的选项如下:
dhcp-option DOMAIN-ROUTE .
显然,它通过选定的连接路由所有 DNS...
答案2
我在 Ubuntu 17.10 和现在的 18.04 LTS 上遇到了 DNS 泄漏问题。一定是我不久前从 16.10 更新时开始的,直到现在我才想到检查,偶然。上述内容(以及我发现和尝试的其他内容)都没有帮助,直到我遇到下面的这个 URL,并从头到尾阅读了错误报告。关于添加 dns 优先级行的评论对我有用。
https://bugs.launchpad.net/network-manager/+bug/1624317 看看评论#103。
查找已安装的 NetworkManager VPN 连接(“ ”$
只是我的系统提示符,表明您位于终端窗口中的命令行):
$ ls -la /etc/NetworkManager/system-connections/*
然后选择您想要修复的并在其上运行此命令(或者您可以手动编辑配置文件,因为此命令只是在 ipv4 部分下添加一个 dns-priority 条目):
$ sudo nmcli 连接修改<VPN 连接名称>ipv4.dns-优先级-42
并重新启动:
$ sudo service network-manager restart
请注意,至少对我来说,将其放入来自我的 VPN (ProtonVPN) 的 OpenVPN .ovpn 配置文件中不起作用。由于某种原因,当使用 GUI 对话框安装时,它没有进入 NetworkManager 配置。只有安装后更新配置,然后重新启动NetworkManager,它才起作用。您需要为要使用的每个已安装的 VPN 配置执行此操作。
答案3
这似乎是一个错误,因为 Ubuntu 在更新 network-manager-openvpn 软件包以了解 systemd-resolve 之前切换到了 systemd-resolve。 Ubuntu 18.10 似乎已经通过网络管理器 1.12.2-0ubuntu5 解决了这个问题。更多信息请点击这里:https://gitlab.gnome.org/GNOME/NetworkManager-openvpn/issues/10。
在发布之前,@Bob Willan 的答案对我有用。
答案4
我通过将这些行添加到我的 OpenVPN 配置文件中成功解决了这个问题:
脚本安全 2
/etc/openvpn/update-resolv-conf
下来 /etc/openvpn/update-resolv-conf
从 @如何修复 Linux 中的 OpenVPN DNS 泄漏
对于 Windows 用户(OpenVPN +2.3.9):
阻止外部 DNS