Hypervisor Installation
Requirements
Resources
- A large /home partition (This is the default location for virtual server data)
Operating Systems
The following operating systems are supported.
Operating System | x86_64 | AArch64 | Status | Notes |
---|---|---|---|---|
Debian 11 (Bullseye) | ✅ | ❌ | Fully Supported | VirtFusion is built and tested primarily on Debian based systems. This is our preferred choice of hypervisor. |
Debian 12 (Bookworm) | ✅ | ✅ | Fully Supported | VirtFusion is built and tested primarily on Debian based systems. This is our preferred choice of hypervisor. |
AlmaLinux 8 (RHEL 8) | ✅ | ❌ | Fully Supported | |
AlmaLinux 9 (RHEL 9) | ✅ | ❌ | Fully Supported | |
Rocky Linux 8 (RHEL 8) | ✅ | ❌ | Fully Supported | |
Rocky Linux 9 (RHEL 9) | ✅ | ❌ | Fully Supported | |
Ubuntu 22.04 | ✅ | ❌ | Fully Supported | We don't recommend Ubuntu unless it supports something that Debian does not (drivers etc...). "I don't know Debian" is not an excuse. |
Ubuntu 24.04 | ✅ | ❌ | Fully Supported | We don't recommend Ubuntu unless it supports something that Debian does not (drivers etc...). "I don't know Debian" is not an excuse. |
VirtFusion should be the only application installed on the server. Installing any other applications (i.e. Pterodactyl, cPanel etc...) at hypervisor level is not advised, and may invalidate any support contracts included with your VirtFusion license. It is permitted to install monitoring agents (Netdata, Hetrix Tools etc...).
VirtFusion does not include an uninstaller. If you make a mistake or decide not to use it, you must re-install the operating system to remove it.
Installation
Select your operating system.
- Debian 11
- Debian 12
- RHEL 8
- RHEL 9
- Ubuntu 22.04/24.04
Run the following commands as a root SSH user.
x86_64
apt install curl -y
curl https://install.virtfusion.net/install-hypervisor-kvm-debian-11.sh | sh -s -- --verbose
Run the following commands as a root SSH user.
x86_64
apt install curl -y
curl https://install.virtfusion.net/install-hypervisor-kvm-debian-12.sh | sh -s -- --verbose
AArch64
apt install curl -y
curl https://install.virtfusion.net/install-hypervisor-kvm-debian-12-arm64.sh | sh -s -- --verbose
Run the following commands as a root SSH user.
x86_64
dnf install curl -y
curl https://install.virtfusion.net/install-hypervisor-kvm-rhel-8.sh | sh -s -- --verbose
Run the following commands as a root SSH user.
x86_64
dnf install curl -y
curl https://install.virtfusion.net/install-hypervisor-kvm-rhel-9.sh | sh -s -- --verbose
Run the following commands as a root SSH user.
22.04
x86_64
apt install curl -y
curl https://install.virtfusion.net/install-hypervisor-kvm-ubuntu-22-04.sh | sh -s -- --verbose
24.04
x86_64
apt install curl -y
curl https://install.virtfusion.net/install-hypervisor-kvm-ubuntu-24-04.sh | sh -s -- --verbose
Once the installer has completed, you may add it to the control server.
Network setup
VirtFusion supports Direct
, Bridged
, Routed
, NAT
, Open vSwitch Bridged
, and Isolated
networking.
MacVTap is the default networking used by VirtFusion since v1.7.2 and usually does not require further network setup, however, if you need the ability to filter traffic (IP Spoofing) or firewalls, you should use a bridged or routed network.
If your intention is to use NAT networking, It's not mandatory to setup any of the below networks. * Continue the installation process here*
MacVTap (direct) networking
MacVTap (direct) is a device driver meant to simplify virtualized bridged networking. It replaces the combination of the tun/tap and bridge drivers with a single module based on the macvlan device driver.
This option has a limitation that you cannot filter traffic and you will lose IP Anti-Hijacking and firewall functionality.
VirtFusion will attempt to detect the primary interface naming, however, it may not be possible. If you have a problem
booting servers, it may mean your interface name is incorrect under the hypervisor settings (Network) in VirtFusion.
Find eth0
and replace it with correct name for your primary interface.
No further configuration required.
Standard bridge networking
- Debian 11
- Debian 12
- RHEL 8
- RHEL 9
- Ubuntu 22.04/24.04
On Debian a standard /etc/network/interfaces file will look similar to this.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address <IPADDRESS>
gateway <GATEWAY>
netmask <NETMASK>
dns-nameservers <DNS1> <DNS2>
This will need to be modified to the following.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
bridge_ports eth0
address <IPADDRESS>
gateway <GATEWAY>
netmask <NETMASK>
dns-nameservers <DNS1> <DNS2>
bridge_stp off
bridge_waitport 0
bridge_fd 0
Once the bridge is set up, networking will need to be restarted.
systemctl restart networking
On Debian a standard /etc/network/interfaces file will look similar to this.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address <IPADDRESS>
gateway <GATEWAY>
netmask <NETMASK>
dns-nameservers <DNS1> <DNS2>
This will need to be modified to the following.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
bridge_ports eth0
address <IPADDRESS>
gateway <GATEWAY>
netmask <NETMASK>
dns-nameservers <DNS1> <DNS2>
bridge_stp off
bridge_waitport 0
bridge_fd 0
Once the bridge is set up, networking will need to be restarted.
systemctl restart networking
On RHEL a standard /etc/sysconfig/network-scripts/ifcfg-eth0 file will look similar to this.
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="xxx.xxx.xxx.xxx"
GATEWAY="xxx.xxx.xxx.xxx"
NETMASK="255.255.255.0"
DNS1="8.8.8.8"
IPV6_PRIVACY="no"
Make a copy of the original file.
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/ifcfg-eth0
Create a new file for the bridge.
vi /etc/sysconfig/network-scripts/ifcfg-br0
And copy the networking parts from /etc/sysconfig/network-scripts/ifcfg-eth0 to /etc/sysconfig/network-scripts/ifcfg-br0.
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPADDR=xxx.xxx.xxx.xxx
NETMASK=255.255.255.0
GATEWAY=xxx.xxx.xxx.xxx
Next, remove the networking parts from /etc/sysconfig/network-scripts/ifcfg-eth0.
BRIDGE=br0
TYPE="Ethernet"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
DNS1="8.8.8.8"
IPV6_PRIVACY="no"
Once the bridge is set up, networking will need to be restarted.
systemctl restart NetworkManager.service
Configuration via NetworkManager
Get the main interface name:
nmcli con show --active
We will use eth0
and the main interface name.
nmcli con mod eth0 ipv4.gateway ""
nmcli con mod eth0 ipv4.address ""
nmcli conn add type bridge con-name br0 ifname br0
nmcli conn mod br0 ipv4.addresses 'xxx.xxx.xxx.xxx/24'
nmcli conn mod br0 ipv4.gateway 'xxx.xxx.xxx.xxx'
nmcli conn mod br0 ipv4.dns '8.8.8.8'
nmcli con mod br0 ipv4.method manual
nmcli conn add type ethernet slave-type bridge con-name bridge-br0 ifname eth0 master br0
Configuration via network-scripts
On RHEL a standard /etc/sysconfig/network-scripts/ifcfg-eth0 file will look similar to this.
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="xxx.xxx.xxx.xxx"
GATEWAY="xxx.xxx.xxx.xxx"
NETMASK="255.255.255.0"
DNS1="8.8.8.8"
IPV6_PRIVACY="no"
Make a copy of the original file.
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/ifcfg-eth0
Create a new file for the bridge.
vi /etc/sysconfig/network-scripts/ifcfg-br0
And copy the networking parts from /etc/sysconfig/network-scripts/ifcfg-eth0 to /etc/sysconfig/network-scripts/ifcfg-br0.
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPADDR=xxx.xxx.xxx.xxx
NETMASK=255.255.255.0
GATEWAY=xxx.xxx.xxx.xxx
Next, remove the networking parts from /etc/sysconfig/network-scripts/ifcfg-eth0.
BRIDGE=br0
TYPE="Ethernet"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
DNS1="8.8.8.8"
IPV6_PRIVACY="no"
Once the bridge is set up, networking will need to be restarted.
systemctl restart NetworkManager.service
On Ubuntu a standard NetPlan configuration file will look similar to this. Your configuration can be found
in /etc/netplan/
.
network:
version: 2
ethernets:
ens3:
addresses:
- <IPADDRESS>
gateway4: <GATEWAY>
nameservers:
addresses:
- <DNS1>
- <DNS2>
This will need to be modified to the following.
network:
version: 2
ethernets:
ens3:
dhcp4: false
bridges:
br0:
interfaces:
- ens3
addresses:
- <IPADDRESS>
gateway4: <GATEWAY>
nameservers:
addresses:
- <DNS1>
- <DNS2>
parameters:
stp: true
forward-delay: 0
dhcp4: false
Once the bridge is set up, networking will need to be tested and restarted.
netplan try
netplan apply
Libvirt routed networking
No modification of the main networking configuration is required.
Network configuration
Defining a Libvirt network is reasonably straightforward and should be low maintenance.
Create a file named network.xml with the following contents.
<network>
<name>br0</name>
<forward mode='route' dev="eth0"/>
<bridge name='br0' stp='on' delay='0'/>
<ip address='10.0.0.1' netmask='255.255.255.0'/>
<ip family="ipv6" address="2001:db8:aa::1" prefix="64"/>
</network>
- If you don't require IPv6 you may remove the
family="ipv6"
line. - Replace
eth0
with the device name of the main network. - Replace
10.0.0.1
with your own subnet that is to be assigned to the server and the corresponding netmask. - If you require IPv6, replace the
address
with your own subnet and the correspondingprefix
.
You may need to install dnsmasq if it's not installed already. You can do so by running apt -y install dnsmasq.
Define the network, set it to autostart and start it.
virsh net-define --file network.xml
virsh net-autostart br0
virsh net-start br0
Network setup is now complete. You should use the main IP of the hypervisor as the gateway for the defined subnet.
Open vSwitch Bridged
Open vSwitch supports multiple VLANS and trunking per virtual server out of the box.
This option has a limitation that you cannot filter traffic and you will lose IP Anti-Hijacking and firewall functionality.
There is currently limited documentation for this network type. See here
Notes
Although it's not advised, you may install a hypervisor directly on the control server. This allows for a single server setup but will restrict the hypervisor to a total of 99 active servers.