Skip to content
Current coupon:10% offUse it in your order

IPv6 and additional IP addresses on a VPS

What an IPv6 address and a /64 range mean, how to check that IPv6 works, and how to permanently add another IPv6 address from your range or a purchased IPv4 address on a VPS (netplan and ifupdown).

  • advanced
  • ~20 min
  • Updated 1 Oct 2026

Every VPS gets an IPv4 address, an IPv6 address and a whole IPv6 /64 range from us. We'll show how to check that IPv6 works and how to permanently add another address to the VPS, whether it's an IPv6 address from your range or a purchased IPv4 address.

What you'll need

  • A StormHost VPS with Ubuntu 24.04 or Debian 13
  • An SSH connection as root (guide)
  • The browser console open in case you lock yourself out while editing the network
  • About 20 minutes

What you get from us#

You'll find everything in the customer area in the Network tab:

ItemWhat it isConfigured inside the VPS?
IPv4 addressThe main public address of the VPS, for example 203.0.113.10.Yes, automatically when the VPS is created.
IPv6 addressThe main IPv6 address of the VPS, for example 2001:db8::10.Yes, automatically when the VPS is created.
IPv6 range (/64)A whole block of IPv6 addresses that belongs only to your VPS, for example 2001:db8::/64. The main IPv6 address is one of them.Only the main address. You add others yourself.
Additional IPv4 addressesPurchased IPv4 addresses.No. “Configure them inside the VPS too.”

A /64 range means the first four groups of the address are fixed and you choose the remaining four. From the range 2001:db8::/64 you can use, for example, 2001:db8::11, 2001:db8::22 or 2001:db8::abcd:1. There are so many addresses in the range that you'll never run out.

There's only one address from the range you shouldn't use: the default gateway address, if it lies in the range. You'll find it with ip -6 route show default (the address after the word via). A gateway starting with fe80: isn't in the range, so this doesn't affect you.

The IP spoofing protection we run on the network lets through traffic from the main IPv4 address, all addresses in your /64 range and purchased IPv4 addresses. The VPS can't use any other addresses.

Checking that IPv6 works#

  1. List the IPv6 addresses of the VPS:

    bash
    ip -6 addr show scope global
    • ip -6 addr – lists the IPv6 addresses of the network interfaces.
    • show scope global – only public addresses (without the local fe80:: ones).

    In the output you'll see a line with your address, for example inet6 2001:db8::10/64 scope global.

  2. Test a connection to the internet over IPv6:

    bash
    ping -6 -c 4 2606:4700:4700::1111
    • ping – sends test packets and measures the response.
    • -6 – use IPv6.
    • -c 4 – send 4 packets and stop.
    • 2606:4700:4700::1111 – Cloudflare's public DNS server, which answers pings.

    When you see four lines 64 bytes from 2606:4700:4700::1111 and 0% packet loss, IPv6 works.

Which network configuration system the VPS uses#

How you add an address depends on what configures the network inside the VPS. First find the name of the network interface:

bash
ip -br addr
  • -br – brief output, one line per interface.

The interface with your public address is usually called eth0. The lo line is the local loopback; ignore it. Below we use eth0; if your interface has a different name, use that.

Then find out whether the VPS uses netplan:

bash
ls /etc/netplan/
  • If you see a file with the .yaml extension (typically 50-cloud-init.yaml), the VPS uses netplan. On Ubuntu 24.04 that's always the case.
  • If the folder is empty or doesn't exist, the VPS uses ifupdown and the configuration is in /etc/network/interfaces and in the /etc/network/interfaces.d/ folder.

Don't edit 50-⁠cloud-init.yaml

The 50-cloud-init.yaml file (with ifupdown, 50-cloud-init in interfaces.d) is generated automatically and its header warns that manual changes may not survive a restart. So always put additional addresses in your own file. Both netplan and ifupdown merge the contents of the files.

Adding another IPv6 address from the range#

As an example we'll add the address 2001:db8::11. You'll use an address from your own range in the Network tab.

Trying it without a permanent change#

First add the address only temporarily. It works until the VPS restarts, then it disappears. This lets you check that the address is correct without touching the configuration.

bash
ip -6 addr add 2001:db8::11/64 dev eth0
  • ip -6 addr add – adds an IPv6 address.
  • 2001:db8::11/64 – the new address and the prefix length of your range (/64).
  • dev eth0 – the interface you're adding the address to.

Test that traffic goes out from the new address and replies come back:

bash
ping -6 -c 4 -I 2001:db8::11 2606:4700:4700::1111
  • -I 2001:db8::11 – send packets from the new address (as the source address).

If the ping goes through, the address works and you can save it permanently.

