www.kitesurfer1404.de
www.aldick.org

Hetzner EQ 6, VirtualBox und Routing

Eine kurze Beispiel-Konfiguration des EQ 6 von hetzner auf Debian 5 (lenny) Basis für den Einsatz mit VirtualBox.

Dieser Text ist keine vollständige Anleitung, sondern skizziert nur einige Ideen zur Umsetzung. Ein wenig Hilfe findet man in hetzners Wiki und im Netz. Man sollte aber beachten, dass sich gerade bei VirtualBox in letzter Zeit viel getan hat und man viele veraltete Anleitungen findet.

Wir befinden uns im Rescue-System.

Partitionierung, RAID 1, LVM, Dateisystem

/dev/sda und /dev/sdb mit jeweils 1,5TB

Partition  Mount  FS    Größe  Aufgabe
/dev/sda1  /boot  ext2  512MB  Bootpartition
/dev/sda2  swap   swap  4GB    Swappartition
/dev/sda3         LVM   Rest   RAID-1 mit LVM
/dev/sdb1         LVM   alles  RAID-1 mit LVM

LVM (/dev/md0): ein LVM, volume group "lvm-raid": Zwei logische Volumes: "root" mit ext3 als / des Servers (5GB), "home" mit xfs als /home (hier lagern nachher die HDD-Images der VMs) (Größe: Rest der Festplatte)

RAID anlegen

 mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb1

LVM anlegen (gnorgl wird angelegt, um die exakte Restgröße herauszufinden, die dann bei home angegeben wird)

 pvcreate /dev/md0
 vgcreate lvm-raid /dev/md0
 lvcreate -L 4G lvm-raid -n root
 lvcreate -L 1P lvm-raid -n gnorgl
 lvcreate -l 355596 lvm-raid -n home

Dateisysteme anlegen

 mkfs.xfs /dev/mapper/lvm--raid-home -f
 mke2fs -j -O dir_index /dev/mapper/lvm--raid-root 
 mke2fs /dev/sda1
 mkswap /dev/sda2

Grundsystem installieren

root-mount

 mkdir -p /mnt/server
 mount /dev/mapper/lvm--raid-root /mnt/server

Debian rüberschaufeln

 debootstrap --verbose lenny /mnt/server ftp://mirror.hetzner.de/debian/packages

chroot vorbereiten und rein

 mount /dev/sda1 /mnt/server/boot
 mount /dev/mapper/lvm--raid-home /mnt/server/home
 swapon /dev/sda2
 cp /etc/resolv.conf /mnt/server/etc
 mount -t proc none /mnt/server/proc
 mount -obind /dev /mnt/server/dev
 chroot /mnt/server

/etc/apt/sources.list ändern und hetzner-Mirror einfügen

 # Packages and Security Updates from the Hetzner Debian Mirror
 deb ftp://mirror.hetzner.de/debian/packages  lenny          main contrib non-free
 deb ftp://mirror.hetzner.de/debian/security  lenny/updates  main contrib non-free

Ein paar Sachen installieren

 apt-get update && apt-get dist-upgrade
 apt-get install linux-image-amd64 grub ssh locales mdadm xfsprogs sudo lvm2

Zeichensatz auf UTF-8 setzen.

 modprobe dm-mod
 dpkg-reconfigure linux-image-amd64

Root-Passwort setzen!

Benutzer anlegen, wenn gewünscht und in /etc/sudoers eintragen (adduser name)

GRUB auf /dev/hda installieren

Server neu starten und über ssh auf dem System anmelden. Nun befinden wir uns nicht mehr im Rescue-System.

VirtualBox

VirtualBox-Server in die sources.list eintragen und VB installieren. Achtung: Zieht endlos viel Kram in die Abhängigkeiten. Alles ausmachen, was man nicht braucht. Ports schließen.

Wir installieren in der VM Ubuntu mit der Alternate Installer CD, die wir uns vorher heruntergeladen haben. Alternativ kann natürlich auch Debian oder irgend ein anderes OS installiert werden.

Unsere VM bekommt 1/4 der Ressourcen des Servers, damit noch genug Platz für weitere VMs ist.

