Bei der Virtualisierung auf Hetzner-Servern ist es aus mehreren Gründen sinnvoll bzw. notwendig, die VMs an einen separaten virtuellen Switch anzuschließen und das so entstehende Netz über eine Router-VM mit dem Hetzner-Netz zu verbinden.

Dieser Abschnitt beschreibt, wie wir eine Router-VM auf Basis von “pfSense” einrichten. Es gibt natürlich unzählige weitere Routerlösungen. Wir haben uns für pfSense entschieden, weil diese sehr stabil läuft, einen großen Funktionsumfang bietet und eine komfortabel zu bedienende GUI aufweist.

Anlegen der VM

Wir loggen mit dem vSphere-Client am ESXi ein und erstellen eine neue virtuelle Maschine.

Grundkonfiguration

Configuration Custom
Name pfSense
Destination Storage datastore1
Virtual Machine Version 8
Guest OS: Other / FreeBSD (64-bit)
Number of virtual sockets 1
Number of cores per socket 1
Memory 256 MB

Netzwerkkonfiguration

Netzwerkkonfiguration

Storage-Konfiguration

SCSI Controller LSI Logic Parallel
Type of disk Create a new virtual disk
Disk Size 5 GB
Disk Provisioning Thick Provision Lazy Zeroed
Location Store with the virtual machine
Virtual Device Node SCSI (0:0)
Mode “Independent” unchecked

Abschließende Konfiguration

Wir setzen den Haken bei “Edit the virtual machine settings before completion” und führen folgende Schritte durch:

Konfiguration der MAC-Adresse

Installation von pfSense

Konsolen-Konfiguration

Die VM rebootet, bootet von Festplatte und startet die Konfigurationsphase von pfSense. Zunächst werden die Interfaces eingerichtet.

Erreichbarmachen des Webinterface

Das Webinterface ist per Default nur vom LAN-Netz aus erreichbar. Daher müssen wir, falls wir nicht bereits eine VM mit Webbrowser auf dem Server haben, als erstes den Zugriff von außen, also vom WAN-Netz aus, erlauben.

[bash]playback enableallowallwan
exit[/bash]

Konfiguration via Webinterface

Hinweis: Wir beschreiben hier nicht, wie man eine Firewall in allen Details konfiguriert, sondern gehen auf die Dinge ein, die wir speziell für unser Ziel benötigen.

Allgemeine Konfiguration

Hostname und DNS-Server

General Setup

Firmware-Update
Da wir IPv6 konfigurieren wollen, und pfSense 2.0 dies noch nicht unterstützt, installieren wir die Development-Version von pfSense 2.1. Falls IPv6 nicht gewünscht wird, oder Nutzung einer Development-Version zu problematisch erscheint, kann dieser Schritt (und alle weiteren Schritte, die sich auf IPv6 beziehen) übersprungen werden.

Firmware Update Settings

Pakete installieren

Wir installieren zwei benötigte Zusatzpakete unter System / Packages / Available Packages. Wir brauchen “Open-VM-Tools” und “OpenVPN Client Export Tool”.

WAN-Interface-Setup

Die WAN-Interface-Parameter können prinzipiell auch auf DHCP belassen werden; die Adreßzuweisung von Hetzner funktionier i.d.R. gut. Wir bevorzugen aber statische Zuweisungen für unsere Router.
Folgende Reihenfolge ist beim Konfigurieren des WAN-Interface einzuhalten.

WAN Interface

IPv4 WAN Gateway IPv6 WAN Gateway

Routing zu Switchnachbarn für IPv4
Bei Hetzner muß Traffic zu “Switchnachbarn”, sprich zu anderen Servern aus dem gleichen IPv4-Netz, über das Gateway laufen und kann nicht direkt zugestellt werden. Eine Möglichkeit, dies zu konfigurieren, ist ein Point-to-Point-Setup mit einem /32-Netz für das WAN-Interface. In pfSense ist diese Option aber nicht machbar, daher behelfen wir uns eines Tricks.

Wir müssen dafür sorgen, daß Traffic zu unserem eigenen WAN-Subnetz (im Beispiel 5.9.86.86/27) über das Gateway läuft, anstatt direkt zugestellt zu werden wie es normalerweise ja passiert. Wir erreichen dies, indem wir zwei statische Routen anlegen, für jeweils eine Hälfte dieses Netzes, und das Hetzner-Gateway als Gateway angeben. Diese Routen haben dann, da sie “spezifischer” sind (längere Netzmaske /28), gemäß IP-Routingregeln Vorrang vor der Route ins eigene Subnetz (Netzmaske /27).
Der Screenshot zeigt das Setup, einzurichten unter System / Routing / Routes.
Switchnachbar-Routing

Unterteilung des zweiten IPv6-Subnets

