如何修復 OpenVPN DNS 洩漏
我剛剛訂閱了一個 VPN 提供商。
我有 Xubuntu 17.10,openvpn 2.4.3。啟動 openvpn 命令後,我檢查了 IP(正常)並進行了簡單的DNS 洩漏測試:不正常,它顯示了我的 Internet 服務提供商!
如何修復此 DNS 洩漏?
我有一個初步審訊:
- 它在我身邊“可修復”嗎?還是遠端伺服器配置錯誤?
在我這邊,我嘗試在 openvpn 的 .ovpn 配置文件中更改一些值:
- 最初已經有這些行,預計可以工作,但不:
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
- 我根據這個reddit 答案(明確指定 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
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
但 DNSleaktest 仍然顯示我的 ISP。 3. 因此,我了解到ubuntu 包的存在,
openvpn-systemd-resolved
它提供了一個類似於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. 我嘗試了各種像這樣的解決方案,以及隨後不被接受的答案:
- 我忘記了我嘗試過的其他事情,然後我想,stackexchange 將把我從痛苦中解救出來,而且它奇蹟般地做到了,僅僅通過提出問題的力量。
$$ Edit 1: Not solved! Actually my first answer is not the reason it works $$
經過更多檢查後,我注意到了。我可以刪除這些
systemd-update-resolved
行,它仍然有效,但僅在某些條件下:當
openvpn
服務執行時,我得到了 DNS 洩漏。如果我停止它,然後只為我的客戶重新啟動服務:sudo service openvpn stop sudo service openvpn@client start
然後它工作。
抱歉,我想我還沒有徹底檢查 openvpn 手冊,但這是為什麼呢?不是安全漏洞嗎?特別是因為從 apt 安裝後,openvpn 服務會自動啟動。如何使更改永久化?(我試過
sudo systemctl disable openvpn
了,但在下次啟動時我仍然遇到同樣的問題)。$$ Edit 2: routing tables $$
一旦我停止
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
我在 Ubuntu 17.10 和現在的 18.04 LTS 上遇到了這個 DNS 洩漏問題。它一定是在我不久前從 16.10 更新時開始的,直到現在我才偶然想到要檢查。以上(以及我發現並嘗試過的其他事情)都沒有幫助,直到我遇到下面的這個 URL,一直閱讀錯誤報告。添加 dns-priority 行的評論對我有用。
https://bugs.launchpad.net/network-manager/+bug/1624317 查看評論 #103。
查找您已安裝的 NetworkManager VPN 連接(“
$
”只是我的系統提示,顯示您在終端視窗的命令行中):$ ls -la /etc/NetworkManager/system-connections/*
然後選擇您要修復的並在其上執行此命令(或者您可以手動編輯配置文件,因為此命令只是在 ipv4 部分下添加了一個 dns-priority 條目):
$ sudo nmcli connection modify *<vpn-connection-name>* ipv4.dns-priority -42
並重新啟動:
$ sudo service network-manager restart
請注意,至少對我來說,將它放在來自我的 VPN(ProtonVPN)的 OpenVPN .ovpn 配置文件中不起作用。由於某種原因,它在使用 GUI 對話框安裝時沒有進入 NetworkManager 配置。只有在安裝後更新配置,然後重新啟動 NetworkManager,它才起作用。您需要為每個要使用的已安裝 VPN 配置執行此操作。
所以答案是仔細遵循 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
$$ Edit 1: Actually NOPE, this wasn’t the reason it worked $$
請參閱我的問題中的編輯 1。
$$ Edit 2: I think I got it right this time $$
此處引用了此奇怪
systemd-resolved.service
行為的問題。似乎放入客戶端配置文件的選項如下:
dhcp-option DOMAIN-ROUTE .
這顯然是通過選定的連接路由所有 DNS ……