Permanent setup#

Netplan

  1. Create your own configuration file:

    bash
    nano /etc/netplan/60-dalsi-adresy.yaml
  2. Put this content in it (indent with spaces only, never tabs):

    /etc/netplan/60-dalsi-adresy.yamlYAML
    network:
      version: 2
      ethernets:
        eth0:
          addresses:
            - 2001:db8::11/64
    LineWhat it means
    network: and version: 2The required header of every netplan file.
    ethernets:Ethernet-type network interfaces follow.
    eth0:The interface identifier. It must be the same as in 50-cloud-init.yaml, otherwise netplan creates a new setting instead of extending the existing one.
    addresses:A list of addresses that are added to the interface. The addresses from 50-cloud-init.yaml stay.
    - 2001:db8::11/64The new address. Add more addresses as further lines with the same indentation.

    Find the interface identifier with cat /etc/netplan/50-cloud-init.yaml: it's the first line under ethernets: (typically eth0:). Don't put the default gateway or DNS servers in your file. They're already in 50-cloud-init.yaml and apply to the new address too.

  3. Save the file (Ctrl+O, Enter) and close the editor (Ctrl+X).

  4. Set the file's permissions so other users can't read it (otherwise netplan prints a warning):

    bash
    chmod 600 /etc/netplan/60-dalsi-adresy.yaml
  5. Check how netplan merged both files:

    bash
    netplan get ethernets.eth0.addresses
    • netplan get – prints the resulting configuration assembled from all files.

    The output must contain the original addresses and the new 2001:db8::11/64.

  6. Apply the configuration safely:

    bash
    netplan try
    • netplan try – applies the new configuration and waits for confirmation. If you don't press Enter within 120 seconds, it restores the original settings. If the change locked you out, the connection comes back by itself after two minutes.
  7. If the SSH connection still works, press Enter to confirm the change.

