
我在筆記型電腦和伺服器之間使用 OpenVPN 連線。該配置直到今天都有效(我只是運行了apt update && apt upgrade
),但從那時起我的 DNS 設定在連接到 OpenVPN 後就「錯誤」了。
連接到 OpenVPN 伺服器後,我的配置DNS Domain: ~.
中有兩個「捕獲所有」DNS 網域條目 ( ) 。systemd-resolve
剝離輸出systemd-resolve --status
:
Link 11 (tun0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.X.Y
DNS Domain: ~.
Link 2 (enp0s25)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.16.X.Y
10.16.X.Y
DNS Domain: ~.
因此,DNS 查詢現在不再透過 VPN 安全地傳輸,但也可以透過普通網路傳輸。
這會導致 DNSLeak,甚至更糟:VPN 內部主機名稱無法正確解析(時不時)。
我只知道將DNS Domain: ~.
條目新增至 tun0 介面以進行解決的選項。但是如何從真實介面中刪除已經存在的介面呢?
我已經使用此配置來更新我的 OpenVPN client.conf 中的 systemd-resolved:
# Upate systemd-resolvd
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
有人知道如何解決這個問題嗎?
// 更新:看起來這是一個較早已知的問題,NetworkManager 開始隨機將根 DNS 網域附加到連結。有一個關於它的有趣討論GitHub 問題在開發商的回購協議中update-systemd-resolved
。
// 大概這次提交到 NetworkManager 打破了它。因為它為所有介面行為引入了預設 dns 路由。
答案1
新增至從 OpenVPN 伺服器下載的用戶端設定檔(副檔名為 .ovpn 的檔案):
dhcp-option DOMAIN-ROUTE .
如您所知,在新增此行之前,在 Ubuntu 18.04 中您必須安裝update-systemd-resolved
按照中所述安裝腳本https://github.com/jonathanio/update-systemd-resolved
如果仍然不起作用,也許您還必須新增內部 DNS 伺服器。檢查您在 .ovpn 檔案末尾新增的行,如下所示:
script-security 2
dhcp-option DNS 10.1.0.1 # replace this IP with your DNS server IP.
dhcp-option DOMAIN yourinternaldomain.local # replace this with your internal domain name.
dhcp-option DOMAIN-ROUTE .
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
如果您使用 UI (gnome) 進行連接
最後,如果您使用 UI VPN 圖示連線到 VPN,則必須重新匯入 .ovpn 修改後的檔案。
為此,請在終端機中執行:
sudo apt install openvpn openvpn-systemd-resolved resolvconf
sudo apt install network-manager-openvpn network-manager-openvpn-gnome
點擊 Ubuntu 開始選單:
輸入“網路”一詞,然後按一下“網路”。它應該顯示如下內容:
點擊“+” 登入 VPN 並點選“從檔案匯入”選項:
導入後,新增名稱並點擊對話框右上角的“新增”按鈕。
你已經準備好了!
若要連接到 VPN,請按一下網路圖標,然後按一下鎖定圖標。