# How subnets work

> What a floating subnet holds, which of its addresses you can use, and how to list them.

Source: https://docs.coritan.com/floating-ips/subnets/

In the dashboard:

- /dashboard/networking/ips/…/hosts: https://www.coritan.com/dashboard/networking/ips

A *subnet* is a block of consecutive IPv4 addresses that you hold as one floating IP. You order it in one size, pay one price for it, and attach its addresses one at a time. Each address that you can attach is a *host*.

A subnet is written with its size, such as `203.0.113.16/29`: the block starts at `203.0.113.16`, and `/29` says how many addresses it holds.

## Sizes

| Size | Addresses | Usable hosts |
| --- | --- | --- |
| `/29` | 8 | 5 |
| `/28` | 16 | 13 |
| `/27` | 32 | 29 |
| `/26` | 64 | 61 |
| `/25` | 128 | 125 |
| `/24` | 256 | 253 |

The **Pools** tab shows which sizes you can order, and in which regions, as [IP pools and regions](/floating-ips/pools/) describes. When it lists no subnet sizes, you can order single addresses only.

## Addresses the network keeps

Three addresses of every subnet are reserved, and you cannot attach them. In `203.0.113.16/29`:

*Network address*
: The first address, `203.0.113.16`.

*Gateway*
: Usually the address after it, `203.0.113.17`. The subnet's **Overview** tab shows it under **Gateway**.

*Broadcast address*
: The last address, `203.0.113.23`.

The addresses between them, `203.0.113.18` to `203.0.113.22`, are the usable hosts.

## How hosts reach your machines

Each host attaches on its own, to one Cloud Compute instance or one Container Apps server. You can attach different hosts of one subnet to different targets, and several hosts to one instance. A server holds one floating IP, so it takes one host. [Attach and detach a floating IP](/floating-ips/attach-and-detach/#attach-a-host-of-a-subnet) has the steps.

We route each attached host to its target as a single address. An instance sets the host up with the prefix `/32`, the same way as a single floating IP, and does not see the rest of the subnet. A host that is not attached reaches none of your machines.

## The Hosts tab

Open the subnet and select the **Hosts** tab. The card is titled with the subnet, such as `203.0.113.16/29`, and says how many usable hosts are attached and which address is the gateway, such as `2 of 5 usable hosts attached · gateway 203.0.113.17`. The table lists every address of the subnet:

**Address**
: The address. Select it to copy it.

**Role**
: `Gateway`, `Network` or `Broadcast` for a reserved address. `Attached` or `Free` for a usable host.

**Attached to**
: The instance or server the host is attached to. A reserved address shows `Reserved by the network`.

**Since**
: When the host was attached.

The actions menu at the end of a usable host's row holds **Set reverse DNS** and, for a free host, **Attach**, or for an attached host, **Detach…**.

## Reverse DNS and DDoS Shield on a subnet

Each usable host has a reverse DNS record of its own. [Set reverse DNS for a floating IP](/floating-ips/reverse-dns/#set-reverse-dns-for-a-host-of-a-subnet) explains how to set one.

DDoS Shield filters the whole subnet with one profile. To aim a rule at a single host, put the host in the rule's **Destination prefix**, such as `203.0.113.18/32`, as [Change a floating IP's DDoS protection](/floating-ips/shield-settings/) describes.

## Billing and suspension

A subnet always bills at its plan's price, whether or not any host is attached. A host that is an instance's primary address does not make the subnet free. [What a floating IP costs](/floating-ips/billing/#what-a-floating-ip-costs) compares this with a single address.

When we suspend a subnet, usually for an unpaid invoice, we detach every host. After you pay, attach the hosts again. When a subnet ends, we detach every host and release the whole block.

You cannot change a subnet's size. For more addresses, order another subnet.

## With the API

`GET /api/v1/client/ips/{service_id}/hosts` lists every address of a subnet with what it is attached to:

```bash
curl https://api.coritan.com/api/v1/client/ips/220/hosts \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

```json
{
  "service_id": 220,
  "kind": "block",
  "cidr": "203.0.113.16/29",
  "gateway": "203.0.113.17",
  "hosts": [
    {"id": 931, "address": "203.0.113.16", "role": "reserved", "attached": false, "attachable": false, "attached_to": null, "attached_at": null},
    {"id": 933, "address": "203.0.113.18", "role": "host", "attached": true, "attachable": false, "attached_to": {"target_type": "vps", "target_service_id": 118, "target_resource_id": 57}, "attached_at": "2026-09-25T10:00:00"},
    {"id": 934, "address": "203.0.113.19", "role": "host", "attached": false, "attachable": true, "attached_to": null, "attached_at": null}
  ],
  "hosts_total": 5,
  "hosts_attached": 1,
  "hosts_available": 4
}
```

The example shortens `hosts` to three entries. The list holds every address of the subnet in address order.

| Field | Meaning |
| --- | --- |
| `hosts[].id` | The host's ID. The attach, detach and reverse DNS requests take it as `host_inventory_id`. |
| `hosts[].role` | `host` for a usable host, `reserved` for the network, gateway and broadcast addresses. |
| `hosts[].attachable` | `true` for a usable host that is free. |
| `hosts[].attached_to` | The target's `target_type` (`vps` or `container`) and `target_service_id`, or `null`. |
| `hosts_total` | The number of usable hosts. The reserved addresses do not count. |
| `hosts_attached`, `hosts_available` | How many usable hosts are attached, and how many are free. |

Add `?include_reserved=false` to leave the reserved addresses out of `hosts`. A floating IP that is a single address answers `400` with `Service is not a subnet block`. A service that is not a floating IP on your account answers `404` with `IP service not found`.

The [Floating IPs API reference](/api/reference/client/floating-ips/#op-get-api-v1-client-ips-service-id-hosts) lists every field.

## API

- `GET /api/v1/client/ips/{service_id}/hosts`: Host map for a rented subnet service (https://docs.coritan.com/api/reference/client/floating-ips/#op-get-api-v1-client-ips-service-id-hosts)
