Hetzner Root routed Setup

Hetzner Root Server KVM Host mit zusätzlichen IPs gerouted

Das routed-Setup ist mit Netplan auch recht easy umzusetzen.

Host-Netzwerk:
root@kvm02 ~ # cat /etc/netplan/01-netcfg.yaml

# Hetzner Online GmbH installimage
network:
  version: 2
  renderer: networkd
  ethernets:
    enp35s0:
      addresses:
        - xxx.yyy.zzz.123/32
        - IPV6
      routes:
        - on-link: true
          to: 0.0.0.0/0
          via: aaa.bbb.ccc.ddd
      gateway6: fe80::1
      nameservers:
        addresses:
          - 213.133.100.100
          - 213.133.98.98
          - 213.133.99.99
          - 2a01:4f8:0:1::add:1010
          - 2a01:4f8:0:1::add:9898
          - 2a01:4f8:0:1::add:9999
  bridges:
    vbr120-nic:
      interfaces: []
    vbr110:
      addresses:
        - 172.27.110.1/24
      interfaces: [vbr110-nic]
      routes:
        - to: xxx.xxx.xxx.110/32
          scope: link
    vbr111-nic:
      interfaces: []
    vbr111:
      addresses:
        - 172.27.111.1/24
      interfaces: [vbr111-nic]
      routes:
        - to: xxx.xxx.xxx.111/32
          scope: link
    vbr112-nic:
      interfaces: []
    vbr112:
      addresses:
        - 172.27.112.1/24
      interfaces: [vbr112-nic]
      routes:
        - to: xxx.xxx.xxx.112/32
          scope: link

Im Grunde genommen bleibt die IP-Adresse des Hosts auf dem normalen Interface. Dann lege ich 3 leere Bridges, bzw Bridges mit nem Dummy-Interface an. Auf diese Bridges werden die zusätzlichen IPs geroutet (jeweils mit „scope: link“). Die Bridges bekommen jeweils eine RFC1918-IP als /24. Vermutlich sollte es auch gehen alle zusätzlichen IPs auf die gleiche Bridge zu routen, allerdings trenne ich hier gerne.

XML Auszug aus der VM Config

Die VM bekommt dann die Bridge als Netzwerk-IF konfiguriert:

<interface type='bridge'>
      <mac address='aa:bb:cc:dd:ee:ff'/>
      <source bridge='vbr110'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface> 
VM Netzwerk-Config

Innerhalb der VM wird das Interface dann genau wie beim Host als Point-to-point konfiguriert:

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp1s0:
      addresses:
      - xxx.xxx.xxx.110/32
      routes:
        - on-link: true
          to: 0.0.0.0/0
          via: 172.27.110.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1
  version: 2

Für die Installation der VM ist es am einfachsten einen DHCP auf der Bridge laufen zu lassen, der eine IP aus dem privaten /24 vergibt, oder man konfiguriert dem Installer diese von Hand. Dann muss man natürlich mit iptables noch ein wenig masqueraden. Ich finde das geroutete Setup angenehmer und besser, als die Bridged-Variante, da ich dann die iptables-Regeln nur an einem zentralen Punkt, nämlich auf dem Host pflegen muss. Dann ist es mir auch egal, wenn Docker auf ner VM am Regelwerk rumpfuscht.