AWS NAT实例配置后私有子网实例无法访问互联网的排查求助
AWS NAT实例配置后私有子网实例无法访问互联网的排查求助
我最近在学习AWS云服务,给自己布置了一个架构搭建挑战,但遇到了棘手的问题——私有子网里的实例没法通过NAT实例访问互联网。之前在Stack Overflow发过这个问题,那边建议我转到这里来求助。
我想要搭建的架构如下:
- 一个包含公有子网和私有子网的VPC,公有子网通过互联网网关(IGW)接入互联网
- 公有子网内部署一台NAT EC2实例,作为私有子网实例访问互联网的中转网关
- 私有子网内放置一台测试实例,用来验证互联网连通性
我参考了AWS官方的NAT实例配置文档,但反复尝试后还是没能让私有实例成功联网。下面是我完整的操作步骤,应该和文档要求一致:
一、创建VPC及子网
- 通过AWS控制台创建默认VPC,在单个可用区下创建2个子网(1个公有、1个私有)
- 所有配置保持默认:NACL允许所有流量,公有路由表将
0.0.0.0/0指向IGW,两个路由表都配置了VPC CIDR指向local的本地路由
二、创建私有子网实例
- 除以下配置外,其余使用默认选项:选择私有子网,不分配公网IP,使用自定义安全组
troubleshooting-sg(这个安全组设置为允许所有流量,目的是排除安全组规则的影响)
三、创建并配置NAT实例
- 在公有子网启动实例,使用的AMI为:
Amazon Linux 2023 AMI 2023.1.20230705.0 x86_64 HVM kernel-6.1 - 开启自动分配公网IP,使用
troubleshooting-sg安全组 - 创建完成后,在实例的网络配置里关闭了源/目标检查(创建面板里没找到这个选项,所以是创建后修改的)
- SSH登录NAT实例,执行了以下配置命令:
sudo yum update -y sudo sysctl -w net.ipv4.ip_forward=1 sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo yum install -y iptables-services sudo systemctl enable iptables.service sudo systemctl start iptables.service
四、更新私有子网路由表
- 将私有路由表的
0.0.0.0/0路由条目指向这台NAT实例
五、测试情况
- SSH登录NAT实例,验证它本身可以正常访问互联网
- 通过NAT实例SSH登录私有实例(使用密钥)
- 但在私有实例内部完全无法访问互联网;另外,如果把私有路由表里指向NAT实例的
0.0.0.0/0路由删掉,情况也没有任何改善
我现在实在摸不着头绪,看起来问题可能出在NAT实例的配置上,但我明明严格按照文档步骤操作了。有没有朋友能给我一些进一步排查的思路?谢谢!
备注:内容来源于stack exchange,提问作者lobis
相关产品推荐
相关产品推荐

