如何让公有子网内仅含私有IP的EC2实例访问互联网?
嘿,这个场景我太熟了!你的EC2实例I1在公有子网S1里但没分配公网IP,没法直接访问互联网对吧?别担心,咱们可以通过两种靠谱的方案解决,我给你一步步说清楚:
方案一:使用NAT网关(AWS托管,首推)
这是AWS官方最推荐的方式,不用你自己维护服务器,高可用还省心:
- 创建NAT网关
- 打开AWS控制台的VPC服务,找到「NAT网关」选项,点击「创建NAT网关」。
- 选择你的公有子网S1作为部署子网,然后分配一个新的弹性公网IP(EIP)给它,跟着向导完成创建就行。
- 调整路由表规则
- 找到你的EC2实例I1所在子网(也就是S1)关联的路由表,点击「编辑路由」:
- 把原来指向互联网网关(IGW)的
0.0.0.0/0路由替换掉(或者直接修改下一跳)。 - 添加一条新路由:目标地址填
0.0.0.0/0,下一跳选择你刚创建的NAT网关。
- 把原来指向互联网网关(IGW)的
- 测试访问
- 登录到I1实例,试试
ping 8.8.8.8或者curl https://aws.amazon.com,正常情况下就能访问外部资源了。
方案二:使用NAT实例(自定义需求首选)
如果需要更多自定义控制(比如加防火墙规则、自定义转发逻辑),可以选这个方案:
- 启动NAT实例
- 在公有子网S1里启动一台EC2实例,选AWS官方的NAT实例AMI(在AMI市场搜「NAT」就能找到)。
- 给这个NAT实例分配一个弹性公网IP(EIP)。
- 开启IP转发功能:登录实例后,执行命令
echo 1 > /proc/sys/net/ipv4/ip_forward,然后修改/etc/sysctl.conf文件,把net.ipv4.ip_forward设为1,确保重启后依然生效。
- 配置安全组
- 给NAT实例的安全组加规则:允许来自I1所在子网私有IP段的所有入站流量(TCP、UDP、ICMP都可以放开),同时允许NAT实例向互联网发送出站流量。
- 调整路由表
- 同样找到I1所在子网的路由表,把
0.0.0.0/0的下一跳改成NAT实例的私有IP。
- 验证效果
- 登录I1实例测试外部访问,确认能正常连接就行。
额外注意事项
- 不管用哪种方案,都要确保I1的安全组允许出站流量到互联网(比如允许
0.0.0.0/0的TCP 80、443端口),不然就算路由对了也出不去。 - NAT网关是按使用量计费,NAT实例则是收EC2实例的费用,根据你的实际需求选就行。
内容的提问来源于stack exchange,提问作者Yasasvee
相关产品推荐
相关产品推荐

