Hetzner und Proxmox: IPv6 mit Router-VM nutzen

For a english version of this article follow this link.

Nachdem meine Anleitung zur Einrichtung einer pfSense-Router-VM bei Hetzner so gut angekommen ist, möchte ich heute erläutern, wie man mit dieser VM auch das von Hetzner zugewiesene IPv6 nutzen kann.

Vorwort

Ich habe inzwischen dem pfSense-Projekt den Rücken gekehrt und bin voll auf OPNSense umgestiegen. Die Gründe hierfür sind vielfältig, in erster Linie gefällt mir aber das Interface der OPNSense einfach viel besser. Ob man nun aber eine pfSense- oder eine OPNSense-VM nutzt, dürfte völlig unerheblich sein – einzig die Menüpunkte könnten an unterschiedlichen Orten zu finden sein.

Hetzner weist jedem dedizierten Server ein /64-IPv6-Netzwerk zu, das man frei auf seine MAC-Adressen routen lassen kann. Hierzu muss man im Robot auf den kleinen Computer hinter dem IPv6-Subnet klicken. Hier stellen wir das Routing um auf die MAC-Adresse der Router-VM.

Konfiguration WAN-Interface

Die Konfiguration des WAN-Interface ist sehr einfach, daher möchte ich nur einen Screenshot vorzeigen:

Konfiguration des WAN-Interface für IPv6
Konfiguration des WAN-Interface für IPv6

Wie man sieht nutzen wir hier DHCP6 und lassen uns die IP-Adressse für das WAN von Hetzner zuweisen. Bei mir war ein Neustart der VM nötig, nachdem ich IPv6 auf dem WAN aktiviert habe. Im Dashboard sieht man die frisch zugewiesene IPv6-Adressen am WAN-Interface – in meinem Fall war das die fe80::250:56ff:fe00:222c.

Die DHCPv6-Client-Konfiguration (Request only an IPv6 prefix, Send IPv6 prefix hint und Use IPv4 connectivity) müssen unbedingt gesetzt werden – ohne diese Optionen hatte ich keinen Erfolg.

Konfiguration LAN-Interface

Auch hier möchte ich einen Screenshot nutzen, um die Konfiguration zu zeigen.

Konfiguration des LAN-Interface für IPv6
Konfiguration des LAN-Interface für IPv6

Als IPv6-Adresse nutzt ihr am besten die erste IPv6-Adresse aus dem von Hetzner zugewiesenen Subnet (bei mir: 2a01:4f9:2a:129e:: / 64). Weitere Einstellungen sind hier nicht notwendig!

Gateway-Konfiguration

Bei mir kam die OPNSense dann leider nicht immer nicht per IPv6 nach außen, weshalb ich noch einige Zeit gerätselt habe, was da nun los ist.

Unter System -> Gateways war dann der Fehler versteckt. Hier habe ich das Gateway entsprechend angepasst:

Konfiguration des Gateway für IPv6
Konfiguration des Gateway für IPv6

Ber mir war das Gateway nicht als Default Gateway gesetzt und ich habe die statische IPv6-Adresse eingetragen, statt das Gateway auf „dynamic“ zu belassen – das eigentliche Problem resultierte aber aus dem fehlenden Default Gateway.

Nach Abschluss der Arbeiten habe ich einen Neustart der OPNSense durchgeführt und erneut die IPv6-Erreichbarkeit getestet: mit Erfolg.

Konfiguration einer VM

Abschließend möchte ich noch zeigen, wie man eine Ubuntu- bzw. Windows-VM in diesem Setup per IPv6 erreichbar macht. Ich habe mich gegen die Nutzung von DHCP6 im internen Netz entschieden und konfiguriere die virtuellen Maschinen statisch.

Konfiguration Ubuntu/Debian

Die Konfiguration einer Ubuntu-/Debian-VM ist gewohnt einfach zu bewerkstelligen. Hierzu fügen wir in der Datei /etc/network/interfaces unseren IPv6-Konfigurationsblock ein:

iface ens18 inet6 static
    address 2a01:4f9:2a:129e::2 # frei wählbare IPv6-Adresse
    netmask 64
    gateway 2a01:4f9:2a:129e::1 # IPv6-Adresse der pfSense/OPNSense

