Inhaltsverzeichnis

KVM

KVM mit OpenPOWER

Bei Linux-basierten Betriebssystemen, und auch generell, gibt es eine Vielzahl an unterschiedlichsten Virtualisierungslösungen. KVM, also die Kernel-based Virtual Machine, gilt als performante Lösung und ist seit Kernel-Version 2.6.20 im Kernel integriert.

Im Grunde genommen, wird beim Aufruf von kvm das Kommando qemu-system-x86_64 ausgeführt.

Installation

Ubuntu 20.04.1 LTS

> apt install qemu-kvm

Beispiel-VM starten

In diesem Beispiel hat die VM eine Festplatte (disk01.qcow2, 10GB groß), 2GB RAM (-m 2048), zwei CPU-Kerne (-smp 2) sowie Touchscreen- und Maus-Unterstützung (-device usb-tablet).

auf dem Server einloggen, alle folgenden Kommandos funktionieren nur dann, wenn ein derartiger Login funktioniert:

> ssh -X server
[root@server ~]#

Laufwerke vorbereiten:

[root@server ~]# qemu-img create -f qcow2 disk01.qcow2 10G
Formatting 'disk01.qcow2', fmt=qcow2 size=10737418240 cluster_size=65536 lazy_refcounts=off refcount_bits=16

[root@server ~]# wget http://cdimage.ubuntu.com/ubuntu-legacy-server/releases/20.04.1/release/ubuntu-20.04.1-legacy-server-amd64.iso

Netzwerk vorbereiten FIXME (eine Bridge wird vermutlich nicht benötigt):
[root@server ~]# ip link add br0 type bridge
[root@server ~]# ip link set eth0 master br0

[root@server ~]# sysctl -w net.ipv4.ip_forward=1
[root@server ~]# vi /etc/sysctl.conf

VM starten:

[root@server ~]# kvm -hda disk01.qcow2 -cdrom ubuntu-20.04.1-legacy-server-amd64.iso -m 2048 -smp cpus=2,threads=2 -no-acpi -serial none -parallel none -usb -device usb-tablet -k de -boot cd -device e1000,netdev=net12001 -netdev tap,id=net12001,ifname=tap12001 -display vnc=0.0.0.0:12001 -name test12001
[root@server ~]# sleep 10

Wenn man die Ausgabe nicht per VNC ausgeben will, dann kann man statt der Option -display vnc=0.0.0.0:12001 auch -nographic verwenden, in dem Fall wird die Ausgabe auf eine System-Console umgeleitet. Wichtig ist hierbei auch, dass ein VNC-Port niemals mehrfach vergeben werden darf, denn dann startet die zweite VM, die den gleichen VNC-Port konfiguriert bekommen hat, nicht.

Es müssen noch zwei Routen gesetzt werden,

…diese auf dem Host-System:

[root@server ~]# ip route add ${IPADR_GAST} dev tap12001 scope link
[root@server ~]# ip route

…diese auf dem Gast-System (wenn Host- und Gast-System nicht im selben Sub-Net sind):

[root@gast ~]# ip route add ${IPADR_HOST} dev eth0
[root@gast ~]# ip route add default via ${IPADR_HOST} dev eth0
[root@gast ~]# ip route

…alte Syntax: [root@gast ~]# route add -host ${IPADR_HOST} dev eth0

oder

…diese auf dem Gast-System (wenn Host- und Gast-System im selben Sub-Net sind):

[root@gast ~]# ip route add default via ${IPADR_HOST} dev eth0
[root@gast ~]# ip route

iptables-NAT-Regeln setzen:

[root@server ~]# iptables -t nat -A PREROUTING -d ${IP_HOST} -j DNAT --to-destination ${IP_RUMPF}${IP_ENDUNG}
[root@server ~]# iptables -t nat -A POSTROUTING -s ${IP_RUMPF}${IP_ENDUNG} -j SNAT --to-source ${IP_HOST}

iptables-NAT-Regeln ausgeben:

[root@server ~]# iptables -L -n -t nat

iptables-NAT-Regeln löschen:

[root@server ~]# iptables -t nat -D PREROUTING -d ${IP_HOST} -j DNAT --to-destination ${IP_RUMPF}${IP_ENDUNG}
[root@server ~]# iptables -t nat -D POSTROUTING -s ${IP_RUMPF}${IP_ENDUNG} -j SNAT --to-source ${IP_HOST}

Um die Ausgabe dann sehen zu können, kann man beispielsweise eines der folgenden beiden Kommandos eingeben:

> vncviewer -AutoSelect=0 -FullColour server:12001
> gvncviewer server:12001
[root@server ~]# iptables -L -n -t nat

Zugriff

SSH

Wenn das Betriebssystem in der KVM-VM eine IP hat und dort ein SSHD läuft, dann kann man sich prima per SSH dort einloggen:

# ssh root@[IP des OS in der KVM-VM]

VNC

VNC-Client installieren:

# aptitude install xvnc4viewer

Mit dem VNC-Port kann man sich so verbinden (auf den Port muss man immer 5900 drauf rechnen):

# # vncviewer -AutoSelect=0 -FullColour 192.168.1.42:5901

Netzwerk-Konfiguration

/etc/network/interfaces

# loopback-IF
auto lo
iface lo inet loopback

# 1. NIC
auto eth0
iface eth0 inet manual
    bond-master bond0
    #bond-primary eth0 eth1

# 2. NIC
auto eth1
iface eth1 inet manual
    bond-master bond0
    #bond-primary eth0 eth1

# Bonding über beide NICs
auto bond0
iface bond0 inet manual
    slaves none
    bond_mode 1
    bond_miimon 100
    bond_updelay 200
    bond_downdelay 200
    pre-up /sbin/ifconfig eth0 up ; /sbin/ifconfig eth1 up
    post-up /bin/sleep 5

# Brücke auf dem Bond-IF
# damit KVM seine VMs daran hängen kann
auto br0
iface br0 inet static
    address 192.168.1.42
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    bridge_ports bond0
    post-up /bin/sleep 10

/home/bin/kvm-ifup-net1

#!/bin/sh

BRUECKE="br0"

/sbin/ifconfig $1 0.0.0.0 promisc up
#/sbin/ifconfig $1 mtu 1500
/usr/sbin/brctl addif ${BRUECKE} $1
sleep 2

/home/bin/kvm-ifdown-net1

#!/bin/sh

BRUECKE="br0"

/usr/sbin/brctl delif ${BRUECKE} $1
#/sbin/ifconfig $1 mtu 1500
/sbin/ifconfig $1 0.0.0.0 promisc down
sleep 2