本文由 亚马逊云站代理商『翼龙云TG-yilongcloud-亚马逊云服务器服务商•撰写』如需转载请注明!
在 Amazon Virtual Private Cloud (VPC) 架构中,出于安全考虑,后端服务器通常部署在不分配公网 IP 的私有子网中。这些实例若需进行系统补丁更新或调用外部 API,必须通过网络地址转换 (NAT) 实现。虽然 AWS 官方提供的托管 NAT Gateway 是标准方案,但其固定的每小时运行费和按流量计费的模式,对于测试环境、低带宽需求的个人项目而言,成本较高。
重要风险前置声明 :
EC2 自建 NAT 实例存在单点故障风险 ,EC2 宕机、重启、系统异常,会造成全部私有子网断网,AWS 不提供底层冗余保障;生产业务严禁使用自建 NAT 实例,生产请选用 NAT GatewayAWS。
NAT 转发性能受 EC2 实例规格带宽、CPU、并发端口限制,大流量场景会出现带宽打满、连接端口耗尽。
Amazon Linux2023 默认使用 nftables,传统 iptablesservices 持久化方案兼容性差,实例重启容易丢失 NAT 规则。
NAT 实例务必绑定弹性 IP (EIP),避免实例启停后公网 IP 变动,导致外部白名单失效。
本文介绍如何基于 Amazon EC2 自建 NAT 实例,作为私有子网出网的低成本替代方案,并提供 2026 年环境下的部署细节。
一、成本分析:官方 NAT Gateway 与自建实例的差异
官方 NAT Gateway 属于全托管服务,优势在于高可用和免维护,但计费项包括网关运行费和数据处理费。即使无流量产生,运行费也会持续计费。
成本对比参考
|--------------|--------------------------|-------------------------------------------|
| 计费维度 | 官方托管 NAT Gateway | 自建 NAT 实例 (如 t4g.nano) |
| 固定费用 | 较高(按小时计费) | EC2 实例小时费用 |
| 数据处理费 | 按 GB 收取 NAT 处理费 | 无 NAT 处理费;公网出网流量仍然收取 EC2 标准公网流量费用 |
| 维护工作 | 零维护 | 自行管理系统补丁、内核转发、NAT 规则持久化、故障处理 |
| 可用性 | AZ 内部冗余高可用 | 单点;实现高可用需要自行编写脚本做故障转移 |
二、方案适用场景
- 官方托管 NAT Gateway:适用于生产环境、核心业务及大流量吞吐场景,对网络可用性有极高要求;多可用区业务首选方案。
- 自建 NAT 实例 :仅适用于开发测试环境、个人项目、成本敏感且出网带宽低的非核心业务。不建议用于正式对外业务。
多可用区提示:VPC 跨多个 AZ 时,如果使用自建 NAT,需要每个可用区单独部署一台 NAT EC2,对应 AZ 私有子网路由指向本 AZ 的 NAT 网卡;全部子网共用单台 NAT 会造成 AZ 单点故障。
三、网络拓扑规划
在部署前,需确认以下 VPC 配置:
- 公有子网:配置指向 Internet Gateway (IGW) 的路由,用于部署 NAT 实例。
- 私有子网:无 IGW 路由,业务后端实例部署于此。
- 安全组配置
- NAT 实例安全组:入站允许私有子网完整 CIDR,全部协议;出站全部流量放开。
- 私有子网业务实例:安全组无需特殊改动,出站保持默认即可。
- 子网 NACL(网络访问控制列表) :公有子网、私有子网 NACL 需要放行高阶端口 102465535,否则转发回包会被子网 ACL 丢弃,出现网络不通AWS re:Pos...。
四、实战部署步骤
以下操作基于 2026 年 8 月的 AWS 控制台及 Amazon Linux 2023 镜像。
步骤 1:启动 NAT 实例
在公有子网启动一台 EC2(推荐 t4g.nano,测试低流量;t3.nano 存在 CPU 积分限制,大流量会被限流),分配弹性公网 EIP。
步骤 2:禁用 "源 / 目标检查"(必做)
在 EC2 控制台选中该实例,选择「操作」>「联网」>「更改源 / 目标检查」,停止源 / 目标检查并保存。若不禁用此项,实例无法转发不属于自身 IP 的流量。
步骤 3:系统内开启内核 IP 转发
SSH 登录 NAT 实例,开启内核 IPv4 转发:
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99custom.conf
sudo sysctl -p /etc/sysctl.d/99custom.conf
步骤 4:配置 NAT 伪装转发(二选一,优先 nftables)
Amazon Linux2023 默认使用 nftables;iptablesservices 兼容性差,不推荐作为首选持久化方案。
方案 A:原生 nftables(AL2023 推荐,重启规则持久生效)
先查看网卡名称,ip addr确认对外网卡,常见:x86 为eth0,ARM Graviton 为ens5。
安装nftables
sudo dnf install nftables -y
sudo systemctl enable --now nftables
创建nat配置文件,替换oif后面的网卡名为你实际网卡
sudo tee /etc/nftables.conf <<EOF
#!/usr/sbin/nft -f
flush ruleset
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "eth0" masquerade
}
}
EOF
sudo nft -f /etc/nftables.conf
方案 B:iptables 兼容层(不推荐用于 AL2023,仅做了解)
警告:AL2023 下 iptablesservices 容易出现重启规则丢失问题,仅适合临时测试,不建议长期使用。
ip addr #确认对外网卡
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
该方式重启后规则丢失,持久化存在兼容性风险
步骤 5:修改私有子网路由表
VPC 控制台编辑私有子网关联路由表:
- 添加路由:目标 0.0.0.0/0
- 目标类型选择:网络接口(Network Interface),选择 NAT 实例对应的 ENI 网卡。
不能填写 EC2 公网 IP,必须选择实例弹性网卡 ENI。
五、验证与排错
登录私有子网内部的业务实例执行测试:
curl -I https://aws.amazon.com
nslookup amazon.com
访问不通逐项排查:
- NAT 实例已经关闭「源 / 目标检查」;
- 私有子网路由表 0.0.0.0/0 正确指向 NAT 实例 ENI 网卡;
- NAT 实例安全组入站允许私有子网 CIDR 全部协议;
- 子网 NACL 放行高阶回传端口 102465535;
- 检查内核参数sysctl net.ipv4.ip_forward输出等于 1;
- 实例重启后,确认 nftables nat 规则仍然存在(sudo nft list ruleset);
- 监控 NAT 实例 CPU、网络带宽,避免资源打满导致丢包卡顿。
六、总结与建议
自建 NAT 实例可以在测试环境实现云上降本,但需要承担系统维护、故障排查、HA 架构自行实现的成本。
重要:只要业务走向生产环境,优先迁移至 NAT Gateway 托管服务,规避单点故障风险。

