Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Einrichten einer gerouteten IPv4 und IPv6 in Ubuntu für die Virtualisierung mit QEMU

profile picture
Author
VinkPa
Published
2025-10-31
Time to read
7 minutes reading time

Einführung

In diesem Tutorial lernst du, wie du ein geroutetes Netzwerk-Setup einrichtest, bei dem der Host und eine virtuelle Maschine (Gast) in zwei verschiedenen Subnetzen liegen. Am Ende sollte die Konfiguration in etwa so aussehen:

HOST:
  • behält seine Haupt-IPv4-Adresse
  • bekommt IPv6::2/64
GAST:
  • kriegt die zusätzliche einzelne IPv4-Adresse im Routing-Modus
  • kriegt IPv6::3/64

Um das zu erreichen, wird eine virtuelle Bridge eingerichtet, die die Hauptschnittstelle übernimmt (NICHT mit enp7s0 verbunden).

Informationen zu einem bridged Setup (Host und Gast in unterschiedlichen Subnetzen), gibt es in diesem Tutorial.

Voraussetzungen

  • Der Server hat eine physische Uplink-Schnittstelle – enp7s0 mit der MAC-Adresse AA:BB:CC:DD:EE:FF
  • Der Server hat eine Haupt-IPv4-Adresse (enp7s0)
  • Der Server hat eine zusätzliche einzelne IPv4-Adresse (die virtuelle MAC-Adresse wurde über das Robot-Konto deaktiviert)
  • ODER Der Server hat 1 zusätzliche IPv4-Subnetz - Eine einzelne IPv4 in einer gerouteten Konfiguration ist funktional nur ein /32-Subnetz.
  • Der Server hat ein /64-IPv6-Subnetz für den HOST und den GUEST
  • Wir verwenden für dieses Beispielszenario reguläres qemu in der Konsole

Beispiel-Benennungen

2001:db8:1234::   # Placeholder for public IPv6 network of the server
10.0.0.168        # Placeholder for main IPv4
10.0.10.135       # Placeholder for additional single IPv4
10.10.10.128/29   # Placeholder for additional IPv4 Network
AA:BB:CC:DD:EE:FF # Placeholder for MAC address of physical interface and main IPv4
00:50:56:00:11:22 # Placeholder for virtual MAC address of additional single IP address

Hinweis: Der im Beispiel gezeigte Startbefehl dient nur zur Veranschaulichung und stellt keine Anleitung dar. Leider können wir keinen Support für die Einrichtung oder den Betrieb einer Virtualisierungsumgebung anbieten.

Schritt 1 – Netplan auf HOST konfigurieren

nano /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp7s0:
      addresses:
        - 10.0.0.168/32           # Main IPv4 for the HOST
        - 2001:db8:1234::2/64     # Main IPv6/64 subnet for the HOST
      routes:
        - on-link: true
          to: 0.0.0.0/0
          via: 10.0.0.129         # Gateway IPv4 of the main IPv4 address
        - to: default
          via: fe80::1            # Default Hetzner IPv6 gateway
      nameservers:
        addresses:
          - 185.12.64.2           # Nameservers from installimage process
          - 2a01:4ff:ff00::add:1  # Nameservers from installimage process
          - 185.12.64.1           # Nameservers from installimage process
          - 2a01:4ff:ff00::add:2  # Nameservers from installimage process
  bridges:
    vibr0:
      interfaces: []              # Bridge not connected to enp7s0
      addresses:
        - 10.0.0.168/32            # Main IPv4 for the HOST
        - 2001:db8:1234::2/64      # Main IPv6/64 subnet for the HOST
      routes:
        - to: 10.0.10.135/32       # Route for the additional IPv4 (or whole IPv4 subnet)
          scope: host              # Required, so netplan creates a local route
        - to: 2001:db8:1234::3/128 # Route for the IPv6 of the VM
          scope: host              # Required, so netplan creates a local route

Netplan erstellt standardmäßig keine Route für lokale Verbindungen. scope: host zwingt netplan, trotzdem eine Route zu erstellen. Dies entspricht: /etc/network/interfaces post-up ip route add 10.0.10.135/32 dev vmbr0

Schritt 2 – Tap-Schnittstelle auf HOST einrichten

Führe folgende Befehle aus, um HOST und GUEST zu verbinden.

Diese Einstellung bleibt nach einem Neustart nicht erhalten.

ip tuntap add dev tap0 mode tap user $(whoami)
ip link set tap0 up
ip link set tap0 master vibr0

Um das dauerhaft zu machen, kannst du eine Servicedatei nutzen:

