← 技术博客

S4 NAT vs fck-nat:替换 NAT Gateway 的坦诚对比

如果你找到了这个页面,你已经知道问题所在:托管 NAT Gateway 每个 AZ 大约收取 $32/月,并对处理的每 GB 数据收取 $0.045;对 egress-heavy workload 来说,数据处理这一项很快就会超过其他所有费用。NAT instance 可以解决这个问题,而 fck-nat 是让 NAT instance 重新变得体面的开源项目。

先从 vendor 页面很少明说的部分开始。

什么时候你应该直接使用 fck-nat

fck-nat 免费、积极维护(2.2k+ GitHub stars)、在 Amazon Linux 2023 上提供现成的 arm64/x86 AMI,并且有可靠的 CDK 和 Terraform module。它运行在 t4g.nano 上大约 $3/月,并能推动多个 Gbit/s 的 burst NAT traffic。

在这些情况下使用 fck-nat:

  • 环境是 dev、staging 或个人项目。 如果几分钟的 egress downtime 只是麻烦而不是事故,免费选项就胜出。
  • 成本是唯一标准。 S4 NAT 会在 instance 费用之上收取按小时的软件费用。它在价格上永远不会打败免费,我们也不会假装不是这样。
  • 你能接受 community support。 fck-nat 的 maintainer 和社区响应积极,对标准部署来说这通常已经足够。

S4 NAT 凭什么收取费用

S4 NAT 是通过 AWS Marketplace 销售的商业 NAT instance——理念与 fck-nat 相同(标准 EC2、kernel nftables、无 per-GB fee),但执行方式和保证不同。真正重要的差异是:

可以量化的 failover。 fck-nat 的 high-availability 方案是由 Auto Scaling Group 替换故障 instance——恢复时间通常以分钟计。S4 NAT 运行 active/standby pair 并带有 heartbeat;standby 会通过 ec2:ReplaceRoute 重写你的 route table,通常在 under 10 seconds 内完成——这一点已在跨版本 170+ 次连续真实 EC2 failover drill 中验证,方法和数字发布在 repo 的 validation report 中。

failover 期间稳定的 egress IP。 使用 per-instance addressing(fck-nat 的模型,也是 S4 NAT 的默认模式)时,NAT failover 后你的 egress public IP 会变化——如果合作伙伴将其加入 allowlist,这就是问题。S4 NAT 的可选 StableEgressIp 模式会把一个 shared Elastic IP 保持在当前拥有 route 的节点上。在我们发布的 drill run 中,一个每秒采样 egress IP 的 client 始终看到 shared IP,最差观测到的 fallback window 为 2 seconds——而且 fallback 会落到 instance 自己的 EIP,而不是丢弃 traffic。

内置 NAT64。 IPv6-only subnet 可以访问 IPv4 internet(RFC 6146,集成 translator)。fck-nat 不提供 NAT64。

当 pps 重要时的 XDP fast path。 随 AMI 提供,默认关闭,通过一行 config 启用。在 network-optimized instance 上测得约为标准 kernel path 的 2× the packets-per-second per CPU core

采购与责任归属。 Marketplace billing 会进入你现有的 AWS invoice(不需要新的 vendor onboarding),另一端有公司、support contact 和已发布的 validation report。相关、略微尴尬但真实的一点是:几个团队告诉我们,他们无法让名称里带有 “fck” 的工具通过 security review 或 procurement document。如果你的组织是这种情况,功能列表就不重要了。

并排对比

fck-natS4 NAT
价格免费(仅 instance cost)按小时软件费用 + instance
数据处理费
FailoverASG replacement(分钟)Active/standby,<10s(170+ drills)
failover 期间稳定 egress IP可选 StableEgressIp 模式
NAT64有(RFC 6146)
XDP fast path可选,实测 ~2x pps/core
SupportCommunityCommercial([email protected]
ProcurementSelf-managed OSSAWS Marketplace,AWS invoice

五分钟决策

  1. Dev/staging,或 downtime tolerance 以分钟计 → fck-nat。它很好。用它。
  2. 生产 egress,合作伙伴会 allowlist 你的 IP,failover 必须是秒级而不是分钟级,或者你需要服务 IPv6-only subnet → S4 NAT
  3. 不确定 → 从 fck-nat 开始,等第一次出现 “the NAT was down for four minutes” 复盘,或 allowlist rotation ticket 落地时再重新评估。

两者都能让 egress-heavy workload 的成本比托管 NAT Gateway 低一个数量级。坦诚的区别在于你在 packet path 之外购买了什么:可测量的 failover 行为、恒定的 egress IP,以及凌晨 3 点出问题时有人负责。

S4 NAT 已在 AWS Marketplace 上架。Validation methodology、drill harness 和完整 report 随 product repository 提供。