IaC Bazaar
HetznerStatic-verified

Hetzner Private Network + NAT

Private network with subnets, routes, and a NAT gateway server for egress-only fleets.

terraformAlt & Specialty Clouds#hetzner

Compare Virtual Private Cloud (VPC) across clouds →

hetzner-private-networkterraform v1.7

Verification

Static-verified

Passed: validated and lint-clean (provider-schema-validated for AWS/Azure/GCP; Terraform-language lint elsewhere).

Conformance

  • Static validation (fmt · validate · tflint)
  • No applicable security policies for this provider
  • Plan tests (mocked: validation rules · outputs)

Provenance

Functional

  • Live test pending (no cloud run yet)

Last verified 2026-06-28 · how we verify

Verify this download

cosign · sha-256

Don't take our word for it. Every release is signed with cosign - check the bytes against our pinned public key before you trust them.

# 1. Our pinned public key - fetch once, trust out-of-band
curl -O https://www.iac-bazaar.com/cosign.pub

# 2. This module's Sigstore bundle
curl -o hetzner-private-network-1.0.0.sigstore.json \
  https://www.iac-bazaar.com/api/artifacts/hetzner-private-network/signature

# 3. Verify the tarball you downloaded
cosign verify-blob \
  --key cosign.pub \
  --bundle hetzner-private-network-1.0.0.sigstore.json \
  hetzner-private-network-1.0.0.tar.gz
# → Verified OK

# 4. (optional) confirm the checksum too
echo "2bc748f50756a9838c60e5f87d1f79abea5284ce33b5876eb7103c0821dbe375  hetzner-private-network-1.0.0.tar.gz" | sha256sum -c

Use it from the registry

terraform · opentofu
module "private_network" {
  source  = "www.iac-bazaar.com/iac-bazaar/hetzner-private-network/hetzner"
  version = "1.0.0"
}

Paid module — needs a purchase (or a subscription that covers it) plus a registry token from /account/tokens. Full setup: registry docs.

Inputs & outputs

Create a free account to read this module's contract

The declared contract — every input name, type, default and description, plus every output — is shown to signed-in accounts, not to anonymous visitors.

A free account sees the contract of every Free module. This one is Professional, so its contract unlocks when you buy it.

Documentation

hetzner-private-network

Status: static-validated, live-test pending. Ships under live-test quarantine — validated with tofu fmt, tofu validate, and tflint. Real apply/verify/destroy testing is pending a Hetzner Cloud sandbox account.

Private network for Hetzner Cloud with cloud subnets, egress routes, and a self-managed NAT gateway so egress-only fleets can reach the internet without holding a public IPv4. One module call gives you an RFC1918 network, one or more cloud subnets, a hardened NAT gateway server, and the 0.0.0.0/0 route that funnels private servers' outbound traffic through it. Works with Terraform and OpenTofu (>= 1.6), hcloud provider >= 1.0, < 2.0.

Design & secure defaults

  • Private by default. The network and its subnets carry no public exposure. The only resource with an internet-facing address is the (optional) NAT gateway, and it gets exactly one public IPv4.
  • Deny-by-default gateway firewall. No inbound port is open on the NAT gateway — not even SSH — until you allowlist nat_gateway_ssh_source_ips. Only ICMP is allowed. Outbound stays open so MASQUERADE can work.
  • NAT is a pattern, not a managed service. Hetzner has no managed NAT gateway. This module provisions a small server with a fixed private IP, enables IPv4 forwarding, and installs a persistent iptables MASQUERADE rule via cloud-init. You operate and patch this server — keep SSH key access on it (nat_gateway_ssh_key_ids) and apply OS updates. It is a single instance, so it is also a single point of failure for egress; for HA you would front two gateways yourself.
  • Stable route target. The gateway's private IP is computed deterministically (cidrhost(subnet, nat_gateway_host_index)) and reused as the route gateway, so the egress route always points at the right host. A precondition rejects the network's reserved first IP.
  • One-flag delete protection across the network and the gateway server.

Egress-only servers you create elsewhere simply attach to one of these subnets with ipv4_enabled = false; the network route does the rest.

Requirements

  • Terraform or OpenTofu >= 1.6
  • hetznercloud/hcloud provider >= 1.0, < 2.0 (private networks, subnets, routes and hcloud_server_network — latest recommended)

License

Commercial — LicenseRef-IaCBazaar-Commercial. See the IaC Bazaar terms.

Usage code & full reference unlock after purchase

The complete copy-paste usage, the full input/output reference, and operational notes ship with your licence - shown here and bundled in the download.

  • Usage
  • Inputs
  • Outputs
  • Notes

Related modules