====== KVM ======
[[https://www.thomas-krenn.com/de/wiki/KVM_mit_OpenPOWER|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 ([[https://www.qemu.org/docs/master/system/usb.html|-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
* [[https://www.linux-kvm.org/page/Networking]]
* [[https://help.ubuntu.com/community/KVM/Networking]]
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.//
* [[https://www.cyberciti.biz/faq/howto-linux-configuring-default-route-with-ipcommand/]]
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