該功能目前支援的地區:菲律賓(馬尼拉)、泰國(曼穀)、馬來西亞(吉隆坡)。
可在SSL-VPN服務端統一配置並下發私人DNS伺服器位址,使用戶端具備解析VPC內私人網域名稱的能力。
工作原理
SSL-VPN自訂DNS基於OpenVPN協議的DHCP Option機制實現,整體工作流程如下:
您在SSL服務端開啟自定義客戶端DNS開關,並填寫VPC內私人DNS伺服器的IP地址(最多2個)。
SSL-VPN服務端將DNS配置下發給用戶端。
用戶端發起SSL-VPN串連後,自動接收服務端推送的DNS伺服器位址。
用戶端系統將該DNS伺服器設定為當前網路連接的首選DNS。
後續的網域名稱解析請求(如
git.internal、exapmle.com)通過VPN隧道發送到VPC內的DNS伺服器,完成私人網域名稱解析。
使用限制:
最多配置2個DNS伺服器位址(主/備)。
系統不會驗證DNS伺服器的可達性,請確保所填IP在VPC內可正常提供DNS服務。
由於用戶端的環境問題,部分用戶端可能需要設定DNS生效的優先順序才能使用。macOS用戶端(TunnelBlick)串連後可自動應用DNS設定,Windows用戶端可能需要手動修改網卡的metric;Linux系統需要額外配置用戶端認證檔案才會生效。
暫不支援iPhone、iPad、Android用戶端。
不支援網域名稱形式的DNS伺服器位址。
不支援動態 DNS 更新。
不支援IPv6 DNS。
配置步驟
前提條件
一、在阿里雲控制台開啟自訂DNS
控制台
在目標SSL服務端執行個體的操作列,單擊編輯。
在彈窗的視窗中,開啟自定義客戶端DNS開關,並配置:
DNS伺服器位址1:填寫VPC內已部署的DNS伺服器私網地址。
DNS伺服器位址2:可選。填寫備用DNS伺服器位址。
API
調用ModifySslVpnServer,通過DnsServers參數設定DNS伺服器位址。
二、用戶端配置
根據您的作業系統,選擇對應的配置方法。macOS串連後DNS自動生效,Linux系統需要修改.ovpn設定檔。
Windows
右鍵單擊案頭右下角OpenVPN用戶端的托盤表徵圖,選擇重新串連。
開啟cmd命令列,輸入
nslookup example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。
如果不生效,請確認
確認各個網卡的metric。在cmd命令列中輸入如下命令:
netsh interface ip show configmetric越小,則網卡的優先順序越高。
如果將VPN隧道對應網卡的metric不是最小,則改為最小:
netsh interface ip set interface "OpenVPN TAP-Windows" metric=10OpenVPN用戶端為VPN隧道建立的網卡一般以“OpenVPN TAP-Windows”開頭。此處的網卡名“OpenVPN TAP-Windows”僅為樣本,請改為用戶端實際的網卡名。
Mac
在TunnelBlick用戶端介面,先中斷連線,再重新串連。
開啟Terminal終端,輸入
dig example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。
CentOS/AliOS
修改
/etc/openvpn/conf下的config.ovpn檔案,末尾添加4行:script-security 2 up /etc/openvpn/conf/client.up down /etc/openvpn/conf/client.down down-pre將OpenVPN內建的
client.up和client.down指令碼複製到 OpenVPN 配置目錄,並添加執行許可權:sudo cp /usr/share/doc/openvpn/contrib/pull-resolv-conf/client.up /etc/openvpn/conf/ sudo cp /usr/share/doc/openvpn/contrib/pull-resolv-conf/client.down /etc/openvpn/conf/ sudo chmod +x /etc/openvpn/conf/client.up sudo chmod +x /etc/openvpn/conf/client.down將
client.up和client.down的以下代碼改成if false; then:
重啟openvpn進程:
sudo killall openvpn sudo openvpn --config /etc/openvpn/conf/config.ovpn --daemon驗證DNS伺服器的地址已改:
cat /etc/resolv.conf執行
dig example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。
如後續需要停用該DNS解析功能,則步驟為:
斷開SSL-VPN串連:
sudo killall openvpn編輯
/etc/openvpn/conf目錄下的config.ovpn檔案,注釋掉以script-security、up、down、down-pre開頭的4行(位於檔案末尾)。啟動openvpn進程,建立SSL-VPN串連:
sudo openvpn --config /etc/openvpn/conf/config.ovpn --daemon
Ubuntu
先前往阿里雲控制台,重新下載認證:在目標SSL客戶端的操作列單擊下載認證。
再前往Ubuntu用戶端,將
/etc/openvpn/conf目錄下已有的用戶端認證移動到其他目錄備份。將重新下載的用戶端認證放到
/etc/openvpn/conf目錄下。編輯config.ovpn檔案,移除末尾4行的注釋:

