私有子网内EC2实例无法连接互联网的问题排查求助
排查私有子网EC2通过NAT Gateway无法访问互联网的问题
咱一步步来排查你可能漏掉的配置细节,AWS网络配置经常有看起来做了但其实没到位的地方:
1. 先确认NAT Gateway本身能正常联网
- 检查NAT Gateway的状态:在AWS控制台的NAT Gateway页面,确保它的状态是
available,而且已经分配了公有IP(创建时需勾选“分配弹性IP”才会有) - 验证NAT所在公有子网的路由表:这个公有子网的路由表必须有
0.0.0.0/0 -> Internet Gateway的规则——毕竟NAT自己得先能连上互联网,才能给私有子网做转发
2. 私有子网路由表的绑定与规则验证
- 确认私有子网的路由表中,
0.0.0.0/0的目标确实指向你的Public Nat Gateway(别选错成其他NAT或者IGW) - 重点检查:路由表和私有子网是不是正确关联了!很多时候加了路由但忘了绑定子网,等于白配置(可以在VPC控制台的路由表页面,查看“关联的子网”列表里有没有你的私有子网)
- 登录私有子网的EC2实例,用命令查看本地路由:
确认默认路由(Destination为route -n # Linux系统 # Windows系统用 Get-NetRoute0.0.0.0/0)的网关是NAT Gateway的私有IP
3. 安全组的出站规则不能忽略
- 私有子网EC2的安全组:必须允许出站流量到
0.0.0.0/0——至少要开放ICMP(用于ping)、TCP 80/443(用于网页访问)、UDP 53(用于DNS解析),直接全开0.0.0.0/0最省事,后续再按需收紧 - 如果给NAT Gateway配置了安全组(默认NAT可不关联,但如果加了),要允许来自私有子网CIDR的所有入站流量(因为NAT的响应需要返回给私有子网实例)
4. 网络ACL(NACL)的双向规则要配全
NACL是无状态的,入站和出站都得对应配置,不像安全组是有状态的:
- 私有子网的NACL:
- 入站规则:允许来自NAT Gateway所在CIDR的响应流量(比如ICMP echo-reply、TCP/UDP的established/related状态)
- 出站规则:允许所有流量到
0.0.0.0/0
- 公有子网的NACL:
- 入站规则:允许来自私有子网CIDR的请求流量
- 出站规则:允许所有流量到
0.0.0.0/0(供NAT Gateway使用)
5. EC2实例本身的网络配置检查
- 确认私有子网EC2没有手动设置静态路由:比如Linux下
/etc/sysconfig/network-scripts/里的配置,或者Windows的静态路由,这些会覆盖VPC路由表的规则 - 检查DNS配置:在EC2控制台查看实例的“DNS服务器”是否为VPC默认值(通常是VPC主网段+2,比如VPC是
10.0.0.0/16的话就是10.0.0.2)。如果手动修改过DNS,可能导致无法解析域名。可以先尝试ping公网IP(比如ping 8.8.8.8),如果能通但ping域名不通,那就是DNS的问题
6. 排查账号级别的限制
- 确认你的AWS账号没有组织级的SCP(服务控制策略)禁止公网访问,或者VPC没有其他网络策略限制流量
先从这些点查起,大概率能找到问题所在!
内容的提问来源于stack exchange,提问作者Brijesh
相关产品推荐
相关产品推荐