Ziemlich simpel, nicht?

Konfiguration Windows

Auch die Konfiguration der Windows-VM ist ausnahmsweise ziemlich simpel. Man aktiviert in den Adaptereinstellungen IPv6, falls das noch nicht geschehen ist, und trägt dort die selben Daten ein, wie unter Linux:

  • Adresse: frei wählbare IPv6-Adresse aus dem Subnet
  • Subnetzmaske: /64
  • Gateway: IPv6-Adresse der pfSense/OPNSense

Bei beiden Konfigurationen muss man womöglich noch einen oder mehrere IPv6-Nameserver eintragen, damit die Namensauflösung ordentlich klappt.

Fazit

Im Internet liest man viele Horrorgeschichten über die Konfiguration von IPv6 bei Hetzner – beschäftigt man sich allerdings mal mit dem ganzen Setup ist die Einrichtung letztlich gar nicht schwierig und ziemlich flott erledigt.

Gerne beantworte ich Fragen oder nehme Hinweise zu meinem Setup entgegen. Perfekt ist es sicher nicht, das weiß ich, aber es funktioniert bei mir zuverlässig, weshalb ich darüber eigentlich ganz glücklich bin. Sollte dennoch jemand einen guten Tipp parat haben: gerne ab in die Kommentare damit!

Übrigens: diese Website ist nun auch per IPv6 erreichbar… ;-)

Elasticsearch-Backup mit elasticdump

Seit einiger Zeit nun betreibe ich schon eine Bloonix-Instanz, um die Server meiner Kunden ordentlich überwachen zu können.

Die Sicherung dieses Monitoring-Servers ist eigentlich relativ einfach, sind es doch nur ein paar Konfigurationsdateien und eine MySQL-Datenbank – ach… und die Performance-Daten im Elasticsearch…

Ich habe mich relativ schwer damit getan, die Elasticsearch-Instanz ordentlich zu sichern, bin aber endlich auf eine praktikable Lösung gestolpert, die ich heute vorstellen möchte: elasticdump!

Weiterlesen…

Hetzner und Proxmox: pfSense als Gateway

For a english version of this article follow this link.

Ich nutze, wie viele meiner Leser wissen, einige Hetzner-Server im Zusammenspiel mit der Virtualisierungslösung Proxmox.

Um das Setup ein bisschen sicherer zu gestalten und nicht auf die Hetzner-Firewall angewiesen zu sein, habe ich mich vor kurzem darum gekümmert, meine virtuellen Maschinen hinter einer pfSense-VM abzuschirmen. Die Netzwerkkonfiguration war dabei nicht ganz trivial und daher möchte ich meinen Lesern einen kleinen Einblick geben.

Voraussetzungen

  • dedizierter Hetzner-Server (hier: EX41-SSD)
  • lauffähiges Proxmox-System
  • eine Zusatz-IP für die pfSense-VM mit MAC-Adresse (Hetzner-Robot)
  • Subnetz, gerouted auf die pfSense-VM

Sobald diese Voraussetzungen erfüllt sind, können wir uns an die Konfiguration des Systems machen.

Proxmox-Konfiguration

Die Proxmox-Konfiguration sieht bei mir wie folgt aus (/etc/network/interfaces):

auto lo
iface lo inet loopback

iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address  <SERVER-HAUPT-IP>
        netmask  255.255.255.255
        gateway  <SERVER-HAUPT-GATEWAY>
        pointopoint <SERVER-HAUPT-GATEWAY>
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

        up ip route add 192.168.0.0/16 via 138.201.203.59 dev vmbr0
        up ip route add 172.16.0.0/12 via 138.201.203.59 dev vmbr0
        up ip route add 10.0.0.0/8 via 138.201.203.59 dev vmbr0

        up sysctl -w net.ipv4.ip_forward=1
        up sysctl -w net.ipv4.conf.eth0.send_redirects=0

# Virtual switch for DMZ
# (connect your firewall/router KVM instance and private DMZ hosts here)
auto vmbr1
iface vmbr1 inet manual
        bridge_ports none
        bridge_stp off
        bridge_fd 0

