Virtual Machine Manager & QEMU/KVM: Internes vom Host isoliertes Netzwerk zwischen Gastsystemen herstellen

Aktuell stand ich vor der Frage, wie ich mit dem Virtual Machine Manager in Verbindung mit QEMU/ KVM ein internes isoliertes Netzwerk zwischen zwei VMs (Gastsystemen) herstellen kann. Ziel sollte es sein, dass ausschließlich die Gastsysteme untereinander in einem privaten Netzwerk kommunizieren können. Im Gegensatz zum sogenannten "Host-Only"-Netzwerk sollte eine Kommunikation zwischen Gastsystemen und Host als auch umgekehrt nicht möglich sein.

In diesem Beitrag zeige ich euch Schritt für Schritt, wir so ein internes isoliertes Netzwerk mit dem Virtual Machine Manager einrichtet.

Folgende Software wurde verwendet:
  • Ubuntu v19.10
  • Virtual Machine Manager (virt-manager) v2.2.1
  • QEMU/KVM (qemu-kvm) v4.0.0

Internes Netzwerk zwischen VMs einrichten

Um ein internes bzw. isoliertes Netzwerk zwischen zwei oder mehreren VMs einzurichten, sind folgende Schritte notwendig:

  1. Virtuelles Netzwerk vom Typ "Isoliert" erstellen
  2. Netzwerkquellen der VMs anpassen
  3. den VMs eine IP zuweisen
Hinweis Netzwerktypen - Kommunikation Host-Gast und Gast-Gast

Eine Übersicht über die verschiedenen Netzwerktypen und wie diese sich auf die Kommunikation zw. Host-Gast sowie Gast-Gast auswirken, findet ihr hier:
Netzwerktypen - Übersicht Zugriffsmöglichkeiten

Virtuelles Netzwerk vom Typ "Isoliert" erstellen

Als erstes startet den Virtual Machine Manager, so dass ihr die VM-Übersicht vor euch habt.

Virtual Machine Manager: VM-Übersicht

Als nächstes ist der Verbindungsdetails-Dialog zu öffnen. Dazu folgt ein Rechtsklick auf den Eintrag QEMU/KVM und im sich öffnenden Kontextmenü klickt ihr auf den Eintrag Details. Alternativ wählt über das Hauptmenü Bearbeiten - Verbindungsdetails.

Im Verbindungsdetails-Dialog wählt den Tab Virtuelles Netzwerk aus. Hier solltet ihr in der linken Übersicht den Eintrag default aufgelistet bekommen.

Virtual Machine Manager: Verbindungsdetails - Netzwerk-Verwaltung

Klickt auf das grüne +, so dass sich ein Dialog zum Erstellen eines neuen virtuellen Netzwerks öffnet. Wählt einen Namen für das Netzwerk aus und wählt den Modus Isolated. Klappt den Bereich IPv4 configuration auf und deaktiviert die Option. Anschließend erstellt das neue private Netzwerk per Klick auf Fertig.

Virtual Machine Manager: Isoliertes Netzwerk erstellen
Hinweis Warum wurde die IPv4-Option deaktiviert?

Mit aktivierter IPv4-Option hättet ihr ein "Host-Only"-Netzwerk erstellt. Eine Kommunikation zwischen Host und Gast sowie umgekehrt wäre damit möglich. In unserem Fall wollen wir das aber nicht.

Das neu erstellte Netzwerk sollte anschließend mit der entsprechenden Bezeichnung in der linken Übersicht zu finden sein.

Virtual Machine Manager: Isoliertes Netzwerk erstellen

Nachdem das Netzwerk erstellt wurde, sollte der Host über ein neues virtuelles Interface mit der Bezeichnung virbr1 verfügen. Um das zu überprüfen, führt in eurer Konsole folgenden Befehl aus:

ifconfig
[...]
virbr1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
ether 11:22:33:44:55:66  txqueuelen 1000  (Ethernet)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[...]
Terminal / Konsole

Erkennbar ist auch, dass für den Host keine IP vergeben wurde.

Netzwerkquellen der VMs anpassen

Nachdem das virtuelle Netzwerk erstellt wurde, sind im nächsten Schritt die entsprechenden VMs anzupassen. Dazu muss für jede VM, die Teil des isolierten Netzwerks sein soll, das Netzwerk in der VM-Konfiguration eingestellt werden.

Öffnet dazu das Konfigurationsfenster der jeweiligen VM und wählt im linken Bereich das Netzwerkgerät aus. Für dieses Netzwerkgerät passt ihr nun die Netzwerkquelle an. Wählt hier das von euch erstellte isolierte Netzwerk aus. Falls die VM kein bestehendes Netzwerkgerät hat, müsst ihr zuvor noch eines hinzufügen.

Virtual Machine Manager: Isoliertes Netzwerk für VM einstellen

IP-Zuweisung für die VMs

Nachdem die VMs nun das isolierte Netzwerk verwenden, können sie gestartet werden. Ihr werdet bemerken, dass den VMs keine IP zugwiesen wurde. Das liegt daran, dass wir die IPv4-Option beim Erstellen des Netzwerk deakitviert hatten. Aus diesem Grund müssen wir für die einzelnen VMs die IPs manuell vergeben.

Hinweis IPs manuell vs automatisch vergeben

Für meinen Anwendungsfall benötige ich nur zwei VMs, so dass das manuelle zuweisen der IPs schnell erledigt ist. Hat man mehrere VMs, die Teil des isolierten Netzwerks sein sollen, ist das ggf. nicht ganz so praktikabel. In dem Fall könntet ihr in einer der VMs einen DHCP-Dienst einrichten, so dass die anderen VMs im Netzwerk automatisch eine IP zugewiesen bekommen.

Die manuelle IP-Zuweisung habe ich per GUI des Netzwerk-Managers des Gastsystems vorgenommen. Dabei habe ich für VM1 die IP 192.168.22.11 und für VM2 die IP 192.168.22.22 vergeben. Ein Gateway ist nicht anzugeben.

Ubuntu: Netzwerk-Manager - IP-Adresse einstellen

Danach sollte eine Kommunikation zwischen den VMs (Gastsystemen) möglich sein. Zum Testen könnt ihr von einer VM eine andere per ping anpingen.

ping 192.168.22.11
PING 192.168.22.11 (192.168.22.11) 56(84) Bytes Daten.
64 Bytes von 192.168.22.11: icmp_seq=1 ttl=64 Zeit=0.531 ms
64 Bytes von 192.168.22.11: icmp_seq=2 ttl=64 Zeit=0.489 ms
64 Bytes von 192.168.22.11: icmp_seq=3 ttl=64 Zeit=0.565 ms
64 Bytes von 192.168.22.11: icmp_seq=4 ttl=64 Zeit=0.471 ms
^C
--- 192.168.22.11 ping statistics ---
4 Pakete übertragen, 4 empfangen, 0% Paketverlust, Zeit 3050ms
rtt min/avg/max/mdev = 0.471/0.514/0.565/0.036 ms
Terminal / Konsole

Fazit

Mithilfe des Virtual Machine Manager lässt sich für VMs, die per QEMU/KVM ausgeführt werden, einfach und schnell ein privates Netzwerk zwischen zwei oder mehreren Gastsystem einrichten.

Ich nutze ein vom Host isoliertes Netzwerk z.B. um eine isolierte Verbindung zwischen einer VM mit Kali Linux und einer unsicheren "Boot-to-Root / CTF / Vulnerable"-VM herzustellen.

Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).