Azure中关联多公网负载均衡器的VM出站IP不一致问题
Azure负载均衡出站IP异常问题排查解答
问题场景
我在Azure中创建了包含VMSS的虚拟机,并将它们加入两个公网负载均衡器(LB)的后端地址池。LB1配置了两条TCP负载均衡规则(端口443和22),LB2配置了SNAT出站规则。但在3台VM中执行curl ifconfig.me检测时,发现2台使用LB1的公网前端IP,1台使用LB2的公网前端IP。LB1未配置出站规则,为何部分VM会使用其IP?已检查LB门户配置未发现异常。
原因分析与排查
LB1的隐式SNAT规则
当VM加入公网LB的后端池且LB存在入站负载均衡规则时,Azure默认会自动启用隐式SNAT规则(无需手动配置出站规则)。只要LB1的入站规则处于启用状态,后端VM的出站流量就可能触发这条隐式规则,使用LB1的前端IP作为源地址。多LB关联的流量匹配逻辑
你的VMSS实例同时属于两个LB的后端池,出站SNAT的IP选择会遵循以下逻辑:- 优先匹配明确配置的SNAT规则,但如果LB2的SNAT规则未覆盖所有协议/端口(比如仅针对特定端口,而
curl ifconfig.me使用的80/443端口刚好被LB1的入站规则覆盖),未匹配的流量会 fallback 到LB1的隐式SNAT。 - VMSS实例在关联多个LB时,存在实例层面的规则匹配随机性,部分实例可能优先触发LB1的隐式规则。
- 优先匹配明确配置的SNAT规则,但如果LB2的SNAT规则未覆盖所有协议/端口(比如仅针对特定端口,而
验证步骤
- 检查LB1的入站负载均衡规则:查看每个规则的“出站SNAT”选项是否为默认的“启用”状态,这是隐式SNAT生效的关键。
- 核对LB2的SNAT规则:确认规则是否覆盖所有协议(选“全部”)和端口范围(0-65535),避免流量漏匹配。
- 查看VMSS实例的网络接口:确认每个实例同时关联两个LB,且无NSG策略限制出站流量路由。
解决方案
- 禁用LB1的隐式SNAT:编辑LB1的所有入站负载均衡规则,将“出站SNAT”设置为“禁用”,切断LB1对出站流量的IP分配能力。
- 完善LB2的SNAT规则:确保规则覆盖所有出站协议和端口,让所有流量都优先匹配LB2的SNAT规则,统一使用LB2的前端IP。
内容的提问来源于stack exchange,提问作者q85ts
相关产品推荐
相关产品推荐

