Benutzer-Werkzeuge

Webseiten-Werkzeuge


kvm

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
kvm [2020-11-25 16:17:19] manfredkvm [2020-11-26 15:41:06] (aktuell) – [Beispiel-VM starten] manfred
Zeile 1: Zeile 1:
 +====== 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)//:\\
 +<del>''[root@server ~]# ip link add br0 type bridge''</del>\\
 +<del>''[root@server ~]# ip link set eth0 master br0''</del>\\
 +  [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: <del>''[root@gast ~]# route add -host ${IPADR_HOST} dev eth0''</del>
 +
 +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
 +