---
title: "How to configure an additional IP on your VPS"
description: "Configure an additional IP on your Winheberg VPS, automatic script method or manual setup depending on your distribution."
category: vps
subcategory: vps-linux
docGroup: test1
docGroupIcon: tabler:layout-list
icon: tabler:file-text
date: 2026-07-23
author: Winheberg
slug: "additional-ip-vps"
order: 63
image: /statics/images/docs/en/vps-linux/additional-ip-vps.webp
tags: [vps, additional ip, netplan, networkmanager, network]
keywords: [additional ip vps, add ip address vps, netplan additional ip, networkmanager additional ip, winheberg vps]
link_fr: "/docs/vps-linux/ip-supplementaire"
---

## Context

By default, every Winheberg VPS comes with one IPv4 address. If your project needs multiple addresses, for example to isolate several services, manage separate TLS certificates, or split traffic, you can order one or more additional IPs from your client area.

On our VPS, an additional IP is added in the same network as your primary IP, as a `/25` for IPv4 and a `/64` for IPv6. Unlike a fully isolated address, it doesn't need a dedicated gateway or a special routing rule, the default route already present on your VPS is enough for it to respond correctly from the outside. All you need to do is add the address on your existing network interface.

The typical symptom of an IP added with the wrong prefix, or not added at all, is no response to a ping from the outside.

```bash
$ ping 82.153.202.X
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
```

## Prerequisites

- An active Winheberg VPS with root SSH access
- An additional IP already ordered on your product and visible in the IP Address section of your client area
- Access to your client area at `https://billing.winheberg.com`
- A recent backup of your VPS

> [!WARNING]
> Changing network configuration always carries some risk. The steps in this guide are additive and don't touch your primary IP, so your SSH access on the primary address stays intact. Still keep a recent backup as a precaution, since our VPS don't have a boot console.

## 1. Get your additional IP's details

An additional IP is ordered from your client area, on the relevant product's page, through the Upgrade/Downgrade Options. Once the address is provisioned, it appears in the IP Address section of your product page. Note this value down, the examples in this guide use demo addresses.

| Parameter | IPv4 example | IPv6 example |
|---|---|---|
| Additional address | `82.153.202.X` | `2001:db8:1::X` |
| Prefix | `/25` | `/64` |

> [!IMPORTANT]
> The exact address, for both IPv4 and IPv6, is shown in the IP Address section of your product page. The values in this guide are examples and don't match your network. No dedicated gateway is needed for an additional IP, it shares your primary IP's default route.

## 2. Identify the right method for your VPS

Persistence across reboots doesn't depend on the distribution itself, but on the tool managing your network. The table below summarizes which sub-tab to follow.

| Distribution | Detected network tool | Sub-tab to follow |
|---|---|---|
| Debian 12+, Ubuntu 22.04+ | netplan | Debian 12+ and Ubuntu 22.04+ (netplan) |
| AlmaLinux 9, Rocky 9 | NetworkManager | AlmaLinux, Rocky, Fedora (NetworkManager) |
| AlmaLinux 10, Rocky 10 | NetworkManager | AlmaLinux, Rocky, Fedora (NetworkManager) |
| Fedora 41, 42 | NetworkManager | AlmaLinux, Rocky, Fedora (NetworkManager) |
| Debian 11 | neither netplan nor NetworkManager, systemd only | Debian 11 (systemd) |
| Alpine 3.22 | OpenRC | Alpine |

If you're unsure which tool is active, the commands below will tell you, in this order of priority.

```bash
# Is netplan present?
ls /etc/netplan/ 2>/dev/null

# Is NetworkManager active?
systemctl is-active NetworkManager 2>/dev/null

# Is it Alpine?
cat /etc/alpine-release 2>/dev/null
```

If none of these three commands return a positive result but `systemctl` works, your system runs on systemd alone, which is the case for Debian 11 on our images.

> [!NOTE]
> If your interface isn't named `eth0`, adapt the commands. The `ip -br link` command lists your network interfaces.

## 3. Configure the additional IP

Two approaches are possible. Our automatic script detects your distribution and applies everything through a menu. Manual configuration gives you full control, with one method per network tool.

### Automatic method with our script

Our script automatically detects your network tool and shows a menu to add or remove an additional IP, for both IPv4 and IPv6. It applies the configuration and handles persistence across reboots, without ever touching your primary IP. This is the method we recommend, the manual configuration below reproduces exactly what the script does, for those who prefer to do everything by hand.

Download the script from our GitHub repository, make it executable, then run it with root privileges.

