Hetzner und das Netzwerk

Für viele ist die Einrichtung vom Netzwerk bei Hetzner ein größerers Problem, gerade wenn es umkomplette Netze, IPv6 und Virtualisierung geht.

Bei Hetzner kommt noch dazu, dass man VMs nicht so ohne weiteres auf das Hauptinterface bridgen darf, weil dann der nächste Switch fremde Macs auf der Leitung sieht. Dies kann man zwar durch MAC-Basteleien verhindern, ich rate dennoch strikt davon ab, auch weil so die VMs gegenseitig Schindlunder treiben können.

Ich habe deswegen ein sog. „routed“ Setup, wo eth0 direkt verwendet wird und in keienr Bridge sitzt. Man könnte jetzt auf die Idee kommen, alle VMs in eine Bridge zu stecken und zwischen eth0 sowie der Bridge zu routen. Dies ist aber keine gute Idee, weil so die VMs nicht voneinander isoliert sind. Deswegen habe ich für jede VM eine eigene Bridge verwendet.

Weitere Annahmen:

  • IPv4 Hauptadresse: 1.2.117.15
  • IPv4-Netz: 1.2.170.96/27
  • IPv6 Netz: 1234:4321:678:281:7ad5:0000:0000:0001/64
  • IPv6 der VMs: 1234:4321:678:281:7ad5:<id>:0:1

Hier ist meine derzeitige Konfiguration (um unnötiges verkürzt). Sie ist sicher nicht perfekt, aber sie tut seit vielen Jahren klaglos ihren Dienst.

/etc/network/interfaces
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback
 
# device: eth0
auto  eth0
iface eth0 inet static
  address   1.2.117.15
  broadcast 1.2.117.63
  netmask   255.255.255.192
  gateway   1.2.117.1
 
# default route to access subnet
up route add -net 1.2.117.0 netmask 255.255.255.192 gw 1.2.117.1 eth0
 
iface eth0:1 inet static
  address 1.2.170.96
  netmask 255.255.255.224
 
iface eth0:2 inet static
  address 1.2.170.97
  netmask 255.255.255.224
 
...
 
iface eth0:31 inet static
  address 1.2.170.126
  netmask 255.255.255.224
 
iface eth0:32 inet static
  address 1.2.170.127
  netmask 255.255.255.224
 
#ipv6
iface eth0 inet6 static
   address 1234:4321:678:281:7ad5:0000:0000:0001
   netmask 64
 
up ip route add default via fe80::1 dev eth0

Zusätzlich habe ich eine setup-Script, das beim Starten des Server durchläuft:

/usr/local/sbin/netzwerksetup.sh
echo "Proc"
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv6/conf/eth0/proxy_ndp
 
for i in `seq 0 30`; do
        let ipv4=i+96
        let ipv6=i+1000
        tunctl -t tap$i
        brctl addbr kvm$i
        brctl addif kvm$i tap$i
        #fuer interne Kommunikation
        ip -4 addr add 172.20.$i.2/24 dev kvm$i
        ip -6 addr add 1234:4321:678:281:7ad5:$ipv6:1000:1/96 dev kvm$i
        ifconfig kvm$i up
        ifconfig tap$i 0.0.0.0 promisc up
done
 
for i in `seq 96 127`; do
        arp -Ds 1.2.170.$i eth0 pub
done
 
for i in `seq 1000 1030`; do
        ip -6 neigh add proxy 1234:4321:678:281:7ad5:$i::1 dev eth0 
done
 
for i in `seq 0 30`; do
        let ipv4=i+96
        route add 1.2.170.$ipv4 kvm$i
done
 
for i in `seq 0 30`; do
        let ipv6=i+1000
        route -A inet6 add 1234:4321:678:281:7ad5:$ipv6:0:1/128 dev kvm$i
done

Der entsprechende Konfigschnippsel in der kvm-Konfig (für die ich libvirt verwende) sieht dann einfach folgendermaßen aus (hab die 9. VM rausgezogen):

vm_konfig
    <interface type='bridge'>
      <mac address='52:54:00:33:84:09'/>
      <source bridge='kvm9'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

Daneben benötigen die VMs eine Konfiguration wie folgt:

/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 1.2.170.105
        netmask 255.255.255.255
        network 1.2.170.105
        broadcast 1.2.170.105
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 213.133.99.99
        up route add 1.2.117.15 gw 1.2.170.105
        up route add default gw 1.2.117.15
 
iface eth0 inet6 static
        address 1234:4321:678:281:7ad5:1009:0:1
        netmask 96
        up ip -6 route add default via 1234:4321:678:281:7ad5:1009:1000:0001
Anmelden