Azure中如何实现公网DNS名称内网解析为内网IP、外网解析为公网IP?
实现Azure虚拟网络内/外DNS拆分解析(内网IP/公网IP)
这个需求属于典型的**拆分DNS(Split DNS)**场景,Azure私有DNS区域可以完美解决——让虚拟网络内部的请求解析到虚拟机内网IP,外部请求仍解析为公网IP。下面给你详细说明Azure CLI操作和门户配置两种方案:
方案一:Azure CLI 操作步骤
1. 准备工作
先登录Azure CLI并切换到目标订阅:
az login az account set --subscription <你的订阅ID>
2. 创建私有DNS区域
创建一个与你的虚拟机公网DNS域名完全一致的私有DNS区域(比如你的虚拟机公网DNS是vm1.contoso.com,就创建contoso.com区域):
az network private-dns zone create --resource-group <资源组名称> --name <公网域名,如contoso.com>
3. 关联虚拟网络到私有DNS区域
将你的目标虚拟网络关联到刚创建的私有DNS区域,这里关闭自动注册(因为我们要手动映射公网DNS名称到内网IP,避免自动注册的主机名冲突):
az network private-dns link vnet create \ --resource-group <资源组名称> \ --zone-name <公网域名> \ --name <自定义链接名称,如vnet-dns-link> \ --virtual-network <虚拟网络名称或ID> \ --registration-enabled false
4. 添加A记录映射公网DNS名称到内网IP
为目标虚拟机添加A记录,将其公网DNS前缀(比如vm1)指向对应的内网私有IP:
az network private-dns record-set a add-record \ --resource-group <资源组名称> \ --zone-name <公网域名> \ --record-set-name <虚拟机公网DNS前缀,如vm1> \ --ipv4-address <虚拟机内网IP>
5. 验证效果
在虚拟网络内的Ubuntu虚拟机上执行以下命令,确认解析结果为内网IP:
nslookup <虚拟机公网DNS名称,如vm1.contoso.com> # 或者用dig命令 dig <虚拟机公网DNS名称>
外部网络查询该DNS名称时,仍会返回公网IP。
方案二:Azure门户配置步骤
1. 创建私有DNS区域
- 登录Azure门户,在搜索栏输入「私有DNS区域」并进入服务页面。
- 点击「创建」,填写以下信息:
- 资源组:选择虚拟机所在的资源组
- 名称:输入与虚拟机公网DNS完全一致的域名(如
contoso.com) - 订阅:选择目标订阅
- 点击「查看+创建」,确认后完成创建。
2. 关联虚拟网络到私有DNS区域
- 进入刚创建的私有DNS区域,在左侧菜单选择「虚拟网络链接」。
- 点击「添加」,填写:
- 链接名称:自定义名称(如
vnet-dns-link) - 虚拟网络:选择你的目标虚拟网络
- 启用自动注册:取消勾选(避免自动注册的主机名与公网DNS名称冲突)
- 链接名称:自定义名称(如
- 点击「确定」完成关联。
3. 添加A记录映射公网DNS到内网IP
- 在私有DNS区域左侧菜单选择「记录集」,点击「添加」。
- 填写记录集信息:
- 名称:输入虚拟机公网DNS的前缀(如
vm1) - 类型:选择「A」
- TTL:默认300即可
- IP地址:输入虚拟机的内网私有IP
- 名称:输入虚拟机公网DNS的前缀(如
- 点击「确定」保存记录。
4. 验证效果
在虚拟网络内的Ubuntu虚拟机上执行nslookup <虚拟机公网DNS名称>,确认返回内网IP;外部网络查询则返回公网IP。
内容的提问来源于stack exchange,提问作者opticyclic
相关产品推荐
相关产品推荐