安裝resolvectl(systemd-resolved 的命令列工具)
apt install systemd-resolved設定 tun0 的 DNS 為全域優先(~. 表示匹配所有網域名稱)
resolvectl domain tun0 "~."重啟openvpn進程:
sudo killall openvpn sudo openvpn --config /etc/openvpn/conf/config.ovpn --daemon驗證DNS伺服器的地址已改:
resolvectl status tun0執行
dig example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。
如後續需要停用該DNS解析功能,則步驟為:
斷開SSL-VPN串連:
sudo killall openvpn編輯
/etc/openvpn/conf目錄下的config.ovpn檔案,注釋掉以script-security、up、down、down-pre開頭的4行(位於檔案末尾)。啟動openvpn進程,建立SSL-VPN串連:
sudo openvpn --config /etc/openvpn/conf/config.ovpn --daemon
常見問題
DNS未生效怎麼辦?
確認DNS伺服器所在的網段屬於SSL服務端配置的本端網段範圍內。若不在,需在本端網段中添加DNS伺服器所在的位址區段。
確認DNS伺服器允許客戶端網段(SSL-VPN給用戶端分配IP的位址集區)的解析請求。
確認DNS伺服器的安全性群組已允許存取UDP 53連接埠。
檢查是否有其他VPN或網路軟體覆蓋了DNS設定。
針對Windows用戶端,還需要檢查:
確保VPN隧道對應的網卡metric為最小,修改方法見二、用戶端配置。
在CMD中執行
ipconfig /flushdns清除DNS緩衝後重試。
針對CentOS/AliOS用戶端,還需要檢查:
確認已在
.ovpn檔案中添加了script-security 2及up/down指令碼配置。確認
/etc/openvpn/conf/目錄下存在對應的DNS更新指令碼(client.up和client.down)。確認
/etc/resolv.conf確認是否包含配置的DNS地址。
針對Ubuntu用戶端,還需要檢查:
確認已重新下載認證檔案,且在
.ovpn檔案中取消了最後4行的注釋。確認系統中存在對應的DNS更新指令碼(
update-resolv-conf或update-systemd-resolved)。執行
resolvectl status確認是否包含配置的DNS地址。
開啟自訂DNS後,是否需要重新下載用戶端認證?
除了Ubuntu系統需要重新下載,其他系統不需要重新下載。
自訂DNS是否支援IPv6地址?
不支援。當前僅支援IPv4格式的DNS伺服器位址。
配置的DNS伺服器不可達會怎樣?
系統不會驗證DNS伺服器的可達性。如果配置的DNS伺服器不可達,用戶端串連VPN後將無法完成網域名稱解析。請確保DNS伺服器在VPC內正常運行,且其所在網段已納入SSL-VPN的路由配置。
是否支援配置為非VPC內的DNS伺服器?
支援,例如可將SSL服務端的DNS伺服器位址設定為雲下的DNS伺服器。