4. 虚拟机网络工程

在 Azure 中,虚拟机能否被正确访问、能否访问外部、能否与本地或其他虚拟网络互通,几乎全部取决于网络工程是否设计得当。本章围绕虚拟网络(VNet)、子网、网络安全组(NSG)、应用安全组(ASG)、用户定义路由(UDR)、NAT 网关与公共 IP 这几类核心对象,说明它们各自解决什么问题,以及在实际工程中如何组合使用。

一、虚拟网络与子网:先定地址空间,再谈连通

VNet 是 Azure 中的逻辑隔离边界,子网是 VNet 内部的地址分段。规划时最关键的是地址空间不能与本地网络、其他 VNet 或对等网络重叠。例如规划一个业务 VNet 使用 10.20.0.0/16,可划分为:

  • Web 子网 10.20.1.0/24,用于前端虚拟机与负载均衡后端;
  • App 子网 10.20.2.0/24,用于应用服务器;
  • Data 子网 10.20.3.0/24,用于数据库;
  • GatewaySubnet 10.20.255.0/27,保留给 VPN/ExpressRoute 网关;
  • AzureBastionSubnet 10.20.254.0/26,用于 Bastion 跳板。

注意 Azure 会在每个子网中保留 5 个地址(网络地址、网关、DNS 映射、广播、保留),因此 /24 实际可用 251 个。子网一旦有资源部署,修改地址范围通常需要重新部署,因此规划阶段应预留增长空间。

二、网络安全组:子网级与网卡级的分布式防火墙

NSG 由一组有优先级的安全规则组成,可关联到子网或网卡。规则按优先级从小到大匹配,一旦命中即停止。每条规则包含源、源端口、目标、目标端口、协议、方向(入站/出站)、动作(允许/拒绝)。默认规则允许 VNet 内部通信、允许出站到 Internet、拒绝其他入站。

例如为 Web 子网配置入站规则:

优先级 100  允许  Internet  ->  *  : 80,443   TCP
优先级 200  允许  AzureLoadBalancer -> * : *  Any
优先级 4000 拒绝  * -> * : *  Any

这里 4000 的显式拒绝用于覆盖默认允许规则,形成“白名单”模型。需要特别注意的是:NSG 是有状态的,允许入站请求后,其返回流量自动放行,无需再配出站规则。

三、应用安全组:用角色代替 IP 管理规则

当虚拟机数量增多时,按 IP 维护 NSG 规则会非常脆弱。ASG 允许把网卡按角色分组,例如 asg-web、asg-app、asg-db,然后在 NSG 规则中直接引用 ASG 作为源或目标。这样新增一台 Web 虚拟机时,只需把它的网卡加入 asg-web,无需修改任何规则。ASG 必须与 NSG 在同一区域,且只能作为规则中的源或目标,不能单独存在。

四、用户定义路由:控制流量走向

Azure 默认为子网提供系统路由,使 VNet 内部互通、Internet 可访问。当需要把流量强制送到防火墙或 NVA(网络虚拟设备)时,就要使用 UDR。典型做法是在 App 子网创建路由表,添加 0.0.0.0/0 下一跳为虚拟设备 10.20.1.10,并关联到 App 子网。这样 App 子网访问 Internet 的流量会先经过防火墙,实现集中检查与日志记录。UDR 的下一跳类型包括虚拟网络网关、虚拟网络、Internet、虚拟设备、无,选择错误会导致流量黑洞。

五、NAT 网关与公共 IP:出站与入站的两种入口

NAT 网关用于为子网提供可预测的出站 SNAT,多个虚拟机共享同一公共 IP,适合需要固定出口 IP 的场景,例如对接第三方白名单。它关联到子网后,该子网内虚拟机的出站流量默认走 NAT 网关。公共 IP 则分为基本 SKU 与标准 SKU,标准 SKU 默认关闭入站,必须通过 NSG 显式放行,且支持可用性区域。入站访问通常通过公共 IP 关联到负载均衡或直接绑定到虚拟机网卡;出站则优先使用 NAT 网关,避免默认出站 IP 变化带来的问题。

Azure 虚拟机网络工程核心对象与流量路径 Internet 公共 IP / NAT 出口 VNet 10.20.0.0/16 Web 子网 10.20.1.0/24 VM-web-01 VM-web-02 ASG: asg-web App 子网 10.20.2.0/24 VM-app-01 VM-app-02 ASG: asg-app Data 子网 10.20.3.0/24 VM-db-01 ASG: asg-db 网络安全组 NSG(子网级 / 网卡级) 优先级 100 允许 80/443 → 200 允许 LB → 4000 显式拒绝 UDR 路由表 0.0.0.0/0 → 虚拟设备 NAT 网关 固定出站 SNAT 公共 IP 公共 IP 标准 SKU 入站 入站 80/443 ASG 引用 1433 出站流量 NAT 出站路径 入站绑定 子网 NSG UDR NAT 网关 公共 IP 东西向流量 南北向出站

六、组合使用时的判断顺序

当一台虚拟机访问异常时,建议按以下顺序排查:先确认子网地址与路由表是否把流量导向了正确下一跳;再检查 NSG 规则优先级是否被更高优先级的拒绝规则拦截;然后确认 ASG 成员关系是否正确;最后检查 NAT 网关或公共 IP 是否绑定到了目标子网或网卡。实际工程中,常见错误包括:UDR 把 0.0.0.0/0 指向不存在的虚拟设备导致断网;NSG 规则优先级写反导致拒绝规则先命中;ASG 未加入网卡导致规则不生效;NAT 网关未关联子网导致出站 IP 仍为默认动态 IP。

建议为每个子网单独关联 NSG,并在规则命名中体现用途与优先级,例如 Allow-Web-In-80-100,便于审计与排障。
标准 SKU 公共 IP 默认拒绝所有入站,必须配合 NSG 显式放行;如果只绑定了公共 IP 而未配置 NSG,虚拟机将无法被访问。

综合来看,VNet 与子网决定地址边界,NSG 与 ASG 决定谁能访问谁,UDR 决定流量走哪条路,NAT 网关与公共 IP 决定进出 Internet 的方式。把这五类对象按“地址—规则—路径—出口”的顺序设计,才能构建出既安全又可控的虚拟机网络。