Die Server-Haupt-IP und das Server-Haupt-Gateway könnt ihr aus dem Hetzner Robot auslesen – hier gibt es eigentlich nicht viele Fehlerquellen.

pfSense-Konfiguration

WAN-/LAN-Konfiguration

Die pfSense-Konfiguration ist nicht wirklich komplizierter. Im Proxmox-Interface erstellen wir die VM mit zwei Netzwerkdevices, eins davon gebunden an vmbr0 – unser WAN-Interface – und eins an vmbr1 – das LAN-Interface.

Nach der pfSense-Installation weisen wir die Interfaces in der pfSense entsprechend zu und konfigurieren das WAN-Interface:

pfSense WAN-Konfiguration

Die Konfiguration des LAN-Interfaces sollte selbsterklärend sein – privates Subnetz, kein Gateway.

Virtual IP Address

Um unser Subnetz hinter der pfSense nutzen zu können, müssen wir nun noch jede zu nutzende IP unter „Firewall -> Virtual IPs“ eintragen. Hier ist es möglich, alle IP-Adressen des Subnetzes einzutragen, wir brauchen keine Broadcast- oder Host-Adresse.

Interne IP-Adressen

Wir sind nun in der Lage, unseren Clients im LAN ihre IP-Adressen zu verteilen. Entweder man nutzt hierfür den DHCP-Server der pfSense und vergibt im einfachsten Fall statische Reservierungen oder mann konfiguriert die Clients per Hand.

Ich habe mich für die DHCP-Variante entschieden, auf die Konfiguration möchte ich hier aber nicht weiter eingehen, da das ziemlich selbsterklärend ist.

1:1 NAT

Um unsere internen Clients nun auch aus dem Internet erreichen zu können, müssen wir noch das 1:1 NAT konfigurieren.

1:1 NAT configuration

Firewall-Konfiguration

Zum Schluss ist es nun die Sache des Administrators, die Firewall korrekt zu konfigurieren. Hier gibt es so viele Lösungsansätze, dass ich darauf nicht weiter eingehen möchte – welche Ports wohin geöffnet werden, muss der Betreiber der Firewall selbst entscheiden.

ICMP-Ping-Regel

Ich finde es ganz angenehm, die Erreichbarkeit eines Hosts von außen mit einem ping prüfen zu können. Hierzu lege ich immer als erstes diese Regel in der pfSense-Firewall an:

pfSense ICMP Ping Rule

Als Destination muss natürlich die interne IP bzw. das interne Subnetz angegeben werden.

Fazit

Die Konfiguration einer pfSense-VM bei Hetzner ist nicht ganz trivial, aber doch gut machbar. Ein wenig Trial & Error ist zwar dabei, aber das ist es ja bei Firewalls immer. Als kleinen Tipp möchte ich noch mitgeben, den Zugriff auf das Proxmox-Webinterface nicht zu früh zu sperren, damit man im Zweifelsfall noch Zugriff auf die pfSense-Konsole hat, wenn man sich verkonfiguriert.

Gerne beantworte ich Fragen oder nehme Hinweise zu meinem Setup entgegen. Perfekt ist es sicher nicht, das weiß ich, aber es funktioniert bei mir zuverlässig, weshalb ich darüber eigentlich ganz glücklich bin. Sollte dennoch jemand einen guten Tipp parat haben: gerne ab in die Kommentare damit!

IPv6-Konfiguration

Der IPv6-Konfiguration habe ich einen eigenen Artikel gewidmet.

Migration: OpenVZ zu LXC

Quelle: Linux Containers

Ich habe aktuell noch zwei Kunden, deren Systeme auf der OpenVZ-Virtualisierung aufbauen. Prinzipiell ist die Nutzung von OpenVZ auch kein Problem, dennoch gibt es hier und da ein paar Problemchen und Einschränkungen, die nicht mehr dem heutigen Stand der Technik entsprechen.

Nachdem ich inzwischen bereits zwei Migrationen von OpenVZ zu LXC hinter mir habe, möchte ich kurz erläutern, wie man den Wechsel am Besten durchführt.

Weiterlesen…