如何修复 OpenVPN DNS 泄漏

如何修复 OpenVPN DNS 泄漏

我刚刚订阅了 VPN 提供商。

我有 Xubuntu 17.10,openvpn 2.4.3。启动 openvpn 命令后,我检查 IP(很好)并执行了一个简单的操作DNS泄漏测试:不好,它显示了我的互联网服务提供商!

如何解决这个 DNS 泄漏问题?

我有一个初步审讯:

  • 我这边“可以修复”吗?或者远程服务器配置错误?

在我这边,我尝试更改 openvpn 的 .ovpn 配置文件中的一些值:

  1. 最初已经有这些行,预计可以工作,但是不行:

    script-security 2
    up /etc/openvpn/update-resolv-conf
    down /etc/openvpn/update-resolv-conf
    
  2. 我按照这个改变了它们红迪网答案(明确指定 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。

  3. 那么我学到了ubuntu 软件包的存在openvpn-systemd-resolved提供了一个类似于 systemd 的脚本,update-resolve-conf但使其可以与 systemd 一起使用(这里我不知道哪些进程使用此脚本:network-manager?openvpn?)。我安装了该软件包并被取代我的 .ovpn 文件中的脚本名称:

    up "/etc/openvpn/update-systemd-resolved ..."
    down "..."
    down-pre
    

    还是没有运气。[在写这篇文章时我刚刚找到了解决方案,请参阅我的答案以下]

  4. 然后我对这个文件进行了很多修改/etc/resolv.conf。通常情况下不应更改,因此我将 DNS 服务器地址放入/etc/resolvconf/resolv.conf.d/base,但发布resolvconf -u似乎不起作用。

  5. 与VPN公司的支持人员交谈,没有解决方案。

  6. 我尝试了像这样的各种解决方案,以及随后未接受的答案:

    • 安装dnsmasqserver=...投入/etc/dnsmasq.conf
    • /etc/dhcp/dhclient.conf(细节);
    • 基于chattr黑客
  7. 我忘记了我尝试过的其他事情,然后我想,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

相关内容