公有子网中私有EC2实例无法执行apt-get update或访问公网如何排查
公有子网EC2无法访问公网排查方案
你已经核对了安全组出站规则、子网路由表的IGW路由,剩下的故障点按出现概率从高到低排查:
- 检查实例是否配置公网IP
要通过IGW访问公网,实例必须具备公网源IP:要么启动实例时开启了子网的「自动分配公网IPv4」选项,要么手动绑定了弹性公网IP(EIP)。如果实例详情页的「公有IPv4地址」字段为空,不管云上路由、安全组怎么配,都没法主动发起公网访问,回包无法路由到你的实例。绑定EIP后即可立刻验证。 - 核对子网关联的网络ACL规则
网络ACL是子网级的无状态防火墙,不会像安全组一样自动放行请求对应的回包。如果你修改过默认NACL规则,需要确认:- 出站规则放通你要访问的公网协议(ICMP、80、443端口等)到0.0.0.0/0
- 入站规则放通1024-65535的高端临时端口流量从0.0.0.0/0进入,否则公网返回的响应会被NACL直接丢弃
- 检查实例操作系统本地配置
登录实例后逐项核对:- 执行
ip route查看默认路由,确认默认路由指向VPC子网的网关(即VPC网段的第一个IP,例如VPC CIDR为10.0.1.0/24时网关为10.0.1.1),如果内部路由表被篡改会直接导致出网失败 - 执行
sudo ufw status查看本地防火墙状态,若ufw为启用状态,可临时执行sudo ufw disable关闭测试,确认是否是本地防火墙拦截了出流量 - 执行
env | grep -i proxy查看是否配置了全局系统代理,失效的代理配置会直接导致apt、curl等请求失败,存在代理变量的话执行unset命令清除后再测试
- 执行
- 排查域名解析问题
先直接ping公网IP测试连通性,例如执行ping 8.8.8.8:- 如果能ping通IP但无法ping通域名、apt-get update报域名解析失败,说明是DNS配置问题:检查
/etc/resolv.conf内的DNS地址是否可用,同时确认VPC已经开启了「DNS解析」「DNS主机名」选项,自定义DHCP选项集的话要确认填写的DNS服务器支持公网域名解析 - 如果ping 8.8.8.8也不通,回到前面的网络层配置项重新核对
- 如果能ping通IP但无法ping通域名、apt-get update报域名解析失败,说明是DNS配置问题:检查
快速排障技巧:可以先临时给实例绑定EIP、将子网NACL恢复为全放通默认规则、关闭系统本地防火墙,此时如果公网访问恢复,再逐项回滚配置定位具体的故障点。
内容的提问来源于stack exchange,提问作者mentalic
相关产品推荐
相关产品推荐

