Skip to content

Floating IPs

Explanation · Updated Jun 2026

Coming from another cloud?

▸AWS·Elastic IP addresses

Elastic IP addresseshigh

  • AWS charges idle EIPs.
  • OpenStack floating IPs free/pool-limited.
  • AWS regional instance/ENI.
  • OpenStack project port.
AWS docs ↗
▸Azure·Public IP addresses

Public IP addresseshigh

  • Public IP is a dedicated ARM resource with SKUs (Basic/Standard); IPv4 billed, IPv6 free ().
  • Static/dynamic allocation (Standard static only); zone-redundant option (Standard v2).
  • Associated directly to NIC/LB/gateway vs via router DNAT in OpenStack.
  • Dynamic outbound uses ephemeral IPs even without assoc; no pool allocation like Neutron external nets.
Azure docs ↗
▸DigitalOcean·Reserved IPs (formerly Floating IPs)

Reserved IPs (formerly Floating IPs)medium

  • Naming/API surface: DigitalOcean renamed Floating IPs to Reserved IPs; endpoints and fields change from `floating_ips` to `reserved_ips` (while legacy endpoints existed until a stated deprecation window), whereas OpenStack retains the “floatingip” resource in Neutron APIs ().
  • Identity model: DigitalOcean’s resource identifier in the API path is the IP address itself (`/v2/reserved_ips/{reserved_ip}` where `{reserved_ip}` is an IPv4 address), whereas OpenStack commonly uses UUID identifiers for Neutron resources like floating IPs and ports ().
  • Attachment model: creation requires either `droplet_id` or `region` and reassignment is conceptually “map to a Droplet”; OpenStack associates floating IPs to Neutron ports (and thus can be used with more complex networking constructs like routers), which is a different mental model for migrating users ().
  • Region binding: DigitalOcean Reserved IPs are explicitly bound to a region, while OpenStack floating IP pools are usually defined per external network and can be consumed wherever that external network is reachable (implementation-specific) ().
DigitalOcean docs ↗
▸Google Cloud·Static External IP

Static External IPhigh

  • GCP static IPs are regional or global resources, with unassociated IPs metered per-hour; OpenStack floating IPs are pool-based. See the GCP pricing page for current rates.
  • GCP supports both ephemeral (auto-released on stop) and static IPs; OpenStack floating IPs are always explicit.
  • GCP global static IPs used with global load balancers only; no direct OpenStack equivalent.
Google Cloud docs ↗
▸Hetzner·Floating IPs

Floating IPshigh

  • Flat monthly billing €3/IPv4 or hourly equivalent, not usage-based per hour ().
  • Locked to specific location/zone, cannot move across datacenters unlike global pools in OpenStack ().
  • Hot-reassign without server reboot but requires manual OS config (e.g., ifupdown/netplan) post-change ().
  • Limits: 10/account default, 20/server max; single assignment at a time ().
Hetzner docs ↗

Floating IPs

The Network service (OpenStack Neutron) implements floating IPs as public addresses you attach to an instance on a private network when you need reachability from the internet or another external network. Neutron allocates them from a pool tied to a public or provider network; association uses one-to-one NAT so the guest keeps its fixed private address while the floating IP answers from outside.

You can move the same public address to a different instance after maintenance or failover without renaming DNS to a new private IP.

What floating IPs are for#

Private addresses are stable inside your project and work well for east-west traffic. When you run an API, bastion, or web front end that must be reached from outside the cloud, you allocate a floating IP and map it to the instance’s port. Inbound connections hit the public address; the platform translates to the instance’s fixed IP. Outbound flows from instances without floating IPs often use source NAT on a router; floating IPs carry inbound identity and optional symmetric return paths depending on topology.

Floating IPs also pair with reverse proxy instances: a single public address on the proxy can represent many private application backends.

Capabilities and constraints#

You get dynamic association and disassociation: return an address to the pool when you no longer need external access, or reattach it elsewhere. Quotas cap how many floating IPs a project may hold, because public IPv4 space is finite. Security groups and other firewall rules still filter traffic at the port; open only the ports your service requires.

The same conceptual model applies whether clients reach you over IPv4 or, where supported, IPv6: you still think in terms of a provider pool, association to a port, and filtered delivery to the instance.

Floating IP NAT flowSequence diagram showing how a client request reaches an instance through floating IP destination NAT on the routerInstance(10.0.0.5)Router(DNAT)Floating IP(203.0.113.10)ClientInstance(10.0.0.5)Router(DNAT)Floating IP(203.0.113.10)ClientRequest to 203.0.113.10Forward to routerDNAT → 10.0.0.5Response from 10.0.0.5SNAT → 203.0.113.10Response from 203.0.113.10Click to zoom
Floating IP NAT flow: client traffic reaches an instance through destination NAT on the router

How floating IPs fit the network model#

Projects see two broad network classes: private networks for instance-to-instance traffic inside the project, and public (or external) networks that reach outside. The external network exposes a pool of addresses; that pool feeds floating IP allocation.

Your instances keep fixed addresses on the private network for stable internal DNS and service discovery; the floating IP is an additional façade that can be remapped without renumbering the guest.