常见问题 (FAQ):
Q1:AWS VPC 是什么,适合哪些场景,选型时要确认什么?
AWS VPC 是逻辑隔离的虚拟网络,允许用户自定义网段、子网和路由。它适合所有需要在云上构建隔离环境的业务场景。选型前需明确业务规模和可用性要求,核对目标地域的配额、计费项(如公网 IP 费用、跨区流量费)及开通条件。
Q2:AWS NAT Gateway 是什么,适合哪些场景,选型时要确认什么?
它是为私有子网提供出网能力的托管服务,适合对稳定性要求高的生产环境。采购前应核对地域支持情况、处理数据量的计费标准以及是否满足业务的峰值带宽需求。
Q3:AWS 官方 NAT 网关和自建 NAT 实例有什么区别?
主要区别在于管理责任、可用性与成本结构。官方网关是全托管、AZ 内部高可用,但包含固定运行费和数据处理费;自建实例节省 NAT 处理费,但需要用户自行维护系统补丁、NAT 规则持久化,存在单点故障风险,带宽受 EC2 实例规格限制,仅适合测试环境。
Q4:如何在 EC2 上自建 NAT 实例实现私有子网出网?
需在公有子网部署 EC2,绑定 EIP,关闭实例源 / 目标检查;开启内核 IPv4 转发,配置 nftables/iptables 的 MASQUERADE 伪装规则并配置开机持久化;私有子网路由表默认路由指向该实例弹性网卡;同时配置好安全组和子网 NACL。
Q5:NAT 实例重启之后,私有子网实例无法访问外网是什么原因?
大概率是 NAT 转发规则没有持久化;AL2023 优先使用 nftables 方案;确认 nftables 服务开机自启,/etc/nftables.conf配置完整;同时确认内核 ip_forward 开机自动开启。