全部產品
Search
文件中心

VPN Gateway:通過SSL-VPN自訂DNS實現私人網域名稱解析

更新時間:May 23, 2026
重要

該功能目前支援的地區:菲律賓(馬尼拉)、泰國(曼穀)、馬來西亞(吉隆坡)。

可在SSL-VPN服務端統一配置並下發私人DNS伺服器位址,使用戶端具備解析VPC內私人網域名稱的能力。

工作原理

SSL-VPN自訂DNS基於OpenVPN協議的DHCP Option機制實現,整體工作流程如下:

  1. 您在SSL服務端開啟自定義客戶端DNS開關,並填寫VPC內私人DNS伺服器的IP地址(最多2個)。

  2. SSL-VPN服務端將DNS配置下發給用戶端。

  3. 用戶端發起SSL-VPN串連後,自動接收服務端推送的DNS伺服器位址。

  4. 用戶端系統將該DNS伺服器設定為當前網路連接的首選DNS。

  5. 後續的網域名稱解析請求(如git.internalexapmle.com)通過VPN隧道發送到VPC內的DNS伺服器,完成私人網域名稱解析。

使用限制:

  • 最多配置2個DNS伺服器位址(主/備)。

  • 系統不會驗證DNS伺服器的可達性,請確保所填IP在VPC內可正常提供DNS服務。

  • 由於用戶端的環境問題,部分用戶端可能需要設定DNS生效的優先順序才能使用。macOS用戶端(TunnelBlick)串連後可自動應用DNS設定,Windows用戶端可能需要手動修改網卡的metric;Linux系統需要額外配置用戶端認證檔案才會生效。

  • 暫不支援iPhone、iPad、Android用戶端。

  • 不支援網域名稱形式的DNS伺服器位址。

  • 不支援動態 DNS 更新。

  • 不支援IPv6 DNS。

配置步驟

前提條件

  • 已根據快速入門實現了用戶端與雲上VPC內網互連。如果是Mac系統,請使用TunnelBlick用戶端。

  • VPC內已部署DNS伺服器(如Windows AD DNS、CoreDNS或Bind),且服務正常運行。

  • DNS伺服器所在的安全性群組允許存取UDP 53連接埠,允許來自客戶端網段的地址訪問。

一、在阿里雲控制台開啟自訂DNS

控制台

  1. 在目標SSL服務端執行個體的操作列,單擊編輯

  2. 在彈窗的視窗中,開啟自定義客戶端DNS開關,並配置:

    • DNS伺服器位址1:填寫VPC內已部署的DNS伺服器私網地址。

    • DNS伺服器位址2:可選。填寫備用DNS伺服器位址。

API

調用ModifySslVpnServer,通過DnsServers參數設定DNS伺服器位址。

二、用戶端配置

根據您的作業系統,選擇對應的配置方法。macOS串連後DNS自動生效,Linux系統需要修改.ovpn設定檔。

Windows

  1. 右鍵單擊案頭右下角OpenVPN用戶端的托盤表徵圖,選擇重新串連

  2. 開啟cmd命令列,輸入nslookup example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。

重要

如果不生效,請確認

  1. 確認各個網卡的metric。在cmd命令列中輸入如下命令:

    netsh interface ip show config

    metric越小,則網卡的優先順序越高。
  2. 如果將VPN隧道對應網卡的metric不是最小,則改為最小:

    netsh interface ip set interface "OpenVPN TAP-Windows" metric=10

    OpenVPN用戶端為VPN隧道建立的網卡一般以“OpenVPN TAP-Windows”開頭。此處的網卡名“OpenVPN TAP-Windows”僅為樣本,請改為用戶端實際的網卡名。

Mac

  1. 在TunnelBlick用戶端介面,先中斷連線,再重新串連。

  2. 開啟Terminal終端,輸入dig example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。

CentOS/AliOS

  1. 修改/etc/openvpn/conf下的config.ovpn檔案,末尾添加4行:

    script-security 2
    up /etc/openvpn/conf/client.up
    down /etc/openvpn/conf/client.down
    down-pre
  2. 將OpenVPN內建的client.upclient.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
  3. client.upclient.down的以下代碼改成 if false; then

    image

  4. 重啟openvpn進程:

    sudo killall openvpn
    sudo openvpn --config /etc/openvpn/conf/config.ovpn --daemon
  5. 驗證DNS伺服器的地址已改:

    cat /etc/resolv.conf
  6. 執行dig example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。

重要

如後續需要停用該DNS解析功能,則步驟為:

  1. 斷開SSL-VPN串連:

    sudo killall openvpn

  2. 編輯/etc/openvpn/conf目錄下的config.ovpn檔案,注釋掉以script-securityupdowndown-pre開頭的4行(位於檔案末尾)。

  3. 啟動openvpn進程,建立SSL-VPN串連:

    sudo openvpn --config /etc/openvpn/conf/config.ovpn --daemon

Ubuntu

  1. 先前往阿里雲控制台,重新下載認證:在目標SSL客戶端操作列單擊下載認證

  2. 再前往Ubuntu用戶端,將/etc/openvpn/conf目錄下已有的用戶端認證移動到其他目錄備份。

  3. 將重新下載的用戶端認證放到/etc/openvpn/conf目錄下。

  4. 編輯config.ovpn檔案,移除末尾4行的注釋:

    image

  5. 安裝resolvectl(systemd-resolved 的命令列工具)

    apt install systemd-resolved

  6. 設定 tun0 的 DNS 為全域優先(~. 表示匹配所有網域名稱)

    resolvectl domain tun0 "~."

  7. 重啟openvpn進程:

    sudo killall openvpn
    sudo openvpn --config /etc/openvpn/conf/config.ovpn --daemon
  8. 驗證DNS伺服器的地址已改:

    resolvectl status tun0

  9. 執行dig example.com(example.com請改為實際的私人網域名稱),若返回正確的內網IP地址,說明DNS配置生效。

重要

如後續需要停用該DNS解析功能,則步驟為:

  1. 斷開SSL-VPN串連:

    sudo killall openvpn

  2. 編輯/etc/openvpn/conf目錄下的config.ovpn檔案,注釋掉以script-securityupdowndown-pre開頭的4行(位於檔案末尾)。

  3. 啟動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 2up/down指令碼配置。

    • 確認/etc/openvpn/conf/目錄下存在對應的DNS更新指令碼(client.upclient.down)。

    • 確認/etc/resolv.conf確認是否包含配置的DNS地址。

  • 針對Ubuntu用戶端,還需要檢查:

    • 確認已重新下載認證檔案,且在.ovpn檔案中取消了最後4行的注釋。

    • 確認系統中存在對應的DNS更新指令碼(update-resolv-confupdate-systemd-resolved)。

    • 執行resolvectl status確認是否包含配置的DNS地址。

開啟自訂DNS後,是否需要重新下載用戶端認證?

除了Ubuntu系統需要重新下載,其他系統不需要重新下載。

自訂DNS是否支援IPv6地址?

不支援。當前僅支援IPv4格式的DNS伺服器位址。

配置的DNS伺服器不可達會怎樣?

系統不會驗證DNS伺服器的可達性。如果配置的DNS伺服器不可達,用戶端串連VPN後將無法完成網域名稱解析。請確保DNS伺服器在VPC內正常運行,且其所在網段已納入SSL-VPN的路由配置。

是否支援配置為非VPC內的DNS伺服器?

支援,例如可將SSL服務端的DNS伺服器位址設定為雲下的DNS伺服器。