如何通过Azure VPN网关安全访问配置SSL的自定义域名Web服务?
解决方案
核心问题分析
连接点到站点(P2S)VPN后访问域名失败的本质原因:
- 默认情况下,域名解析返回公网IP,流量走本地公网链路,源IP是你的本地公网IP,不在NSG的443端口允许列表内,被拦截。
- 访问私有IP成功是因为流量走VPN私网链路,NSG默认允许VNet内部/VPN地址池的流量(或你已有对应放行规则)。
具体实现步骤
1. 配置Azure私有DNS,让域名解析到VM私有IP
- 在Azure门户创建私有DNS区域,域名设置为你的自定义域名(比如
customdomain.com)。 - 在该DNS区域添加一条A记录:
- 名称:留空(或
@)对应根域名customdomain.com;若为子域名则填写子域名名称。 - IP地址:填写VM的私有IP地址。
- 名称:留空(或
- 将私有DNS区域关联到VM所在的虚拟网络,确保VNet内资源和VPN客户端能使用该DNS解析规则。
2. 配置P2S VPN的DNS服务器
- 编辑Azure VPN网关的P2S配置,指定DNS服务器为Azure默认DNS(
168.63.129.16),确保VPN客户端连接后会使用Azure DNS服务,从而解析到私有DNS区域的记录。
3. 确保NSG允许VPN地址池访问443端口
- 在VM的NSG中添加一条入站规则:
- 优先级:设为比现有443允许规则更高(比如100)。
- 源:选择
IP地址,填写你的P2S VPN地址池(比如10.1.0.0/24)。 - 端口:443。
- 协议:TCP。
- 动作:允许。
- 这条规则确保走VPN链路的流量(源IP为VPN地址池)能通过NSG访问VM的443端口。
4. 验证Nginx配置
- 检查Nginx的
server块,确保server_name包含你的自定义域名,且SSL证书配置正确(与域名匹配):
server { listen 443 ssl; server_name customdomain.com; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; # 其他业务配置... }
这样通过域名访问时,SSL证书会正常匹配,保证访问安全。
测试验证
- 重新连接P2S VPN。
- 在本地终端执行
nslookup customdomain.com,确认返回结果为VM的私有IP。 - 访问
https://customdomain.com,此时流量走VPN私网链路,NSG放行VPN地址池IP,且SSL证书匹配,实现安全访问。
内容的提问来源于stack exchange,提问作者Darwin Wilmut J
相关产品推荐
相关产品推荐

