GCP External TCP LoadBalancer仅允许前端IP访问VM的防火墙配置问题
问题结论
该需求完全可以实现,你之前配置不生效的核心原因是对GCP外部TCP负载均衡的转发逻辑存在认知偏差。
配置不生效的根本原因
GCP外部TCP负载均衡属于四层直通转发架构(基于Maglev实现),默认不会做源地址转换(SNAT):用户访问前端IP 5.6.7.8 的流量到达GCP边缘转发节点后,负载均衡不会把数据包源IP替换为LB自身的前端IP,而是保留真实客户端的源IP,直接将数据包路由到后端VM。
你配置仅放行源IP为5.6.7.8/32的入站规则时,真实用户的访问流量源IP根本不是LB前端地址,自然会被防火墙拦截,只有放开0.0.0.0/0时流量才能通行。
正确配置步骤
按照优先级从高到低配置以下VPC入站防火墙规则,全部针对TCP 80端口生效:
- 高优先级规则(优先级数值设为1000,数值越小优先级越高):允许来自GCP官方健康检查IP段的流量,源段填
209.85.204.0/22、209.85.152.0/22、35.191.0.0/16,这部分你已经配置完成,可以保留。 - 次高优先级规则(优先级数值设为1001):允许来自GCP负载均衡转发平面专属IP段的流量,源段填
130.211.0.0/22、35.191.0.0/16。所有经外部LB转发到后端的流量,无论真实客户端IP是什么,都会从这两个地址段路由到VM,直接访问VM公网IP的流量不会匹配该源范围。 - 兜底低优先级规则(优先级数值设为65534,为VPC防火墙可设置的最低优先级):拒绝所有源为
0.0.0.0/0的TCP 80端口入站流量。
配置完成后验证效果:
- 直接访问VM自身公网IP
1.2.3.4、1.2.3.5的80端口时,流量不匹配前两条允许规则,会被兜底规则拒绝,无法连接。 - 访问LB前端IP
5.6.7.8时,流量经LB转发平面送达VM,匹配次高优先级允许规则,可正常访问服务。 - 健康检查流量匹配最高优先级允许规则,后端状态始终保持健康。
可选优化方案
如果你的VM不需要直接对外提供任何公网服务(包括SSH登录也可以通过内部跳板机访问),可以直接解绑VM上的公网IP。GCP外部TCP负载均衡默认支持和无公网IP的后端实例通信,解绑后VM本身不存在公网直连入口,从物理层面杜绝了直接访问VM公网IP的可能,是安全性更高的部署方式。
这种部署方式下你依然可以正常获取访问者的真实源IP,不会因为VM无公网IP影响四层透传逻辑。
内容的提问来源于stack exchange,提问作者RIFKY MANUEL SATYANA
相关产品推荐
相关产品推荐