ifupdown

  1. Check that the main configuration loads files from the interfaces.d folder:

    bash
    grep -n source /etc/network/interfaces

    The output must include the line source /etc/network/interfaces.d/* (or source-directory). If it's missing, add it to the end of /etc/network/interfaces.

  2. Create your own file:

    bash
    nano /etc/network/interfaces.d/60-dalsi-adresy
  3. Put in the content:

    /etc/network/interfaces.d/60-dalsi-adresytext
    iface eth0 inet6 static
        address 2001:db8::11/64
    LineWhat it means
    iface eth0 inet6 staticAdditional settings for the eth0 interface, IPv6, static address. One interface can have several iface blocks and ifupdown uses them all.
    address 2001:db8::11/64The new address with the prefix length. Don't add a gateway (gateway) here; it's already in the main configuration.
  4. Save and close the editor. You've already added the address temporarily with the ip command, so you don't need to restart anything. The file is used the next time the VPS boots.

Adding another IPv4 address#

Ordering#

  1. Open the VPS and go to the Change plan tab.
  2. In the IPv4 addresses row, increase the number of addresses. Each costs 32 CZK a month.
  3. Check New monthly price and Pay now, click Order and pay and pay for the order.
  4. Once paid, we assign the address to your VPS and send you an email. The address appears in the Network tab under Additional IPv4 addresses.

Setup inside the VPS#

The procedure is the same as for IPv6, just with a different address notation. As an example we'll use 203.0.113.11.

  1. Try the address temporarily:

    bash
    ip addr add 203.0.113.11/32 dev eth0
    ping -c 4 -I 203.0.113.11 1.1.1.1
    • ip addr add 203.0.113.11/32 dev eth0 – adds an IPv4 address to the eth0 interface.
    • /32 – the address is added on its own, without its own subnet. Traffic from it goes through the VPS's existing default gateway, so you don't need to know the mask or gateway of the new address.
    • ping -c 4 -I 203.0.113.11 1.1.1.1 – sends 4 packets from the new address to the public server 1.1.1.1.
  2. If the ping goes through, save the address permanently. The procedure is the same as in the Permanent setup part for IPv6; only the address you write differs:

Netplan

  1. Open your own file (if you don't have it yet from IPv6, create it with the same header as above):

    bash
    nano /etc/netplan/60-dalsi-adresy.yaml
  2. Add a line with the new address to the addresses: list. The file then looks like this, for example:

    /etc/netplan/60-dalsi-adresy.yamlYAML
    network:
      version: 2
      ethernets:
        eth0:
          addresses:
            - 2001:db8::11/64
            - 203.0.113.11/32

    The line with the IPv6 address is there only if you added it following the previous part.

  3. Save the file (Ctrl+O, Enter), close the editor (Ctrl+X) and set the permissions: chmod 600 /etc/netplan/60-dalsi-adresy.yaml.

  4. Run netplan try and, if the SSH connection still works, confirm the change with Enter.

ifupdown

  1. Open your own file:

    bash
    nano /etc/network/interfaces.d/60-dalsi-adresy
  2. Add a block at the end:

    /etc/network/interfaces.d/60-dalsi-adresytext
    iface eth0 inet static
        address 203.0.113.11/32
    • iface eth0 inet static – additional settings for the eth0 interface, IPv4, static address.
    • address 203.0.113.11/32 – the new address. Don't add a gateway (gateway); it's already in the main configuration.
  3. Save and close the editor. You've already added the address temporarily with the ip command; the file is used the next time the VPS boots.

Which address the VPS uses for outgoing traffic

Outgoing connections (updates, downloads) still go from the main IPv4 address. An additional address is used by an application that listens on it or explicitly binds to it. For example, a second website or a second game server on the same port, each on a different IP address.

If you'll send email from the new address, set its reverse DNS in the Network tab (see Reverse DNS).

Applications and IPv6#

Adding the address isn't enough; the application also has to listen on it. Check with:

bash
ss -tlnp
  • ss – lists network connections and open ports.
  • -t – TCP only (use -u for UDP).
  • -l – only ports a program is listening on.
  • -n – addresses and ports as numbers, not names.
  • -p – show the program name.

How to read the local address column:

NotationMeaning
0.0.0.0:80The program listens on all IPv4 addresses, but not on IPv6.
[::]:80 or *:80The program listens on IPv6 (and usually on IPv4 too).
203.0.113.11:80The program listens only on this one address.
127.0.0.1:3306Only inside the VPS, not reachable from outside.

Other things not to forget:

  • DNS: for visitors to reach you over IPv6, add an AAAA record with the IPv6 address to your domain (see DNS records).
  • Firewall: rules in the Firewall tab with no address filled in apply to both IPv4 and IPv6. Ping over IPv6, however, needs its own rule with the ICMPv6 protocol. UFW has IPv6 turned on by default (see UFW firewall).
  • Nginx: for IPv6 it needs the line listen [::]:80; next to listen 80; in the server block.

Verification#

  • ip -br addr shows the new address on the eth0 interface.
  • A ping with the -I <NEW_ADDRESS> option goes through.
  • After restarting the VPS with the Restart button, the address is still in the ip -br addr output. Schedule the restart for when it suits you, and keep the console open.

If you lock yourself out#

When SSH stops working after a network change, open the browser console. It doesn't depend on the VPS network.

  1. Delete or fix your file (/etc/netplan/60-dalsi-adresy.yaml or /etc/network/interfaces.d/60-dalsi-adresy).
  2. With netplan, apply the configuration again with netplan apply. With ifupdown, restart the VPS with the Restart button.

Troubleshooting#

Permissions for /etc/netplan/60-dalsi-adresy.yaml are too open#

It's just a warning; the configuration is applied anyway. Get rid of it with chmod 600 /etc/netplan/60-dalsi-adresy.yaml.

Invalid YAML or Error in network definition#

There's an indentation error in the file. Use spaces only (no tabs) and keep the indentation from the example: each level two spaces more. Also check that the interface name ends with a colon (eth0:).

The new IPv6 address doesn't respond#

  • Check that the address belongs to your range: the first four groups must be the same as in the IPv6 range (/64) in the Network tab.
  • In the ip -6 addr output, look for the word dadfailed next to the address. It means another device on the network already uses the same address. Choose a different one.
  • Check the firewall both inside the VPS and in the customer area.

The VPS has no public IPv6 address at all#

The ip -6 addr show scope global command prints nothing, yet the Network tab lists an IPv6 address. Contact us (support) and send the output of ip -br addr.

The additional IPv4 address doesn't work#

  • Check that the address is in the Network tab under Additional IPv4 addresses. If it's still waiting to be assigned, wait for the email.
  • Check that it's configured inside the VPS (ip -br addr).
  • Check the firewall rules.

The address disappeared after a restart#

Either you added it only temporarily with ip addr add, or you edited the automatically generated 50-cloud-init file. Save it to your own file as described above.

Summary

  • In the Network tab you have an IPv4 address, an IPv6 address and a whole IPv6 /64 range; you add more addresses from the range yourself.
  • You have to configure purchased IPv4 addresses inside the VPS; they aren't added automatically.
  • First try a new address temporarily with ip addr add and a ping with -I.
  • Save it permanently in your own file (60-dalsi-adresy), never in 50-cloud-init.
  • With netplan, use netplan try, which rolls back by itself on an error.
  • The application must listen on the new address and the domain needs an AAAA record.

Search the guides