Ubuntu Homeserver-Virtualisierung mit KVM und QEMU

Seit mehreren Jahren betreibe ich einen Homeserver auf Ubuntu Server Basis, ähnlich wie im Artikel Selbstgebauter Homeserver/NAS mit Ubuntu Server beschrieben. Im Gegensatz zum Artikel befinden sich die Daten jedoch auf einem verschlüsselten Laufwerk. Dies bedeutet dass ich beim Booten des Rechners immer das Passwort zum entschlüsseln der Laufwerke über eine am Homeserver angeschlossene Tastatur eingeben muss. Es hat außerdem den Nachteil dass bei einem unbeabsichtigten Neustart, z.B. aufgrund einer Stromschwankung, der Homeserver solange nicht erreichbar ist bis das Passwort eingegeben wurde. Wenn ich mich in diesem Fall außer Haus befinde kann ich von unterwegs nicht auf meine Daten zugreifen.

Aus diesem Grund habe ich mich als Wochenendprojekt mit der Virtualisierung eines Homeservers beschäftigt. Hierbei wurde ein unverschlüsseltes Hostsystem eingerichtet, was auch nach einem Stromausfall wieder vollständig starten kann. Darauf wurde eine Virtuelle Maschine erstellt, deren virtuelles Laufwerk bei der Installation verschlüsselt wurde. Über eine virtuelle Maschinenverwaltung kann man dann von einem beliebigen Rechner aus das Festplattenpasswort für den Homeserver während des Bootprozesses eingeben.

Das Setup hat außerdem den Vorteil dass nach Bedarf einfach zusätzliche virtuelle Computer erstellt werden können, um z.B. Software zu testen oder ein anderes Betriebssystem zu nutzen.

Zur Virtualisierung habe ich KVM verwendet und zur Verwaltung den virt-manager.

Ich gehe davon aus dass auf dem Rechner bereits eine Ubuntu Serverinstallation läuft.

1 – Testen der Hardwareunterstützung

Um KVM nutzen zu können muss der Prozessor Hardwareunterstützung für Virtualisierung bieten. Um zu testen ob die genutzte CPU geeignet ist kann man im terminal den Befehl

cat /proc/cpuinfo

eingeben und unter flags nachschauen ob das Flag vmx bei Intel-CPUs oder das Flag svn bei AMD CPUs vorhanden ist. Wenn dies der Fall ist kann die CPU genutzt werden.

Einen weiteren netten weg zum überprüfen der CPU bietet Ubuntu mit dem Programm cpu-checker.

Nachdem dieses aus den offiziellen Paketquellen installiert wurde erhält man beim Aufruf von kvm-ok die Info ob der verwendete Prozessor Harwarevirtualisierung unterstützt

$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

2 – Einrichtung des Hostsystems

Auf einem geeigneten System kann jetzt KVM und der Emulator Qemu installiert werden und root der Gruppe libvirtd hinzugefügt werden

$ sudo apt install qemu-kvm libvirt-bin virtinst
$ sudo adduser root libvirtd

Standardmäßig würden sich die virtuellen Maschinen hinter einem NAT befinden. Damit dies nicht der Fall ist muss das Netzwerkinterface auf dem Host als Netzwerkbrücke eingerichtet werden. Außerdem erhält das Interface gleich noch eine statische IPv4 Adresse.Dies geschiet in der Datei /etc/network/interfaces.

Standardmäßig findet sich hier ein Eintrag wie

# The primary network interface
auto eth0
iface eth0 inet dhcp

Hier muss der Name des Interfaces eth0 abgeändert werden in br0 und am Ende ein bridge_ports eth0 eingefügt, um die Brücke mit dem Interface eth0 zu verbinden. Außerdem wird die statische IP konfiguriert.

auto br0
iface br0 inet static
address 192.168.178.100
network 192.168.178.0
netmask 255.255.255.0
gateway 192.168.178.1

Damit alle Änderungen übernommen werden sollte der Rechner einmal neu gestartet werden.

3 – Einrichten des Virtual Machine Manager

Der Virtual Machine Manager ist ein grafisches Werkzeug um virtuelle Maschinen einzurichten und um auf diese zugreifen zu können. Dabei kann man hierüber auf das Bios der virtuellen Maschine zugreifen, sowie den kompletten Bootprozess beobachten und ggf eingreifen, genau wie mit einem angeschlossenen Hardware Monitor und Tastatur.

Der Virtual Machine Manager muss dabei nicht auf dem Hostsystem installiert werden, sondern kann auf einem beliebigen Rechner eingerichtet werden, z.B. dem eigenen Laptop. Über SSH kann man dann auch von unterwegs auf den VM Host bzw. die clients zugreifen, sofern man den eigenen Router mittels DynDNS und Portweiterleitung entsprechend konfiguriert hat.

Installiert wird das Programm mittels

$ sudo apt install virt-manager

Damit der virt-manager per SSH auf den Host Rechner zugreifen kann wird noch ein Key generiert und dessen öffentlicher Teil auf den VM Host übertragen. Einen ausführlicheren Artikel zu Authentifizierung mittels Public-/Private Key habe ich unter SSH Login mit Public-/Private-Key Authentifizierung veröffentlicht.

$ ssh-keygen -b 4096
$ ssh-copy-id -i .ssh/id_rsa.pub USERRNAME@192.168.178.100

Jetzt kann der Virtual Machine Manager gestartet werden und über Datei -> Verbindung hinzufügen eine Verbindung zum VM Host aufgebaut werden, indem die Daten aus der /etc/network/interfaces eingegeben werden, die vorhin festgelegt wurden.

virtmanager-2

4 – Installation des virtuellen Homeservers

Nachdem die Verbindung aufgebaut wurde kann über Datei -> neue virtuelle Maschine die VM für den eigentlichen Homeserver eingerichtet werden.

Die Frage wie das Betriebssystem installiert werden soll beantworten wir mit der Frage „lokales Installationsmedium (ISO-Abbild oder CD Rom)

neue-vm-1

Zur Installation wird also ein ISO Image für das zu verwendende Betriebssystem benötigt, welches sich bereits auf dem Hostsystem befinden muss. Wo sich dieses befindet wird im nächsten Schritt angegeben wenn man ISO-Abbild benutzen auswählt und auf Durchsuchen klickt.

neue-vm-2

Nun können verschiedene Speicherpools angelegt werden, also Speicherorte an denen z.B. ISO Files zur Installation, oder Festplattenimages der virtuellen Maschinen selbst, angelegt werden.
Einklick auf das Plus links unten öffnet den estsprechenden Dialog. Der Name kann beliebig vergeben werden, der Zielpfad ist der absolute Pfad zum Ort an dem die das ISO File für die Installation liegt also z.B. /usr/share/images o.ä.

Anschließend kann im rechten Fenster das gewünschte Image ausgewählt werden.

neue-vm-3

Im nächsten Schritt teilt man der virtuellen Maschine den Hauptspeicher und CPU Kerne zu, welche man dieser zur Verfügung stellen möchte. Die Werte können auch nachträglich noch, bei ausgeschalteter virtueller Maschine, geändert werden.

neue-vm-4

In Schritt Nummer 4 von 5 wird das Disk Image für die VM erstellt. Also die virtuelle Festplatte auf der der Homeserver installiert werden soll.  Dieser Punkt muss gut überlegt werden, da die Größe des Disk Images im Nachhinein nur noch mit relativ großem Aufwand möglich ist.

neue-vm-5

Wählt man hier den Standardmäßig ausgewählten Punkt1 „Create a disk image for the virtual machine“ aus, so wird ein image der gewünschten Größe im Format .qcow2 im Standardpool /var/lin/libvirt/images erstellt.

Möchte man das Dateiformat des Images ändern oder den Speicherort selbst festlegen, so ist dies über Punkt 2 „select or create custom storage“ analog zur Erstellung des DVD Installations Images möglich.

Besondere Bedeutung kommt nochmals dem letzten Punkt zu. In Schritt 5 von 5 muss der untere Bereich „Network selection“ ausgeklappt werden. Damit die VM nicht hinter ein NAT gesteckt wird muss hier der Punkt „Namen des gemeinsam verwendeten Geräts angeben“ ausgewählt werden und der Name der Netzwerkbrücke br0 angegeben werden.

neue-vm-6

Nach einem Klick auf Fertig wird die Maschine erstellt und direkt gestartet. Nach einem kurzen Moment sollte einen der bekannte Installationsscreen von Ubuntu empfangen

neue-vm-install

Ab diesem Punkt lässt sich die Installation wie von einer Hardwaremaschine gewohnt durchführen. Die Installation kann beispielsweise wie in meiner Artikelreihe „Selbstgebauter Homeserver/NAS mit Ubuntu Server“ vorgenommen werden. Der installierte Rechner ist nach der Installation wie ein richtiger Computer mit eigener Hardware über das Netzwerk erreichbar und nutzbar.