VirtualBox installieren

 VBoxManage createvm --name "meineVM" --register
 VBoxManage modifyvm meineVM --ostype Ubuntu_64
 VBoxManage modifyvm meineVM --memory 2946
 VBoxManage modifyvm meineVM --acpi on
 VBoxManage modifyvm meineVM --pae on
 VBoxManage modifyvm meineVM --hwvirtex on
 VBoxManage modifyvm meineVM --nestedpaging on
 VBoxManage modifyvm meineVM --vtxvpid on
 VBoxManage modifyvm meineVM --accelerate3d on
 VBoxManage modifyvm meineVM --cpus 8
 VBoxManage modifyvm meineVM --ioapic on
 VBoxManage createhd --filename meineVM.img --size 367000 

Zur Installation mit NAT

 VBoxManage modifyvm meineVM --dvd /home/user/ubuntu.iso
 VBoxManage modifyvm meineVM --hda meineVM.img
 VBoxManage modifyvm meineVM --nic1 nat

Starten der VM

 VBoxHeadless -s meineVM -p 12345

Wir können uns nun mit einem Remote-Desktop Programm (RDPv5 Protokoll) mit der VM verbinden. Am besten durch nen ssh-Tunnel. Man weiß ja nie... Die Installation erfolgt, wie auf einem normalen PC.

Später ohne NAT brauchen wir eth0 als Netzwerkadapter

 VBoxManage modifyvm meineVM --nic1 bridged
 VBoxManage modifyvm meineVM --bridgeadapter1 eth0
 VBoxManage setextradata meineVM VBoxInternal/Devices/pcnet/0/LUN#0/Config/RestrictAccess 0

Netzwerk einrichten

Nun kommt der eigentliche Knackpunkt, der immer wieder Probleme bereitet. Bei den neuen EQ-Modellen von hetzner braucht man nämlich ein routet-Setup, da hetzners Router in den Rechenzentren nur noch die MAC-Adressen der eigentlichen Server akzeptieren. Traffic von anderen Maschinen, z.B. VMs, wird verworfen. Wir müssen den Traffic also aus der VM über den Server routen.

Dazu holen wir uns eine der Inklusiv-IPs oder, wenn wir Krösus sind und ein ganzes Subnetz in Beschlag nehmen, IPs aus diesem.

Angenommen wir haben von hetzner diese Daten zu unserem Netz bekommen:

192.168.0.42   Server-IP
192.168.0.11   weitere Inklusiv-IP, geht an die VM
192.168.0.1    Gateway
192.168.0.255  Broadcast
255.255.255.0  Netmask

10.0.0.1 - 10.0.0.6 weitere IPs aus einem andere Subnetz, 255.255.255.248 Netmask des weitern Netzes.

Auf dem Server muss in der /etc/network/interfaces eine zusätzliche IP aus dem extra Subnetz vergeben werden, damit wir den Server als Router nutzen können. Außerdem muss eine Route gelegt werden, damit die Daten auch an die Außenwelt weitergeleitet werden. Dies ist der entscheidene Punkt beim Einsatz eines weiteren Subnetzes, könnte man sagen.

Kommt kein weiteres Subnetz zum Einsatz, kann man sich die letzten beiden Zeilen sparen.

 auto lo
 iface lo inet loopback
 
 auto  eth0
 iface eth0 inet static
  address   192.168.0.42
  broadcast 192.168.0.255
  netmask   255.255.255.0
  gateway   192.168.0.1

  up ip addr add 10.0.0.6/255.255.255.248 dev eth0
  up route add -net 10.0.0.0 netmask 255.255.255.248 gw 192.168.0.42 eth0

Nun wollen wir noch IP-Forwarding einrichten. Dazu in der /etc/sysctl.conf die folgenden Optionen setzen. Änderungen werden nach einem Neustart übernommen. Neustart? Linux? Ohne uns, daher noch die letzten beiden Befehle.

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

Nun geht es an die Konfiguration der VM. Unbedingt darauf achten, dass NAT wieder deaktiviert wurde und eth0 als Schnittstelle gewählt ist. Siehe oben.