After allocation, you associate the address with an instance (through its port). Traffic to the floating IP is destination-NATted to the instance’s fixed address. When you disassociate, the address returns to the pool for reuse.

DNS and stable endpoints#

Floating IPs give you a stable address you can publish in DNS A or AAAA records while moving the backend instance behind maintenance. That indirection is simpler than updating records on every VM replacement, especially for bastions and small APIs. Pair DNS TTL choices with how fast failover must propagate when you reassociate an address.

Fixed vs. floating IPs#

Each instance on Quake AI receives at least one fixed IP: a private address assigned from the subnet where the instance's port lives. Fixed IPs are stable for the lifetime of the port, internal to your project, and reachable from outside the cloud only when you set up routing or NAT.

Floating IPs are public addresses drawn from an external pool and mapped to an instance's fixed IP through one-to-one NAT.

Fixed IPFloating IP
ScopePrivate: internal to the project networkPublic: reachable from the internet
AssignmentAutomatic when a port is created on a subnetManual: you allocate and associate explicitly
LifetimeTied to the port (deleted when the port is removed)Independent: persists until you release it
MobilityStays with the portCan be moved between instances
Use caseEast-west traffic, service discovery, inter-instance communicationInbound access, bastion hosts, public APIs, DNS endpoints

Most architectures use fixed IPs for internal communication and add floating IPs only where external reachability is required. That limits public exposure while keeping stable public endpoints where you need them.

When to use each#

  • Fixed IPs only: Database servers, internal microservices, workers that pull jobs from a queue. These instances talk to other instances on the same network and never need to be reached from outside.
  • Fixed + floating IP: Web servers, bastion hosts, public APIs, mail servers. The floating IP provides the public address; the fixed IP handles internal traffic.
  • Reverse proxy + floating IP: When multiple instances serve the same endpoint. The floating IP points to the proxy instance, and application backends use only fixed IPs.

Cost, security, and operations#

Public addresses are a quota-backed resource: plan for limits and any billing implications in your organization. Exposing instances increases attack surface, so combine floating IPs with tight security groups, patching, and authenticated services. Track which address is attached to which workload so you do not strand unused allocations or conflict with DNS records.

Release addresses you no longer need so other projects can use scarce IPv4 space and so your inventory stays honest during audits.

Further reading#

On this platform:

External resources:

Related content

Pages

deployment

Build a private network with two virtual machines

Network

→

Deploy a bursty-GPU control plane with a queue and workers

Compute

→

Deploy a Next.js app with the nextjs-app template

Compute

→

Deploy a private container registry with OpenTofu

Automation

→

Deploy a regional edge cache with the edge-cache template

Automation

→

Deploy a self-hosted git forge and CI with OpenTofu

Automation

→

Deploy a self-hosted identity provider with the auth-oidc template

Automation

→

Deploy Airbyte with the airbyte template

Automation

→

Deploy Airflow with the airflow template

Automation

→

Deploy an API gateway with the api-gateway template

Automation

→

Deploy an edge reverse proxy with the edge-reverse-proxy template

Automation

→

Deploy an edge tunnel gateway with the edge-tunnel-gateway template

Automation

→

Deploy an edge WAF with the edge-waf template

Automation

→

Deploy an inference gateway with OpenTofu

Automation

→

Deploy Appsmith with the appsmith-internal-tools template

Automation

→

Deploy Cal.com with the calcom-scheduling template

Automation

→

Deploy ClickHouse with the clickhouse template

Automation

→

Deploy Coolify with the coolify-host template

Automation

→

Deploy edge functions with the edge-functions template

Automation

→

Deploy Excalidraw with the excalidraw-whiteboard template

Automation

→

Deploy Feast with the feast template

Automation

→

Deploy GlitchTip with the glitchtip template

Automation

→

Deploy Infisical with the infisical-secrets template

Automation

→

Deploy JupyterHub with the jupyterhub template

Compute

→

Deploy Mattermost with the mattermost-team-chat template

Automation

→

Deploy Metabase with the Metabase template

Compute

→

Deploy MinIO + Iceberg with the minio-iceberg template

Automation

→

Deploy MLflow with the mlflow template

Compute

→

Deploy n8n with the n8n-workflow template

Automation

→

Deploy Nextcloud with the nextcloud-files template

Automation

→

Deploy Outline with the outline-docs template

Automation

→

Deploy Plane with the plane-project-management template

Automation

→

Deploy Redpanda with the redpanda template

Automation

→

Deploy Selenium Grid with the selenium-grid-testing template

Automation

→

Deploy self-hosted Supabase with Docker Compose

Compute

→

Deploy Streamlit with the streamlit template

Automation

→

Deploy Supabase with the supabase-selfhost template

Automation

→

Deploy Superset with the superset template

Automation

→

Deploy the live RTMP/SRT ingest and restream template with OpenTofu

Automation

→

Deploy the Simple VM template with OpenTofu

Automation

→

Deploy Trino with the trino template

Automation

→

Deploy Umami with the analytics-umami template

Automation

→

Deploy Unleash with the unleash-feature-flags template

Automation

→

Deploy Uptime Kuma with the uptime-kuma template

Automation

→

Deploy your first app on Kubernetes

Kubernetes

→

Templates

Troubleshooting

Was this page helpful?