KNOWNHOST KNOWLEDGE BASE

Hosting Question? Find the Solution - Browse our Guides, Articles, and How-To's

Unmanaged KVM Networking

Since the most important parts of the network configuration are provided via DHCP along with your primary IPv4 address, managing your network stack is quite easy. The instructions here detail how to setup IPv6 and additional IP addresses on CentOS, Ubuntu, and Debian.

CentOS 7

CentOS 7 has two ways to manage networks. Init scripts which is what we’ll cover in this guide, and NetworkManager.

Add Additional IPs

IPv4

Open a new file using your preferred editor in /etc/sysconfig/network-scripts/ifcfg-eth0:1. For the sake of this guide we’ll use vi.

vi /etc/sysconfig/network-scripts/ifcfg-eth0:1

If you’re using vi, press i to enter input mode and paste the following:

  BOOTPROTO=static
  DEVICE=eth0:1
  ONBOOT=yes
  TYPE=Ethernet
  IPADDR=127.0.0.1
  PREFIX=32

You’ll want to alter the IPADDR value to the IP address you’re adding. For each additional IP you’ll create additional ifcfg-eth0:X files with X being arbitrary numbers. When doing this make sure the DEVICE line inside the config matches the interface name from the file name.

After you’ve finished editing the configuration file save it (^C:wqreturn in vi) and run the following command to apply the changes:

  systemctl restart network

If you did everything properly you can verify the new address was added to the system by running ip a where you should see your newly added IP listed.

If you want to manage your networks using NetworkManager you can read more into that 1)here.

IPv6

Adding IPv6 addresses is identical to v4 with the exception of IPADDR and PREFIX. Remove them both and add IPV6ADDR as the following example shows making sure to include the subnet on the end of the IPv6 which should generally be /64:

  BOOTPROTO=static
  DEVICE=eth0:1
  ONBOOT=yes
  TYPE=Ethernet
  IPV6ADDR=fd00::/64

Save the file and run systemctl restart network to apply your changes.

Ubuntu 18.04

Add Additional IPs

Ubuntu 18.04 uses netplan for managing IP addresses. netplan is a bit different from many other distributions network configuration systems in that it uses YAML files to build the network.

IPv4

Open a new file using your preferred editor in /etc/netplan/99-static.yaml. For the sake of this guide we’ll use vi.

vi /etc/netplan/99-static.yaml

If you’re using vi, press i to enter input mode and paste the following:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: yes
      dhcp6: no
      addresses:
      - 127.0.0.1/24
      - 127.0.0.2/24
      - fd00::1/64

In the above example, ens3 is the name of the primary network device to which we’ll bind the addresses. The list of ‘addresses’ are the addresses you wish to bind with 127.0.0.x representing IPv4 addresses and fd00::1/64 representing IPv6 addresses. Using this format you can add as many addresses as needed (if they’ve been purchased).

Keep in mind that the spacing/indention in YAML is very important.

If you are only binding an IPv6 address then only enter it in the list of addresses and do not create any IPv4 entries.

After you’ve finished editing the configuration file save it (^C:wqreturn in vi) and run the following command to apply the changes.

  netplan apply

Your new IPs should now be bound to your server. You can confirm this by running ip a.

root@host:~# ip a
<snip>
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ff:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff
    inet 127.0.0.1/24 brd 158.106.142.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet 127.0.0.2/24 brd 170.249.233.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet 127.0.0.0/23 brd 158.106.141.255 scope global dynamic ens3
       valid_lft 82390sec preferred_lft 82390sec
    inet6 fd00::1/64 scope global
       valid_lft forever preferred_lft forever
<snip>

IPv6

See above.

Ubuntu 16.04 & Debian 9

Add Additional IPs

Ubuntu 16.04 and Debian 9 build and manage networks the same way.

IPv4

Open a new file using your preferred editor in /etc/network/interfaces.d/99-static.yaml. For the sake of this guide we’ll use vi.

vi /etc/network/interfaces.d/99-static.yaml

If you’re using vi, press i to enter input mode and paste the following:

  auto ens3:1 ens3:2 ens3:3
 
  iface ens3:1 inet static
        address 127.0.0.1
 
  iface ens3:2 inet static
        address 127.0.0.2
 
  iface ens3:3 inet6 static
        address fd00::/64

In the above example, ens3 is the name of the primary network device to which we’ll bind the addresses. As you can see we bound 2 additional IPv4 and one IPv6 address. Make sure when creating new aliased interfaces (ex ens3:1) that you add them to the top line after auto so they’re started with networking.

After you’ve finished editing the configuration file save it (^C:wqreturn in vi) and run the following command to apply the changes.

  /etc/init.d/networking restart

Your new IPs should now be bound to your server. You can confirm this by running ip a.

root@host:~# ip a
<snip>
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ff:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff
    inet 127.0.0.1/24 brd 158.106.142.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet 127.0.0.2/24 brd 170.249.233.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet 127.0.0.0/23 brd 158.106.141.255 scope global dynamic ens3
       valid_lft 82390sec preferred_lft 82390sec
    inet6 fd00::1/64 scope global
       valid_lft forever preferred_lft forever
<snip>

IPv6

See above.