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 变化带来的问题。
六、组合使用时的判断顺序
当一台虚拟机访问异常时,建议按以下顺序排查:先确认子网地址与路由表是否把流量导向了正确下一跳;再检查 NSG 规则优先级是否被更高优先级的拒绝规则拦截;然后确认 ASG 成员关系是否正确;最后检查 NAT 网关或公共 IP 是否绑定到了目标子网或网卡。实际工程中,常见错误包括:UDR 把 0.0.0.0/0 指向不存在的虚拟设备导致断网;NSG 规则优先级写反导致拒绝规则先命中;ASG 未加入网卡导致规则不生效;NAT 网关未关联子网导致出站 IP 仍为默认动态 IP。
Allow-Web-In-80-100,便于审计与排障。综合来看,VNet 与子网决定地址边界,NSG 与 ASG 决定谁能访问谁,UDR 决定流量走哪条路,NAT 网关与公共 IP 决定进出 Internet 的方式。把这五类对象按“地址—规则—路径—出口”的顺序设计,才能构建出既安全又可控的虚拟机网络。