AWS EC2 Ubuntu 18.04实例次日无法访问公网问题如何解决
AWS EC2 Ubuntu 18.04 实例公网出站间歇性故障解决方案
故障原因
结合报错信息和故障特征(初始化正常、运行1天左右复现、重做实例可临时恢复),故障大概率来自以下几个层面:
- 实例系统IPv6优先级高于IPv4:如果你的VPC未开启IPv6支持,apt默认优先尝试IPv6地址连接软件源,长时间运行后IPv4 fallback逻辑失效,导致所有请求超时
- 系统DNS服务异常:Ubuntu 18.04 默认使用systemd-resolved提供DNS解析服务,长时间运行后可能出现缓存污染、服务挂死的情况,导致域名解析异常无法连接公网资源
- 系统路由表被篡改:实例内部运行的软件、定时任务或者未清理的恶意程序,可能定时删除公网默认路由,导致公网出口不通
- 云侧网络规则异常:安全组、子网网络ACL的出站规则被动态修改,限制了80、443、53端口的公网访问权限
永久解决步骤
1. 系统层面配置修复
禁用IPv6(VPC未开IPv6必做)
临时生效执行:
sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1
永久生效需编辑/etc/sysctl.conf,添加以下两行后执行sysctl -p加载配置:
net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1
执行apt update验证是否恢复,如果正常可跳过后续排查,直接走第二步云侧检查。
修复DNS服务异常
如果禁用IPv6未解决问题,先修改/etc/resolv.conf临时替换公共DNS验证:
nameserver 8.8.8.8 nameserver 1.1.1.1
执行apt update验证恢复后,重置系统DNS服务:
systemctl restart systemd-resolved systemctl enable systemd-resolved
修复路由表异常
执行ip route检查默认路由是否存在,正常默认路由指向VPC网段的第一个地址(如VPC为172.31.0.0/16,网关为172.31.0.1),如果缺失手动添加:
# 请替换为你实际的VPC网关地址 ip route add default via 172.31.0.1 dev eth0
路由恢复后检查所有定时任务(/etc/crontab、/var/spool/cron/crontabs/目录下所有文件),删除篡改路由的异常任务。
2. 云侧配置检查
- 登录AWS控制台检查实例绑定的安全组出站规则,确认允许80、443、53端口的出站访问,目标地址为0.0.0.0/0
- 检查实例所在子网的网络ACL配置,确认出站规则允许80、443、53端口访问,入站规则允许1024-65535端口的返回流量
- 为实例绑定弹性公网IP(EIP),替代默认的动态公网IP,避免公网IP关联异常导致的网络故障
3. 防止复发配置
可以添加定时任务,每天自动重启DNS服务避免挂死,编辑crontab添加以下规则:
0 0 * * * /usr/bin/systemctl restart systemd-resolved
内容的提问来源于stack exchange,提问作者Simpelax
相关产品推荐
相关产品推荐