```bash
curl -o /usr/local/sbin/winheberg-additional-ip.sh REPLACE-WITH-GITHUB-LINK
chmod +x /usr/local/sbin/winheberg-additional-ip.sh
sudo /usr/local/sbin/winheberg-additional-ip.sh
```

Enter your address when the script asks for it, for example `82.153.202.X`, and it configures the interface for you.

### Manual configuration

Choose IPv4 or IPv6 first, then the method suited to your network tool. Each method simply adds the address to the existing interface, in the same network as your primary IP, without a gateway or dedicated routing table.

:::::MdTabs
::::MdTab{label="IPv4"}
:::MdTabs
::MdTab{label="Debian 12+ and Ubuntu 22.04+ (netplan)"}
Create a dedicated netplan file, for example `/etc/netplan/70-additional.yaml`, with the content below. netplan merges this file with your primary IP's existing configuration, there's no need to disable cloud-init's network management, cloud-init only rewrites its own file (`50-cloud-init.yaml`), not the additional files you create.

```yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 82.153.202.X/25
```

The netplan file must be readable only by root, otherwise netplan shows a warning.

```bash
sudo chmod 600 /etc/netplan/70-additional.yaml
```

Apply the configuration by testing it first, which allows an automatic rollback if you lose the connection.

```bash
sudo netplan try
sudo netplan apply
```

> [!NOTE]
> `netplan try` applies the configuration and then waits for confirmation. Without validation within the given time, it automatically restores the previous state, which protects your SSH access.
::
::MdTab{label="AlmaLinux, Rocky, Fedora (NetworkManager)"}
On these distributions, NetworkManager manages the interface. Rather than modifying the existing connection profile, we add a dispatcher script that reapplies the address on every network event, without touching the NetworkManager configuration already in place.

First, find your interface's name.

```bash
ip -br link
```

Create the dispatcher script.

```bash
sudo tee /etc/NetworkManager/dispatcher.d/50-additional-ip << 'EOF'
#!/bin/sh
[ "$1" = "eth0" ] || exit 0
case "$2" in up|dhcp4-change|dhcp6-change|connectivity-change) ;; *) exit 0 ;; esac
ip addr replace 82.153.202.X/25 dev eth0
EOF
sudo chmod +x /etc/NetworkManager/dispatcher.d/50-additional-ip
```

Apply the address right away, without waiting for the next network event.

```bash
sudo ip addr replace 82.153.202.X/25 dev eth0
```

> [!NOTE]
> This script fires again every time NetworkManager reconfigures the interface (reboot, reconnection), which makes the address persistent without modifying your existing ifcfg or keyfile connection profile.
::
::MdTab{label="Debian 11 (systemd)"}
Debian 11 doesn't install netplan by default and generally doesn't run NetworkManager on our images. Persistence therefore goes through a dedicated systemd service that reapplies the address on every boot.

Create the apply script.

```bash
sudo tee /usr/local/sbin/winheberg-additional-ip-apply.sh << 'EOF'
#!/bin/sh
ip addr replace 82.153.202.X/25 dev eth0
EOF
sudo chmod +x /usr/local/sbin/winheberg-additional-ip-apply.sh
```

Create the associated systemd service.

```bash
sudo tee /etc/systemd/system/winheberg-additional-ip.service << 'EOF'
[Unit]
Description=Winheberg - additional IP
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/winheberg-additional-ip-apply.sh

[Install]
WantedBy=multi-user.target
EOF
```

Enable the service so it fires on future boots, then apply the address right away.

```bash
sudo systemctl daemon-reload
sudo systemctl enable winheberg-additional-ip.service
sudo ip addr replace 82.153.202.X/25 dev eth0
```
::
::MdTab{label="Alpine (OpenRC)"}
First, install `iproute2`, if not already done.

```bash
apk add iproute2
```

Create a startup script that applies the address on every boot.

```bash
cat > /etc/local.d/additional-ip.start << 'EOF'
#!/bin/sh
ip addr replace 82.153.202.X/25 dev eth0
EOF
chmod +x /etc/local.d/additional-ip.start
```

Enable OpenRC's `local` service, then run the script without waiting for the next reboot.

```bash
rc-update add local default
rc-service local start
```

> [!TIP]
> The `/etc/local.d/` folder is provided by OpenRC for this kind of startup command. Your address is thus automatically reapplied on every boot.
::
:::
::::
::::MdTab{label="IPv6"}
:::MdTabs
::MdTab{label="Debian 12+ and Ubuntu 22.04+ (netplan)"}
Complete the same `/etc/netplan/70-additional.yaml` file with the IPv6 block, or create the file if you haven't configured IPv4. When both families coexist, group the `addresses` entries in the same `eth0` block.

```yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - "2001:db8:1::X/64"
```

Secure and apply the file the same way as for IPv4.

```bash
sudo chmod 600 /etc/netplan/70-additional.yaml
sudo netplan try
sudo netplan apply
```
::
::MdTab{label="AlmaLinux, Rocky, Fedora (NetworkManager)"}
Add the IPv6 line to the same dispatcher script, after the IPv4 line.

```bash
sudo tee -a /etc/NetworkManager/dispatcher.d/50-additional-ip << 'EOF'
ip -6 addr replace 2001:db8:1::X/64 dev eth0
EOF
```

Apply right away.

```bash
sudo ip -6 addr replace 2001:db8:1::X/64 dev eth0
```
::
::MdTab{label="Debian 11 (systemd)"}
Add the IPv6 line to the same apply script, after the IPv4 line.

```bash
sudo tee -a /usr/local/sbin/winheberg-additional-ip-apply.sh << 'EOF'
ip -6 addr replace 2001:db8:1::X/64 dev eth0
EOF
```

Apply right away, the systemd service will replay this line on the next boot.

```bash
sudo ip -6 addr replace 2001:db8:1::X/64 dev eth0
```
::
::MdTab{label="Alpine (OpenRC)"}
Add the IPv6 line to the `/etc/local.d/additional-ip.start` script, after the IPv4 line.

```bash
ip -6 addr replace 2001:db8:1::X/64 dev eth0
```

Then restart the local service to apply it.

```bash
rc-service local restart
```
::
:::
::::
:::::

## 4. Check that the IP responds

Check that the address is present on the interface.

```bash
ip -br addr show eth0
```

You should see your additional IP in the address list, with the correct prefix (`/25` for IPv4, `/64` for IPv6). From another machine, a ping to the additional IP should now respond.

```bash
ping 82.153.202.X
ping -6 2001:db8:1::X
```

> [!NOTE]
> This verification command is the same across all network tools. It relies on iproute2, present by default everywhere except Alpine, where it's installed with `apk add iproute2`.

## If you run into trouble

### ❌ The additional IP doesn't respond to ping

- Check that the address shows up in `ip -br addr show eth0` with the correct prefix
- Make sure you haven't used a `/32` or `/128` prefix by mistake, the additional IP must stay in the same network as your primary IP, `/25` for IPv4 and `/64` for IPv6
- Check that your firewall (ufw, firewalld, or iptables) isn't blocking ICMP traffic or the relevant services on the new address
- Confirm you're targeting the right interface, `eth0` on some images, `ens3` or another name on others
- Compare the configured address with the exact value shown in the IP Address section

### ❌ The configuration disappears after a reboot

- netplan, the file must be located in `/etc/netplan/` with a `.yaml` extension
- NetworkManager, the dispatcher script must exist in `/etc/NetworkManager/dispatcher.d/` and be executable, check with `ls -l`
- Debian 11, the service must be enabled, check with `systemctl is-enabled winheberg-additional-ip.service` and `systemctl status winheberg-additional-ip.service`
- Alpine, check that `rc-update add local default` was run and that the `.start` script is executable

### ❌ The IP responds but some remote services reject it

- Check that the service is actually listening on this address and not only on the primary IP, especially if your application binds to a specific address
- Check that no firewall rule specifically targets the primary IP and effectively excludes the new address

## Best practices

- Prefer our automatic script, it applies exactly the methods described in this guide and handles detecting your network tool for you
- On netplan systems (Debian 12+ and Ubuntu), test with `netplan try`, it restores the previous configuration if you lose access
- Keep your changes additive and never modify your primary IP's configuration
- Always respect the given prefix, `/25` for IPv4 and `/64` for IPv6, a `/32` or `/128` prefix would isolate the address and prevent it from responding correctly
- Document each additional IP's address and the method used to apply it
- Check your firewall after adding the address and only open the services you want on the new address
- Back up your network configuration files before any change

## Need help?

To order an additional IP, go to the relevant product's page in your client area at `https://billing.winheberg.com` and use the Upgrade/Downgrade Options. The assigned address then appears in the IP Address section of the product page.

If your additional IP still doesn't respond after configuration, open a ticket with our support. Choose the Technical department and fill in the Produit lié field with the VPS in question. Specify the configured address, the network tool used, and the result of the verification commands, this helps our team diagnose the issue faster.

Your VPS can now properly expose multiple addresses, each added on the same network as your primary IP 🐧
