KVM unter Ubuntu 20.04 installieren und Bridged networking konfigurieren

KVM ist eine Virtualisierungstechnik für Linux, welche die Hardwarevirtualisierung aktueller Intel und AMD Prozessoren nutzt und Teil des Linux-Kernels ist. Ich verwende KVM für meine virtuellen Maschinen.

In diesem Beitrag beschriebe ich wie KVM unter Ubuntu Linux 20.04 installiert sowie Bridged networking konfiguriert werden kann. Mit Bridged networking kann jeder virtuellen Maschine ein eigenes virtuellen Netzwerk Interface zugewiesen werden, welches die VM nach außen als eigenen Host darstellt.

KVM Unterstützung prüfen

Mit nachfolgendem Befehl kann geprüft werden, ob Hardwarevirtualisierung von der verwendeten CPU unterstützt wird. Falls eine Zahl größer 0 zurückgegeben wird ist dies der Fall.

$ egrep -c '(vmx|svm)' /proc/cpuinfo
8

Installieren

Zuerst müssen die Pakete qemu-kvm, libvirt-daemon-system, libvirt-clients sowie bridge-utils installiert werden.

$ sudo apt install virtinst qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

Installation überprüfen

Bevor neue Virtuellen Maschinen erstellt werden sollte die KVM Installation noch mit nachfolgendem Befehl überprüft werden.

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

Nun kann KVM verwendet werden.

Bridged networking Konfigurieren

Jetzt sollte noch Bridget networking konfiguriert werden. Es ermöglicht, dass jede Virtuelle Maschine ein eigenes virtuelles Netzwerk Interface nach außen bekommen kann und somit auch eine eigene IP Adresse. Um es zu Konfigurieren muss die Datei /etc/netplan/00-installer-config.yaml bearbeitet werden.

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp6s0:
      dhcp4: true
  version: 2

Im Beispiel soll enp6s0 als für Bridged networking genutzt werden. Daher muss die Konfiguration durch nachfolgendefolgende ersetzt werden.

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp6s0:
      dhcp4: no
      dhcp6: no  
  version: 2
  bridges:
    br0:
      interfaces: [enp6s0]
      dhcp4: true
  • Es wird DHCP auf enp6s0 deaktiviert (Zeile 4-5).
  • Zusätzlich wird die Definition der Bridge br0 hinzugefügt (Zeile 8-11)
    • Zeile 9 definiert den Namen der Bridge
    • Zeile 10 definiert das zu verwendende interface
    • Zeile 11 ist die bisherige Konfiguration des Interfaces (im Beispiel dhcp)

Nach dem anpassen der Konfiguration sollte sie geladen werden.

$ sudo netplan apply

Anschließend können wir den Status von br0 überprüfen.

$ sudo networkctl status br0
● 5: br0                                                                    
               Link File: /usr/lib/systemd/network/99-default.link          
            Network File: /run/systemd/network/10-netplan-br0.network       
                    Type: bridge                                            
                   State: routable (configured)   
                  Driver: bridge                                            
              HW Address: xx:xx:xx:xx:xx:xx (XXXX) 
                     MTU: 1500 (min: 68, max: 65535)                        
           Forward Delay: 15s                                               
              Hello Time: 2s                                                
                 Max Age: 20s                                               
             Ageing Time: 5min                                              
                Priority: 32768                                             
                     STP: no                                                
  Multicast IGMP Version: 2                                                 
    Queue Length (Tx/Rx): 1/1                                               
                 Address: xxx.xxx.xxx.xxx (DHCP4)                             
                          xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx             
                          xxxx::xxxx:xxxx:xxxx:xxxx                         
                 Gateway: xxx.xxx.xxx.xxx (XXXX)             
                          xxxx::xxxx:xxxx:xxxx:xxxx (XXXX)
                     DNS: xxx.xxx.xxx.xxx                                     
                          xxx.xxx.xxx.xxx                                      
                          xxxx::xxxx:xxxx:xxxx:xxxx                         
          Search Domains: XXXXX                                      

Jun 15 19:49:54 xxx systemd-udevd[1114]: br0: Could not generate persistent MAC>
Jun 15 19:49:54 xxx systemd-networkd[1790]: br0: netdev ready
Jun 15 19:49:54 xxx systemd-networkd[1790]: br0: IPv6 successfully enabled
Jun 15 19:49:54 xxx systemd-networkd[1790]: br0: Link UP
Jun 15 19:49:54 xxx systemd-networkd[1790]: br0: Gained carrier
Jun 15 19:49:54 xxx systemd-networkd[1790]: br0: Lost carrier
Jun 15 19:49:55 xxx systemd-networkd[1790]: br0: Gained IPv6LL
Jun 15 19:49:57 xxx systemd-networkd[1790]: br0: Gained carrier
Jun 15 19:50:01 xxx systemd-networkd[1790]: br0: DHCPv4 address xxx.xxx.xxx.xxx/2>

Nachdem die Konfiguration angepasst wurde sollte der Server einmal neu gestartet werden.

$ sudo reboot

Zusätzlich zu br0 wurde das Interface virbr0 erstellt, welches den Virtuellen Maschinen Netzwerkzugriff über NAT erlaubt. Es hat standardmäßig die IP-Adresse 192.168.122.1.

2 Gedanken zu „KVM unter Ubuntu 20.04 installieren und Bridged networking konfigurieren“

  1. Die Datei, die man bei einer abgeschlossenen Ubuntu-20-Standardinstallation unter /etc/netplan/ findet, heißt 01-network-manager-all.yaml .

  2. Hallo Carsten,

    wie bekomme ich denn hier eine Bridge für meine KVM eingebaut?

    # This is the network config written by ’subiquity‘
    network:
    bonds:
    bond0:
    dhcp4: true
    interfaces:
    – enp2s0
    – enp3s0
    parameters:
    mode: balance-rr
    ethernets:
    enp2s0: {}
    enp3s0: {}
    version: 2

    Alles, was ich bislang hab auftreiben können, führt bei ńetplan apply‘ zu dem Ergebnis -> Invalid YAML: inconsistent indentation:iface br0 inet static

    Freue mich auf Deine Rückmeldung.

    VG, Marcus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert