如何在不中断业务的情况下为AWS EC2实例移除公网IPv4?
如何在不中断业务的情况下为AWS EC2实例移除公网IPv4?
我完全理解你的困扰——自从2024年2月1日AWS开始对公网IPv4收费后,很多人都在想办法优化成本,同时不想折腾业务中断的问题。你遇到的核心矛盾是:移除实例的公网IPv4后,它没法访问IPv4互联网了,但又不想修改VPC/子网配置或者重建实例。其实不用终止实例,咱们一步步来解决这个问题:
前置确认
首先要明确:你的实例需要访问IPv4互联网的话,必须通过NAT网关来转发IPv4流量(因为实例本身没有公网IPv4了)。但这个操作不需要改动实例所在的VPC或子网,也不用重启/重建实例,放心往下走。
步骤一:创建NAT网关(如果还没有的话)
NAT网关是用来让私有子网里的实例访问IPv4互联网的核心组件,它只需要一个弹性IP(成本远低于给每个实例分配公网IPv4):
- 打开AWS控制台的VPC服务,找到“NAT网关”选项,点击“创建NAT网关”
- 给NAT网关起个名字(比如
Cost-Optimized-NAT),选择一个有公网IPv4的子网(也就是你的“公共子网”,原来能直接访问互联网的那种) - 点击“分配弹性IP”,AWS会自动给NAT网关分配一个弹性IP(这个IP是给NAT网关用的,不是给你的实例)
- 确认配置后点击“创建NAT网关”,等待状态变成“可用”(大概1-2分钟)
步骤二:调整实例所在子网的路由表
这一步是让实例的IPv4流量通过NAT网关出去,不用自己带公网IPv4:
- 找到你的EC2实例,在“详情”标签里查看它所在的“子网”
- 进入VPC控制台的“路由表”页面,找到和这个子网关联的路由表(可以通过路由表的“关联”标签确认)
- 编辑这个路由表的路由规则:
- 删除原来指向
互联网网关的0.0.0.0/0路由(如果有的话) - 添加一条新路由:目标填
0.0.0.0/0,下一跳选择你刚才创建的NAT网关 - 保存路由规则
- 删除原来指向
步骤三:移除实例的公网IPv4(无需重启实例)
现在可以安全地去掉实例的公网IPv4了:
- 回到EC2控制台,选中目标实例,点击“操作”→“网络和安全”→“管理IP地址”
- 在“IPv4地址”区域,找到公网IPv4对应的条目,点击“释放”(如果是自动分配的,也可以取消“自动分配公网IPv4”的设置,但释放更直接)
- 确认操作后,实例的公网IPv4就会被移除,同时保留私有IPv4和IPv6地址
步骤四:验证连通性
最后确认一切正常:
- 登录实例,测试IPv4访问:比如
ping 8.8.8.8或者curl https://ipv4.icanhazip.com,应该能正常返回结果 - 测试IPv6访问:比如
ping6 2606:4700:4700::1111或者curl https://ipv6.icanhazip.com,确保依然正常 - 验证私有IPv4通信:比如和同VPC内的其他实例互通,没问题就大功告成了
额外注意事项
- NAT网关成本:NAT网关按小时收费,加上弹性IP的少量费用,但对比多个实例的公网IPv4费用,长期来看还是划算的
- 外部IPv4访问需求:如果你的实例需要被外部IPv4访问,那不能移除公网IPv4,或者得搭配负载均衡、CloudFront等服务来做反向代理
- 安全组/网络ACL:确保实例所在子网的安全组允许出站IPv4流量,网络ACL也允许入站/出站的IPv4相关规则(默认配置一般没问题,但如果之前改过要检查)
备注:内容来源于stack exchange,提问作者TNT
相关产品推荐
相关产品推荐

