全部产品
Search
文档中心

VPN网关:通过SSL-VPN自定义DNS实现私有域名解析

更新时间:May 22, 2026
重要

该功能目前支持的地域:菲律宾(马尼拉)、泰国(曼谷)、马来西亚(吉隆坡)。

可在SSL-VPN服务端统一配置并下发私有DNS服务器地址,使客户端具备解析VPC内私有域名的能力。

工作原理

image

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服务器。