====== 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