All posts
Cost Optimization

NAT Gateway Costs and fck-nat: Cutting the Bill, and When to Keep the Managed Gateway

By

November 2, 2026

7 min read

A NAT gateway costs $36.50 a month per AZ before it moves a byte, then $0.045 for every gigabyte, including traffic to S3 and ECR that has a free path. fck-nat is an open-source NAT instance that runs on a t4g.nano for about $3 a month with no per-gigabyte charge. What it costs, what you give up, and how to run it safely.

fck-nat
NAT Gateway
Cost Optimization
Networking
Startups

Most teams meet the NAT gateway on their bill, not in their design. Private subnets need a way out to the internet, the VPC wizard adds a NAT gateway per Availability Zone, and nobody looks again until EC2-Other is one of the largest lines on the invoice.

Why it surprises people

  • It charges by the hour whether you use it or not: $0.045 an hour, plus $0.005 an hour for its public IPv4 address. That is $36.50 a month per gateway, and the default layout has one per AZ.

  • It charges again for every gigabyte it processes: $0.045/GB, on top of whatever the data transfer itself costs.

  • It processes traffic that never needed it. Container image pulls from ECR, reads from S3, logs to CloudWatch and calls to STS all go through NAT unless you add endpoints.

  • It hides in EC2-Other. In Cost Explorer, group by usage type and look for NatGateway-Hours and NatGateway-Bytes.

What a small startup pays

Setup (3 AZs, US East)

Fixed per month

At 1 TB through NAT

At 10 TB through NAT

NAT gateway in each AZ

$109.50

$154.50

$559.50

fck-nat on t4g.nano in each AZ

About $20 (3 × $3.06 instance + 3 × $3.65 IPv4)

About $20

About $20, if the bandwidth fits (see below)

Internet data transfer out is charged the same either way, so it is left out of both rows. The saving is the gateway hours and the $0.045 per gigabyte.

What fck-nat is

fck-nat is an MIT-licensed project that publishes ready-made NAT instance AMIs on Amazon Linux 2023, for ARM and x86. It replaces the do-it-yourself NAT instance that AWS documented years ago and whose AMI hasn't been updated since 2018. It is a regular EC2 instance with source/destination checking turned off, and your private route tables point at it instead of a NAT gateway.

Its high-availability mode runs each instance in an Auto Scaling group of one, with a fixed network interface that the replacement instance attaches when it boots. The route tables point at the interface, so they never change. The project is honest that this is "not completely immune to outages": while a replacement boots, that AZ has no outbound internet.

Want a second opinion on this for your system?

Book a free 30-minute call. You'll leave knowing what we'd do first and roughly what it costs, whether or not you hire us.

The catch: bandwidth

The fck-nat docs make the point clearly: a t4g.nano bursts to 5 Gbps but sustains only 32 Mbps. Fine for API calls, webhooks and occasional downloads; not for a service that streams data out all day. Their sizing table:

Sustained bandwidth

Instance

Price per month (fck-nat docs)

32 Mbps

t4g.nano

$3.06

64 Mbps

t3.micro

$7.59

1.6 Gbps

c6gn.medium

$32.81

3.125 Gbps

c7gn.medium

$48.25

5 Gbps

c7gn.large

$132.20

Even the 1.6 Gbps option costs less per month than one NAT gateway sitting idle, and none of them charge per gigabyte.

Do this first, whatever you choose

  1. Add the S3 and DynamoDB gateway endpoints. They are free, and they take that traffic off NAT entirely.

  2. Add interface endpoints only where the volume pays for them: each costs about $7.30 a month per AZ and $0.01/GB, so it pays off at roughly 209 GB a month per AZ. Our NAT cost calculator does this sum.

  3. Find who is using NAT with VPC Flow Logs queried in Athena before deciding anything else.

  4. Consider IPv6 for outbound traffic: an egress-only internet gateway has no hourly or per-gigabyte charge, where the destination supports IPv6.

When to keep the NAT gateway

  • Sustained outbound traffic in the gigabits, where you would be sizing large instances anyway and want AWS to own it.

  • Compliance or a customer contract that asks for managed components only.

  • No one on the team who will patch an instance, watch an alarm and test failover twice a year.

Running fck-nat properly

  • Deploy it as code: the cdk-fck-nat construct is the best-supported route, with an official Terraform module as well. Both set up HA mode and routing.

  • One instance per AZ, so an AZ's traffic doesn't cross zones (and pay $0.01/GB each way) to reach it.

  • Alarms on instance health and on network throughput approaching the instance's baseline.

  • A patch routine: roll the Auto Scaling group onto the newest fck-nat AMI on a schedule.

  • A written rollback: switching route tables back to a NAT gateway takes minutes if it is rehearsed.

hoolco Monthly Review

Once a month: what changed in tech that month and what it means for you, from cloud and AI to security and the tools you build with. Every item links to its source. No sales pitch, unsubscribe in one click.

As of November 2, 2026. Provided as is, for general information, and accurate to the best of our knowledge on the date shown. Not legal, compliance, tax, financial or other professional advice. Prices, limits and vendor services change; check current vendor documentation before relying on anything here. Terms of use.