Dns

如何修復 OpenVPN DNS 洩漏

  • January 12, 2022

我剛剛訂閱了一個 VPN 提供商。

我有 Xubuntu 17.10,openvpn 2.4.3。啟動 openvpn 命令後,我檢查了 IP(正常)並進行了簡單的DNS 洩漏測試:不正常,它顯示了我的 Internet 服務提供商!

如何修復此 DNS 洩漏?

我有一個初步審訊:

  • 它在我身邊“可修復”嗎?還是遠端伺服器配置錯誤?

在我這邊,我嘗試在 openvpn 的 .ovpn 配置文件中更改一些值:

  1. 最初已經有這些行,預計可以工作,但不:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
  1. 我根據這個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/resolvconfup/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. 我嘗試了各種像這樣解決方案,以及隨後不被接受的答案:

  • 安裝dnsmasqserver=...投入/etc/dnsmasq.conf
  • /etc/dhcp/dhclient.conf在(詳細資訊)中放置“取代”行;
  • chattr基於hack。_
  1. 我忘記了我嘗試過的其他事情,然後我想,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 ……

引用自:https://unix.stackexchange.com/questions/434916