Thumbnail

Lange hat es gedauert, und mehrere Neuinstallationen und verzweifelte Stunden gingen ins Land, bis alle Stolperfallen besiegt worden sind und ich die Installation reibungslos hinter mir gebracht habe.

Hier werde ich erläutern, wie ich die Installation bewältigt habe und auf was man achten sollte, wenn der Hosting Provider ein sehr restriktives Netzwerk hat (in meinem Falle das Netz von Hetzner).

Zugrunde liegt ein Server mit Ubuntu 18.04 und der Hosting Provider hat uns zwei Netze zugewiesen (CIDR Notation beachten):
– Eine öffentliche IPv4 (78.46.96.231/32)
– Einen öffentlichen IPv4 block (176.9.197.224/28)
– Einen öffentlichen IPv6 block (2a01:4f8:120:822e::/64)
– Der Server ist Statisch auf folgende Adressen gebunden 78.46.96.231 und 2a01:4f8:120:822e::2.
– Die Netzwerkkarte des Servers lautet enp2s0.
– VMs teilen sich enp2s0, die in einer Brücke namens br0 versklavt ist.

Im Anschluss findest du noch hilfreiche Links und Hintergrundinformationen. Diese Anleitung schneidet nur einen gewissen Teil an.

Vorbereitung des Netzwerkes

Identifiziere die MAC-Adresse des Ethernet-Geräts für später. Diese muss dann in der Netzwerkkonfiguration angepasst werden.

# ip address show dev eth0 | awk '$1=="link/ether" {print $2}'
d4:3d:7e:f8:f2:81

Aus Performance und Sicherheitsgründen, deaktiviere die „netfilter“ für Brücken. Erstelle /etc/sysctl.d/bridge.conf mit folgendem Inhalt:

net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
net.bridge.bridge-nf-call-arptables=0

Erstelle /etc/udev/rules.d/99-bridge.rules mit folgendem Inhalt. Diese udev-Regel wendet die obigen sysctl-Einstellungen an, wenn das Brückenmodul geladen wird. (Wenn der Linux-Kernel 3.18 oder höher verwendet wird, ändern die folgenden Einstellungen KERNEL=="bridge" zu KERNEL=="br_netfilter".)

ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/sbin/sysctl -p /etc/sysctl.d/bridge.conf"

Installation der Netzwerkbrücke

Als erstes installieren wir die bridge-utils.

# apt-get install bridge-utils

Danach passen wir die Netzwerkkonfiguration an, auf dem Ubuntu 18.04 verwende ich Netplan und die Konfiguration dazu sieht folgendermaßen aus:

# nano /etc/netplan/01-netcfg.yaml

Info: Aufgrund der Netzwerkstruktur meines Providers musste ich die MAC Adresse bei der Brücke angeben, das wusste ich vorher nicht und das hat dazu geführt, dass das Netzwerk nicht erreichbar war.

Ich darf gar nicht daran denken, wie viel Zeit mich das gekostet hat… :3
### Network bridge configuration
network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
       dhcp4: false
       dhcp6: false
       optional: true
  bridges:
    br0:
      macaddress: d4:3d:7e:f8:f2:81
      interfaces: [enp2s0]
      dhcp4: false
      dhcp6: false
      addresses:
        - 78.46.96.231/32
        - 2a01:4f8:120:822e::2/128
      routes:
        - on-link: true
          to: 0.0.0.0/0
          via: 78.46.96.225
      gateway6: fe80::1
      nameservers:
        addresses:
          - 213.133.99.99
          - 213.133.100.100
          - 213.133.98.98
          - 2a01:4f8:0:1::add:9898
          - 2a01:4f8:0:1::add:1010
          - 2a01:4f8:0:1::add:9999
      parameters:
        stp: false
        forward-delay: 0

Jetzt generieren wir die Netzwerkkarten und starten das System neu:

Info: Ein netplan try geht meines Wissens wegen der Brücke nicht.

# netplan generate
# reboot

Installation von Libvirt

# sudo apt install qemu-kvm libvirt-bin
# sudo adduser $USER libvirt

Wenn der gewählte Benutzer der aktuelle Benutzer ist, müssen Sie sich abmelden und wieder anmelden, damit die neue Gruppenzugehörigkeit wirksam wird.

Einrichtung der IPv4 & IPv6 Subnetze

Dazu wird jetzt ein neues Netzwerk in einer neuen Datei namens net1.xml (diese kann nachher gelöscht werden)

<network>
  <name>net1</name>
  <forward mode='route'/>
  <bridge name='virbr1' stp='on' delay='0'/>
  <mac address='d4:3d:7e:f8:f2:81'/>
  <ip address='176.9.197.225' netmask='255.255.255.240'>
    <dhcp>
      <range start='176.9.197.226' end='176.9.197.238'/>
    </dhcp>
  </ip>
  <ip family='ipv6' address='2a01:4f8:120:822e:b::2' prefix='64'>
    <dhcp>
      <range start='2a01:4f8:120:822e:b::1000' end='2a01:4f8:120:822e:b::1fff'/>
    </dhcp>
  </ip>
</network>

Dann definieren, starten und setzen die Netzwerkkarte in den Autostart.

# virsh net-define net1.xml
# virsh net-start net1
# virsh net-autostart net1

Konfiguration der Virtuellen Maschinen

Wie mann das Netzwerk dann Produktiv verwendet, könnt Ihr hier nachlesen.

Troubleshooting

Zu guter Letzt, gebe ich euch noch einige Fehlerbehebungen mit.

  • IPv6 muss im Netplan als /128 eingetragen sein, sonst funktioniert IPv6 in den Libvirt Netzwerken nicht.
  • MAC Adressen müssen bei Hetzner in den Netzwerkkarten hinterlegt sein, sonst ist das Netzwerk/Subnetz nicht erreichbar.
  • Aus dem Min/Max Pool ist die erste IP Adresse für den DHCP/Gateway von Libvirt vorgesehen.

Quellen:

https://jamielinux.com/docs/libvirt-networking-handbook/bridged-network.html
https://help.ubuntu.com/lts/serverguide/libvirt.html
https://libvirt.org/formatnetwork.html

1elf

Entwickelt Software, mag Anime Serien und liest ab und an Manga, manchmal auch am Zeichnen 😍🙈✌

Kommentar schreiben