Hetzner - DokuWiki

KVM mit libvirt

Inhaltsverzeichnis

Ausgangsituation für Virtualisierung mit KVM und libvirt

Auf einem Host mit libvirt-Unterstützung (also Debian, CentOS, Ubuntu, etc.) sollen virtuelle Maschinen mit KVM betrieben werden. Die VMs sollen direkt (ohne NAT/masquerading bzw. port forwarding) aus dem Internet erreicht werden. Zudem soll die Einrichtung mit Bordmitteln erfolgen, d.h. über libvirt (fast) ohne eigene Skripte.

Aufgrund der Netzkonfiguration bei Hetzner (feste Bindung zwischen MAC-Adresse und IP-Adresse), ist ein Standard-Bridged-Setup von Haus aus nicht möglich. Über den Hetzner Robot können jedoch für einzelne Zusatz-IPs separate (virtuelle) MAC-Adressen beantragen werden, die bei einem Bridge-Setup dann für die Netzwerkkarten der VMs konfiguriert werden müssen. Alternativ bietet sich ein 'routed'-Setup an, da sich dieses später leicht auf zusätzliche Subnetze erweitern lässt.

In dieser Konfiguration gehen keine IPs 'verloren'. Die Host-Maschine benötigt eine IP (falls sie mit IPv4 erreichbar sein soll) und jede der VMs benötigt mindestens eine IP.

Falls ein Subnetz eingerichtet wird, gehen je nach Konfiguration entsprechend IPs für Netzadresse, Gateway und Broadcast verloren.

Zusammenfassung

  • Für die Zusatz-IPs wird mit libvirt eine 'routed' Bridge mit der IP-Adresse des Hosts angelegt.
  • Auf dem Host werden spezielle Routen konfiguriert, so dass die IP-Adressen der VMs über die 'routed' Bridge angesprochen werden.

Pro Subnet wird ebenso eine virtuelles Netz im routed Modus angelegt.

Vorbereitung des Host-Systems

Die IP-Adresse des Hosts wird eingerichtet wie in Netzkonfiguration CentOS oder Netzkonfiguration Debian beschrieben (sollte ohnehin geschehen - unabhängig von der Virtualisierung!).

Achtung: Die zusätzlichen IP-Adressen werden nicht auf dem Host eingerichtet!

Anschließend werden die Bridges wie unter Netzkonfiguration für Xen und KVM mit libvirt beschrieben eingerichtet.

Aktivieren des IP Forwarding (optional)

Normalerweise übernimmt libvirt bereits das Aktivieren des IP-Forwarding. Um ganz sicher zu gehen, kann man dies auch fest konfigurieren. Dazu wird bei CentOS/Fedora die Datei /etc/sysconfig/network um folgenden Eintrag ergänzt:

FORWARD_IPV4=true

Bei Debian/Ubuntu wird das Forwarding in /etc/sysctl.conf aktiviert:

net.ipv4.ip_forward=1

Erstellung eines Speicherpools

Damit später der zur Verfügung stehende Speicherplatz (z.B. aus einer LVM Volume Group) bequem (z.B. über virt-manager) verwaltet werden, legt man nun noch einen entsprechenden Pool an.

Hat man beispielsweise bereits eine Volume Group mit dem Namen vm-storage angelegt, kann folgendes Template verwendet werden.

<pool type="logical">
  <name>MeinVmSpeicher</name>
    <target>
      <path>/dev/vm-storage</path>
     </target>
 </pool>

Oder eine ganze Festplatte / Partition:

 <pool type="disk">
   <name>sdb</name>
   <source>
     <device path='/dev/sdb'/>
   </source>
   <target>
     <path>/dev</path>
   </target>
 </pool>

oder auch ganz normal nur ein (gemountetes) Verzeichnis:

 <pool type="dir">
   <name>virtimages</name>
     <target>
       <path>/var/lib/libvirt/images</path>
     </target>
   </pool>

Nachdem man das XML-File (z.B. MeinVmSpeicher.xml) erstellt hat, muß der Pool nun libvirt bekannt gemacht werden.

virsh pool-define MeinVmSpeicher

Anschließen "starten" des Pools und als automatisch zu starten definieren (hier muß nun der als name definierte Bezeichner verwendet werden).

virsh pool-start MeinVmSpeicher
virsh pool-autostart MeinVmSpeicher

Installation der VMs

Für jede VM, die installiert wird, muss eine neue Route erstellt werden (wie im obigen Abschnitt erklärt). Wenn die VMs installiert werden, sollte als Netzwerk "hetzner-netz" ausgewählt werden.

Für die initiale Installation einer Fedora oder CentOS VM muss von der eigentlich korrekten IP-Konfiguration abgewichen werden, da ansonsten der Installer falsche Routen erzeugt. Daher also die manuelle IP-Konfiguration wählen, die von Hetzner erhaltene zusätzliche IP eingeben, als Netzmaske z.B. "255.255.255.248" (die Haupt-IP muß außerhalb liegen) und als Gateway die Host IP verwenden.

Nach der Installation der VM manuell die korrekte IP-Konfiguration in der VM einstellen.

Autostart der VMs

Damit die VMs beim Booten des Servers automatisch gestartet werden, müssen diese entweder über den virt-manager oder die virsh entsprechend markiert werden.

virsh autostart <domainname>

libvirt Netzkonfiguration der VMs

Normalerweise erzeugen virt-install / virt-manager schon (fast) die korrekten XML-Templates. Diese liegen in der Regel unter /etc/libvirt/qemu/. Für die Zusatz-IPs müssen diese angepasst werden, da der Brouter nicht von libvirt verwaltet wird und deswegen das Interface händisch angegeben werden muß:

<interface type='bridge'>
   <mac address='54:52:00:XX:YY:ZZ'/>
   <source bridge='br0'/>
   <model type='virtio'/>
</interface>

für Subnetz muß in der Regel nichts verändert werden:

  <interface type='network'>
    <mac address='54:52:00:XX:YY:ZZ'/>
    <source network='hetzner-subnetz1'/>
  <model type='virtio'/>
</interface>

Hat man bestehende VMs, muß man gegebenenfalls den Namen des source network anpassen, damit die virtuelle Netzwerkkarte mit der korrekten 'routed' Bridge verbunden wird.

Für die beste Performance sollte als Model virtio verwendet werden. Andere zulässige NIC-Modelle sind: ne2k_isa i82551 i82557b i82559er ne2k_pci pcnet rtl8139 e1000

Danksagung

Vielen Dank für die zahlreichen Beiträge im Hetzner-Forum, die sowohl dem initialen Autor dieser Seite (Benutzer:Martinj) als auch weiteren Beitragenden (z.B. Benutzer:Felix S) sehr geholfen haben.



© 2018. Hetzner Online GmbH. Alle Rechte vorbehalten.