求助:无法通过Azure防火墙公网IP在浏览器访问Ubuntu虚拟机
问题背景与排查方案
已部署环境配置
1. 虚拟网络
| 选项 | 值 |
|---|---|
| 区域 | 印度中部 |
| Azure Bastion | 启用 |
| Azure Firewall | 启用 |
| 层级 | Basic |
配套创建了基础防火墙策略及防火墙公网IP。
2. Ubuntu 20.04 LTS虚拟机(同区域同VNet,无公网IP)
| 选项 | 值 |
|---|---|
| 可用性选项 | 可用性区域 |
| 可用性区域 | 区域1 |
| 规格 | Standard_B2s(2 vCPU,4GB内存) |
| 认证方式 | SSH公钥 |
| 公网IP | 无 |
3. Azure防火墙DNAT规则
- 规则集配置:
| 选项 | 值 |
|---|---|
| 名称 | firewall-nginx-rulecln |
| 规则集类型 | DNAT |
| 优先级 | 100 |
| 规则集组 | DefaultDnatRuleCollectionGroup |
- 规则详情(添加至上述规则集):
| 选项 | 值 |
|---|---|
| 规则名称 | firewall-rule |
| 源类型 | IP地址 |
| 源IP | 本地主机公网IP |
| 目标IP | 防火墙公网IP |
| 协议 | TCP |
| 目标端口 | 4000 |
| 转换类型 | IP地址 |
| 转换目标 | VM私有IP |
| 转换端口 | 80 |
4. Nginx状态
通过Bastion连接VM后完成Nginx安装配置,VM内执行curl localhost:80正常返回内容:
azureuser@linuxvm02:~$ curl localhost:80 <h1>I have learnt Azure Networking Concept, today</h1>
问题现象
本地浏览器访问防火墙公网IP:4000(示例:4.247.159.154:4000)无法加载页面。
排查与修复步骤
1. 校验DNAT规则准确性
- 重新确认本地公网IP:动态IP可能已变更,确保规则中配置的源IP与当前本地出口IP完全一致。
- 修正规则字段:规则中“转换目标”需填写VM私有IP,避免误填为FQDN导致解析失败。
- 检查规则优先级:确认100的优先级未被数值更小(优先级更高)的其他DNAT规则覆盖。
2. 检查VM网络安全组(NSG)
- 添加入站规则:允许Azure防火墙子网(AzureFirewallSubnet)IP段访问VM的TCP 80端口。因为防火墙转发流量时会使用自身私有IP作为源,而非本地公网IP,所以不能只放行本地IP。
- 确认NSG无高优先级拒绝规则拦截该流量。
3. 验证防火墙网络规则
- 添加网络规则:允许从本地公网IP到VM私有IP的TCP 80端口流量。DNAT仅负责地址转换,需配套网络规则允许流量通过防火墙。
- 确保网络规则优先级高于默认拒绝规则。
4. 核查路由配置
- 确认VNet路由表包含指向Azure防火墙的默认路由(
0.0.0.0/0),或针对VM子网的路由指向防火墙,保证流量能正确转发至VM。 - 查看VM的有效路由,确认返回路径能通过防火墙回到本地。
5. 连通性测试与日志排查
- 本地执行
telnet <防火墙公网IP> 4000或nc -zv <防火墙公网IP> 4000,判断端口是否可达。 - 在Log Analytics中查询Azure防火墙日志,检查DNAT规则是否匹配、流量是否被允许/拒绝,定位具体阻塞环节。
内容的提问来源于stack exchange,提问作者Vaishnavi Vaishu
相关产品推荐
相关产品推荐

