通过点到站点VPN连接带专用终结点的Azure函数应用解析问题
问题:Azure函数应用通过VPN访问时无法解析到专用终结点私IP
现有配置概述
已部署Azure函数应用、虚拟网络、VPN网关(独立子网)、专用终结点(同VNet独立子网)及专用DNS区域,关键Terraform配置如下:
VPN网关IP配置
ip_configuration { name = "aza-vnet" public_ip_address_id = azurerm_public_ip.vpn_gateway_public_ip.id private_ip_address_allocation = "Dynamic" subnet_id = azurerm_subnet.vpn_gateway_subnet.id }
专用终结点配置
private_service_connection { name = "oai-create-privateserviceconnection" private_connection_resource_id = azurerm_linux_function_app.oai_create_app.id subresource_names = ["sites"] is_manual_connection = false } private_dns_zone_group { name = "oai-create-dns-zone-group" private_dns_zone_ids = [azurerm_private_dns_zone.create_func.id] }
专用DNS区域及链接
resource "azurerm_private_dns_zone" "create_func" { name = "privatelink.azurewebsites.net" resource_group_name = var.rg_name } resource "azurerm_private_dns_zone_virtual_network_link" "create_func" { name = "oai-create-link" resource_group_name = var.rg_name private_dns_zone_name = azurerm_private_dns_zone.create_func.name virtual_network_id = azurerm_virtual_network.vnet.id }
现有A记录配置
resource "azurerm_dns_a_record" "create_func" { name = "func-name.privatelink.azurewebsites.net" zone_name = azurerm_private_dns_zone.create_func.name resource_group_name = var.rg_name ttl = 300 records = [azurerm_private_endpoint.create_func.private_service_connection[0].private_ip_address] #records = [azurerm_private_endpoint.create_func.ip_configuration[0].private_ip_address] }
VPN客户端DNS配置
<clientconfig i:nil="true"> <dnssuffixes> <dnssuffix>.azurewebsites.net</dnssuffix> </dnssuffixes> <dnsservers> <dnsserver>168.63.129.16</dnsserver> </dnsservers> </clientconfig>
问题现象
- VPN连接后,执行
curl https://func-name.azurewebsites.net/api/create时域名解析失败,nslookup显示解析到公网IP:nslookup func-name.azurewebsites.net Server: 10.16.80.1 Address: 10.16.80.1#53 Non-authoritative answer: func-name.azurewebsites.net canonical name = func-name.privatelink.azurewebsites.net. func-name.privatelink.azurewebsites.net canonical name = hosts.func-name.azurewebsites.net. Name: hosts.func-name.azurewebsites.net Address: 13.92.237.218 - 直接访问专用终结点私IP
curl http://10.0.2.4/api/create返回404(网络连通,但因域名绑定问题无法正确路由)
解决步骤
1. 修正专用DNS区域的A记录配置
现有A记录名称包含完整域名后缀,导致记录无效,同时私IP获取字段错误。修正后配置如下:
resource "azurerm_dns_a_record" "create_func" { name = "func-name" # 仅需前缀,无需带区域后缀 zone_name = azurerm_private_dns_zone.create_func.name resource_group_name = var.rg_name ttl = 300 records = [azurerm_private_endpoint.create_func.ip_configuration[0].private_ip_address] }
说明:
ip_configuration下的private_ip_address才是专用终结点的实际私IP字段,private_service_connection中的IP字段并非正确取值。
2. 调整VPN客户端DNS配置
确保VPN客户端优先使用Azure DNS,并添加正确的DNS搜索后缀,修正后的配置:
<clientconfig i:nil="true"> <dnssuffixes> <dnssuffix>privatelink.azurewebsites.net</dnssuffix> <dnssuffix>.azurewebsites.net</dnssuffix> </dnssuffixes> <dnsservers> <dnsserver>168.63.129.16</dnsserver> </dnsservers> </clientconfig>
同时验证VPN连接后的DNS服务器:
- Windows:执行
ipconfig /all,确认DNS服务器为168.63.129.16 - Linux/macOS:执行
resolvectl status或scutil --dns,确认DNS配置生效
3. 验证专用终结点连接状态
在Azure门户检查专用终结点的private_service_connection状态为Approved,确保与函数应用的连接已建立。
4. 刷新客户端DNS缓存
清除旧的解析记录,避免干扰:
- Windows:
ipconfig /flushdns - Linux:
sudo systemd-resolve --flush-caches - macOS:
sudo dscacheutil -flushcache
5. 测试解析与访问
执行nslookup func-name.azurewebsites.net 168.63.129.16,确认返回专用终结点的私IP;之后再访问https://func-name.azurewebsites.net/api/create即可正常路由。
注意:无法直接通过私IP访问函数应用,因为Azure函数应用的主机头仅绑定域名,不支持IP直接访问。
内容的提问来源于stack exchange,提问作者gary69
相关产品推荐
相关产品推荐