Wenn im Virtual Machine Manager oben links das Bildschirmsymbol ausgewählt wird kann man darüber wie mit einem direkt an einen Computer angeschlossenen Bildschirm auf die Maschine  zugreifen. Wenn das i-Symbol daneben ausgewählt wird kann man die Einstellungen der virtuellen Maschine überarbeiten bzw. detaillierter einstellen.

neue-vm-config

Ein weiterer Vorteil der virtualisierung ist dass Snapshots der VMs erstellt werden können, also der Zustand des Rechners zu einem bestimmten Zeitpunkt „eingefroren“ werden kann. Hat man sich z.B. mit einer Konfiguration vertan so kann der Computer einfach wieder auf einen früheren Zeitpunkt zurückgesetzt werden.

Ein weiterer Vorteil ist dass man, genügend Speicherplatz vorausgesetzt, das Image des virtuellen Homeservers sichern kann und im Falle eines Defekts der Hardware einfach auf einen neuen Rechner umziehen kann. Nach dem booten des der virtuellen Maschine auf der neuen Hardware hat man direkt wieder einen funktionierenden Homeserver, ohne die aufwendige Installation und Konfiguration des Systems erneut vornehmen zu müssen.



88x31_CC_by
Dieser Text ist lizensiert unter einer Creative Commons Namensnennung 4.0 International Lizenz.
Titelbild „netzwerk-kabel-ethernet-computer“ von Pixabay steht unter Creative Commons CC0

 

4 Kommentare

  • Torsten

    Hi,

    eine Frage: Wie soll ich meine HDs wenn ich ein KVM und QEMU UbuntuServer aufsetzte am besten einrichten ?

    1 x SSD 64GB u. 2 x Sata3 3TB HDs. Auf die SSD soll das Ubuntu Grundsystem etc. Die 2 3TB HDs sollen dann für die virtuellen Maschinen gedacht sein.

  • Matthias

    Ist dieser sogenannte Nachteil, dass die Daten nicht automatisch entschlüsselt werden, nicht eher ein Feature? Es soll doch niemand ohne deine Passphrase auf deine Daten zugreifen können. (Falls die Daten nicht unverschlüsselt auf die Datenträger landen sollen, würde sonst auch eine Key-Datei reichen)

    Ich mag und nutze auch KVM und den virt-manager auf meinem Ubuntu Server. Aber eher für Windows Maschinen. Für Linux Maschinen lohnt sich der Aufwand nicht wirklich, weil die Ressourcenverschwendung meistens zu viel ist. Unter Ubuntu nutze ich LXD Container. Sehr ressourcensparend und super schnell. Auch für Multimedia, wie z.B. TV-Aufnahmen geeignet. Schau dir das mal bei Gelegenheit an, die Einrichtung ist sehr einfach und Container kann man innerhalb Sekunden erstellen 🙂

    • Niko

      Hallo Matthias,
      natürlich sollen die Datenträger nicht automatisch entschlüsselt werden, sonst wäre der Sinn der Verschlüsselung tatsächlich weitestgehend dahin. Das ist in diesem Setup aber auch nicht der Fall. Die Hardwaremaschine ist unverschlüsselt. Die virtuelle Maschine, die alle privaten Daten enthält, ist verschlüsselt.
      Dadurch lässt sich die Hardwaremaschine remote neustarten und anschließend kann über den virt-manager die virtuelle Maschine gestartet werden und das Passwort zur Festplattenentschlüsselung während des Bootprozesses eingegeben werden.
      Die Geschichte mit den LXC Containern ist definitiv spannend und steht bei mir auch noch auf dem Programm. Die c’t hat mein Homeserverproblem ebenfalls mit LXC containern gelöst. Das werde ich mir bei Gelegenheit auch noch anschauen. (Paywall) http://www.heise.de/ct/ausgabe/2016-19-Heim-Server-verschluesseln-ohne-sich-bei-Stromausfaellen-selbst-auszusperren-3305819.html

  • Ich bin auch gerade dabei meinen Homeserver umzustrukturieren. Dabei wollte ich dann auch auf virtuelle Maschinen setzen. Da kommt mir dein Artikel gerade recht. Der Virtuelle Maschinen-Manager steht jetzt auch auf meiner Liste. Danke für den Hinweis!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.