Wir haben uns dazu entschlossen, aufgrund der IPv4-Knappheit ein Intranet mit privaten IP-Adressen einzurichten, in welches wir virtuelle Maschinen setzen, die nicht unbedingt eine öffentliche IPv4-Adresse brauchen.
Damit diese VMs auch per IPv6 erreichbar sind, unterteilen wir unser /64 Subnetz in zwei “Sub-Subnetze”. Diese weisen wir dem “Subnet” und “Intranet” Interface zu. Um es beim Aufschreiben einfacher zu haben, verwenden wir zwei /80 Subnetze mit den Adressen 2a01:4f8:162:1ffc:1::/80 und 2a01:4f8:162:1ffc:2::/80.

Subnet Interface-Setup

Subnet Interface-Setup

Intranet Interface-Setup

Intranet Interface-Setup

Pingtest

Zeit für einen Pingtest! Die IPv4 und IPv6 Adressen von WAN und Subnet Interface sollten jetzt von außen pingbar sein.
[bash]
|——————————————————————————————|
| WinMTR statistics |
| Host – % | Sent | Recv | Best | Avrg | Wrst | Last |
|————————————————|——|——|——|——|——|——|
| 10.10.30.1 – 0 | 7 | 7 | 0 | 0 | 0 | 0 |
|static.193.36.40.188.clients.your-server.de – 0 | 7 | 7 | 1 | 1 | 3 | 3 |
| hos-tr3.juniper2.rz10.hetzner.de – 0 | 7 | 7 | 0 | 0 | 0 | 0 |
| hos-bb2.juniper3.rz16.hetzner.de – 0 | 7 | 7 | 0 | 0 | 0 | 0 |
| hos-tr1.ex3k21.rz16.hetzner.de – 0 | 7 | 7 | 1 | 2 | 5 | 5 |
|static.193.182.9.5.clients.your-server.de – 0 | 7 | 7 | 0 | 0 | 1 | 0 |
|________________________________________________|______|______|______|______|______|______|
WinMTR v0.92 GPL V2 by Appnor MSP – Fully Managed Hosting & Cloud Provider[/bash]
[bash]
|——————————————————————————————|
| WinMTR statistics |
| Host – % | Sent | Recv | Best | Avrg | Wrst | Last |
|————————————————|——|——|——|——|——|——|
| 10.10.30.1 – 0 | 7 | 7 | 0 | 0 | 0 | 0 |
|static.193.36.40.188.clients.your-server.de – 0 | 7 | 7 | 1 | 1 | 4 | 1 |
| hos-tr3.juniper2.rz10.hetzner.de – 0 | 7 | 7 | 0 | 0 | 1 | 0 |
| hos-bb2.juniper4.rz16.hetzner.de – 0 | 7 | 7 | 0 | 12 | 60 | 0 |
| static.97.86.9.5.clients.your-server.de – 0 | 7 | 7 | 1 | 6 | 27 | 3 |
|________________________________________________|______|______|______|______|______|______|
WinMTR v0.92 GPL V2 by Appnor MSP – Fully Managed Hosting & Cloud Provider[/bash]

VMs den Netzen zuweisen

VPN-Konfiguration

Wir wollen ein VPN einrichten (Roadwarrior-Szenario), um mit OpenVPN-Clients auf unserem Arbeitsrechner einen Tunnel zum Router aufzubauen. Damit können die VMs im Intranet direkt erreichen, und den Zugriff auf Subnet-VMs per Firewall-Regeln einschränken (z.B. Netbios-Zugriff nur per VPN).
Wir wollen den Authentifizierungsmodus “SSL/TLS ohne User Auth” verwenden und TLS-Pakete authentifizieren lassen. D.h. jeder User erhält ein eigenes Zertifikat, muß sich aber nicht zusätzlich mit Kennwort anmelden. Für TLS-Auth wird ein Shared Key verwendet.
Zum Glück bietet pfSense eine komfortable GUI, um alle nötigen Schritte durchzuführen.

Zertifikate generieren

User-Zertifikat
Certificate Authority
Server-Zertifikat

Server anlegen

Damit haben wir alles beisammen, was wir zur Konfiguration des VPN-Servers benötigen. Unter VPN / OpenVPN / Server fügen wir einen neuen Server ein.

Server-Konfiguration Teil 3
Server-Konfiguration Teil 2
Server-Konfiguration Teil 1

User anlegen

Für jeden einzurichtenden User führen wir folgende Schritte durch:

2 Responses

  1. Hallo Herr Timmermann,
    erstmal vielen Dank für die Anleitung.
    Wir haben uns nun auch einen “ESXi” bei Hetzner zugelegt. Eigentlich läuft dieser auch problemlos. Allerdings ist mir gerade aufgefallen, dass die Server nach draußen die IP der Router-VM nutzen (sprich die Zusätzliche IP) und nicht die jeweilige IP aus dem Subnetz.
    Wie bekommen wir es hin, dass er die “richtige” IP-Adresse nach draußen verwendet?
    Vielen Dank im Voraus für Ihre Antwort.

    1. Hallo Florian,
      da fehlt dann wohl das 1:1 NAT.
      Firewall -> NAT -> 1:1
      Und hier die fehlenden Informationen eintragen, dann sollte es funktionieren.
      Viele Grüße
      Sven