nano /etc/systemd/system/tap0.service
[Unit]
Description=Persistent tap0 interface
After=network-pre.target
Before=network.target
Wants=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip tuntap add dev tap0 mode tap user root
ExecStartPost=/usr/sbin/ip link set tap0 up
ExecStartPost=/usr/sbin/ip link set tap0 master vibr0
ExecStop=/usr/sbin/ip link set tap0 down
ExecStopPost=/usr/sbin/ip tuntap del dev tap0 mode tap
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable tap0.service

Wichtiger Hinweis: Im Servicebeispiel wird der Benutzer „root“ angegeben. Bitte passe den Benutzer an denjenigen an, der die VM später in der Produktion ausführt.

Schritt 3 – IP-Weiterleitung aktivieren

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1

Damit diese Änderungen auch nach einem Neustart erhalten bleiben, füge diese 2 Zeilen zu /etc/sysctl.d/99-forwarding.conf:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Wenn iptables die IP-Weiterleitung blockiert, lass sie bitte zu:

iptables -A FORWARD -i vibr0 -j ACCEPT
iptables -A FORWARD -o vibr0 -j ACCEPT
ip6tables -A FORWARD -i vibr0 -j ACCEPT
ip6tables -A FORWARD -o vibr0 -j ACCEPT

Für das Hetzner-Standardimage von Ubuntu 24.04 ist das nicht nötig.

Schritt 4 – VM starten

qemu-system-x86_64 \
  -enable-kvm \
  -smp 4            `### 4 CPU cores` \
  -m 4096           `### 4GB RAM` \
  -cpu host         `### Use the native CPU architecture` \
  -hda vm0.vpc      `### Virtual HDD file for the OS in this case` \
  -usbdevice tablet `### Emulate USB tablet for HID input (optional)` \
  -k en-us          `### Keyboard layout (optional)` \
  -vnc 127.0.0.1:1  `### Launch VNC for visualistation (optional) - Please set up an encrypted tunnel to not expose the unencrypted VNC connection` \
  -monitor stdio    `### Launch qemu in interactive mode - Allow adjustments to the VM on the fly)` \
  -netdev tap,id=net0,ifname=tap0,script=no,downscript=no   `### Assign a network device to the VM via the tap0 created earlier` \
  -device virtio-net-pci,netdev=net0                        `### Start VM without MAC - routing prevents random mac from leaking - no abuse`

Schritt 5 – netplan von GUEST konfigurieren

nano /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:                       # Network identifier of the VM according to predictable naming scheme
      addresses:
        - 10.0.10.135/32        # The single IPv4 Address for the GUEST
        - 2001:db8:1234::3/128  # A free IP of the IPv6 Subnet
      routes:
        - to: default           # Default 0.0.0.0/0 route
          via: 10.0.0.168       # Main IPv4 is the gateway for the IPv4 (or subnet)
          on-link: true         # Required for IPv4/32 configuration
        - to: default           # Default IPv6 route
          via: 2001:db8:1234::2 # HOST IPv6 as gateway
          on-link: true         # Required for IPv4/32 configuration
      nameservers:
        addresses:
          - 185.12.64.1          # Nameservers from installimage process
          - 2a01:4ff:ff00::add:2 # Nameservers from installimage process
          - 185.12.64.2          # Nameservers from installimage process
          - 2a01:4ff:ff00::add:1 # Nameservers from installimage process

Mit gerouteten Setups kannst du dein freies IPv6 /64-Subnetz für mehrere virtuelle Maschinen und deinen Host gleichzeitig nutzen, ohne dass es zu Konflikten mit MAC-Adressen kommt. Du kannst ein geroutetes Setup auch nutzen, um IPv4-Subnetze auf mehrere Maschinen zu verteilen.

Ergebnis

Nach Abschluss dieser Anleitung sind Host und virtuelle Maschine erfolgreich über ein geroutetes Setup verbunden, wobei beide in getrennten Subnetzen liegen. Der Host behält seine Haupt-IPv4-Adresse und nutzt zusätzlich eine IPv6-Adresse aus dem /64-Subnetz, während der Gast eine eigene IPv4-Adresse über den Host geroutet bekommt und ebenfalls eine IPv6-Adresse aus demselben /64-Subnetz erhält. Dieses Setup ermöglicht sauberes Routing zwischen Host und Gast, volle IPv6-Unterstützung und eine klare Netzwerktrennung ohne MAC-Adresskonflikte. Es eignet sich besonders gut, wenn mehrere virtuelle Maschinen über dasselbe IPv6-/64-Subnetz oder ein eigenes IPv4-Subnetz betrieben werden sollen.

License: MIT
Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue

Discover our

Dedicated Servers

Configure your dream server. Top performance with an excellent connection at an unbeatable price!

Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more