GCP实例SSH访问异常:指定公网IP无法连接,0.0.0.0/0可正常访问
排查GCP VM SSH自定义防火墙规则失效问题
1. 确认防火墙规则的优先级与覆盖关系
- 检查是否存在优先级更高的拒绝类防火墙规则(比如
deny-all-ingress),这类规则会优先匹配并覆盖你的允许规则。GCP防火墙规则按优先级数字从小到大执行,数字越小优先级越高。 - 确保你的SSH允许规则优先级高于任何可能拦截SSH流量的规则。
2. 验证防火墙规则的配置细节
- 确认规则的目标标签:如果VM实例没有添加对应的标签,规则不会生效。比如你的规则标签设为
allow-ssh,要检查VM的标签列表里是否包含这个值。 - 检查规则的协议与端口:必须明确指定
tcp:22,不能只选“所有协议”或漏填端口。 - 确认源IP的格式:必须是
[你的公网IP]/32(比如192.168.1.100/32),GCP要求源地址为CIDR格式,单独IP必须加/32后缀。
3. 排查NAT/代理导致的真实源IP变化
- 即使你查到的是自己的公网IP,若通过公司网络、家庭路由器NAT或VPN访问,实际到达GCP的源IP可能是另一个(比如公司出口IP、VPN服务器IP)。
- 可以临时开启允许
0.0.0.0/0的SSH规则,登录VM后查看真实连接源IP:- Debian/Ubuntu系统执行:
grep sshd /var/log/auth.log - RHEL/CentOS系统执行:
grep sshd /var/log/secure - 从日志里找到最近的SSH登录记录,里面的源IP才是需要添加到防火墙规则的地址。
- Debian/Ubuntu系统执行:
4. 检查VPC网络的附属配置
- 确认VM所在子网没有启用特殊路由配置(比如私有Google访问),避免流量路径异常。
- 检查是否存在子网级网络ACL,这类ACL独立于VPC防火墙,也会拦截流量,需要确保它允许你的IP访问22端口。
5. 验证规则的应用范围
- 确认防火墙规则的网络范围是VM所在的VPC,而非其他VPC。
- 如果VM属于共享VPC,要检查规则是在宿主项目还是服务项目中配置的,共享VPC的规则需要在对应层级正确设置。
内容的提问来源于stack exchange,提问作者Its Andrew
相关产品推荐
相关产品推荐

