该功能目前支持的地域:菲律宾(马尼拉)、泰国(曼谷)、马来西亚(吉隆坡)。
可在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服务器。