Zunächst ein Beispiel ohne den Einsatz eines extra Subnetzes. Wichtig ist die Angabe der Server-IP als Gateway, da hier ja der Traffic rüber geroutet werden soll.

 auto eth0
 iface eth0 inet static
  address 192.168.0.11
  netmask 255.255.255.0
  broadcast 192.168.0.255
  gateway 192.168.0.42

Haben wir ein weiteres Subnetz, können wir der VM auch eine IP daraus geben. Hier wird wieder die Server-IP als Gateway gesetzt.

 auto eth0
 iface eth0 inet static
  address 10.0.0.1
  netmask 255.255.255.248
  broadcast 10.0.0.7
  gateway 10.0.0.6

Nameserver gucken wir uns beim Server ab und tragen sie in die /etc/resolv.conf ein.

Ich musste die VM neu starten, wenn ich das Netz gewechselt habe, damit alle Routen richtig gesetzt werden. Wichtig ist darauf zu achten, dass die IP des Servers im Netz der VMs als Gateway gesetzt ist.

Nachtrag zu IPv6

Inzwischen bietet Hetzner IPv6 in den Rechenzentren an. Man bekommt ein /64er Subnetz. Folgendermaßen kann man das Subnetz aufteilen, um VMs mit IPv6 zu versorgen:

Auf dem Host-System wird wie oben beschrieben IPv6-Forwarding aktiviert. Nun braucht die Maschine noch eine Adresse aus dem zugeteilten Subnetz und die Routen müssen gesetzt werden. Hierzu hat sich folgende Konfiguration in der /etc/network/interfaces für brauchbar erwiesen:

 iface eth0 inet static
 [...]
  post-up ip -6 addr add 2a01:4f8:100:74a3::1/64 dev eth0
  post-up ip -6 route add 2a01:4f8:100:74a0::1 dev eth0
  post-up ip -6 route add default via 2a01:4f8:100:74a0::1 dev eth0

Wobei hier natürlich die IP-Adressen an die zugeteilten Adressbereiche angepasst werden müssen.

In meiner Konfiguration teile ich mir das Subnetz mit einigen Freunden. Wir haben das Subnetz in weitere /80er Teilnetze unterteilt. Der folgende Teil wird dann in der virtuellen Maschine in die /etc/network/interfaces eingetragen:

 iface eth0 inet static
 [...]
  post-up ip -6 addr add 2a01:4f8:100:74a3:161::1/80 dev eth0
  post-up ip -6 route add 2a01:4f8:100:74a3::1 dev eth0
  post-up ip -6 route add default via 2a01:4f8:100:74a3::1 dev eth0

Hierbei ist 2a01:4f8:100:74a3:161::1/80 eine Adresse aus dem VM-Subnetz und 2a01:4f8:100:74a3::1 die Adresse des Host-Systems. Nach einem Neustart der Netzwerkschnittstellen auf Host- und Gast-System sollte die Adressen zugewiesen und die Maschinen über IPv6 erreichbar sein.

Nachtrag zu Problemen mit instabilen VMs auf Grund von Clock-Problemen

Bei einigen VMs kann es bei VirtualBox ab und an dazu kommen, dass die Zeit rückwärts läuft und das System in der VM daraufhin komische Sachen macht. Bei unserem Setup hatte eine VM das Problem und die Lösung hat recht lange auf sich warten lassen. Eine genauere Beschreibung des Problems und der Lösung findet man auf der Website von Jan Kässens: Artikel auf www.janniweb.de

Kurzfassung der Lösung: HPET bei VirtualBox für die VM aktivieren, in der VM als Kerneloption die Clocksource auf hpet stellen:

  user@server:~$ VBoxManage modifyvm vmname --hpet on

In der VM dann entweder in der /boot/grub/menu.lst in der Zeile #kopt clocksource=hpet anhängen oder bei Grub 2 diese Option hinter GRUB_CMDLINE_LINUX_DEFAULT hängen. Danach Grub updaten und die VM neu starten.

Viel Spaß und viel Erfolg!