You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:无法通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:43:13