====== 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::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. ### 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: 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):
Daneben benötigen die VMs eine Konfiguration wie folgt: # 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