Pla*_*ong 10 dns openvpn resolv.conf
我刚刚订阅了 VPN 提供商。
我有 Xubuntu 17.10,openvpn 2.4.3。启动 openvpn 命令后,我检查了 IP(很好)并执行了一个简单的DNS 泄漏测试:不好,它显示了我的 Internet 服务提供商!
我有一个初步审讯:
在我这边,我尝试在 .ovpn 配置文件中为 openvpn 更改一些值:
最初已经有这些行,预计可以工作,但没有:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Run Code Online (Sandbox Code Playgroud)我根据这个reddit answer(明确指定 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'"
Run Code Online (Sandbox Code Playgroud)
这样做似乎可以完成工作,因为/etc/resolvconf
up/down 脚本更新了内容:
# 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
Run Code Online (Sandbox Code Playgroud)
但是 DNSleaktest 仍然显示我的 ISP。
然后我了解到ubuntu 包的存在,openvpn-systemd-resolved
它提供了一个类似于update-resolve-conf
但使其与 systemd 一起工作的脚本(在这里我不知道哪些进程使用这个:network-manager?openvpn?)。我安装了该软件包并替换了 .ovpn 文件中的脚本名称:
up "/etc/openvpn/update-systemd-resolved ..."
down "..."
down-pre
Run Code Online (Sandbox Code Playgroud)
仍然没有运气。[在写这篇文章时,我只是想出了解决方案,请参阅下面的答案]
然后我玩了很多/etc/resolv.conf
文件。通常它不应该改变,所以我把我的 DNS 服务器地址放入/etc/resolvconf/resolv.conf.d/base
,但发出resolvconf -u
似乎不起作用。
与VPN公司的支持人员聊天,没有解决方案。
我想这样的各种解决方案一个,以及随后接受的答案:
我忘记了我尝试过的其他事情,然后我想,stackexchange 会让我摆脱痛苦,它奇迹般地做到了,仅仅凭借提出问题的能力。
经过更多检查后我注意到了。我可以删除这些systemd-update-resolved
行,它仍然有效,但仅限于某些条件:
当openvpn
服务运行时,我发现 DNS 泄漏。如果我停止它,然后只为我的客户端重新启动服务:
sudo service openvpn stop
sudo service openvpn@client start
Run Code Online (Sandbox Code Playgroud)
那么它的工作原理。
抱歉,我想我还没有彻底检查 openvpn 手册,但这是为什么呢?这不是安全漏洞吗?特别是因为从apt安装后会自动激活openvpn服务。如何使更改永久化?(我试过了sudo systemctl disable openvpn
,但在下次启动时我仍然遇到同样的问题)。
一旦我停止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
Run Code Online (Sandbox Code Playgroud)
之后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
Run Code Online (Sandbox Code Playgroud)
不再工作了,我在这两种情况下都会出现 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
Run Code Online (Sandbox Code Playgroud)
Sooo 的答案是仔细遵循 ArchLinux wiki 中的始终在线说明:
https://wiki.archlinux.org/index.php/OpenVPN#Update_systemd-resolved_script
并附加相应的行。
所以,分两步:
sudo apt install openvpn-systemd-resolved
Run Code Online (Sandbox Code Playgroud)
并追加以下行到你的.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
Run Code Online (Sandbox Code Playgroud)
如果这不清楚,您的文件现在应该包含两行“向上”和两行“向下”:
# 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
Run Code Online (Sandbox Code Playgroud)
请参阅我的问题中的编辑 1。
这里systemd-resolved.service
引用了这个奇怪行为的问题。
似乎放入客户端配置文件的选项如下:
dhcp-option DOMAIN-ROUTE .
Run Code Online (Sandbox Code Playgroud)
这显然通过选定的连接路由所有DNS ...
小智 5
我在 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/*
Run Code Online (Sandbox Code Playgroud)
然后选择您想要修复的并在其上运行此命令(或者您可以手动编辑配置文件,因为此命令只是在 ipv4 部分下添加一个 dns-priority 条目):
$ sudo nmcli 连接修改 < VPN 连接名称> ipv4.dns-priority -42
并重新启动:
$ sudo service network-manager restart
Run Code Online (Sandbox Code Playgroud)
请注意,至少对我来说,将其放入来自我的 VPN (ProtonVPN) 的 OpenVPN .ovpn 配置文件中不起作用。由于某种原因,当使用 GUI 对话框安装时,它没有进入 NetworkManager 配置。只有安装后更新配置,然后重新启动NetworkManager,它才起作用。您需要为要使用的每个已安装的 VPN 配置执行此操作。
归档时间: |
|
查看次数: |
23503 次 |
最近记录: |