Nach längerer Testphase und einigen Anläufen konnte ich mit LCOS 10.42 sowie pfSense eine saubere Site-to-Site-Verbindung konfigurieren. In meinem Fall initiiert das Gerät mit LCOS die Verbindung und pfSense arbeitet als "Responder".
Die Anleitung wurde mit folgenden Systemen getestet:
- LCOS 10.42.0473RU3
- pfSense 2.5.1-RELEASE (amd64) virtualisiert auf KVM-Basis
Die pfSense-Installation läuft auf einer VM bei einem Hoster meines Vertrauens und hat eine statische IPv4-Adresse.
Für die Verschlüsselung sowie die Identifikation der Gegenstellen benötigen wir einen Benutzernamen, ein dazu passenden Kennwort sowie ein PSK. Der Pre-Shared-Key wird zusätzlich für die Verbindung benötigt.
In meinem Beispiel wird die Verbindung über IPSec IKEv2 aufgebaut und wir verwenden einen gerouteten VPN-Tunnel (VTI).
Benutzername | benutzername@domain.tld |
Kennwort | SehrGeheimMitSonderzeichen! |
PSK | 7fh270sncbvz1036dbaoync73704udhfo2635djf027 |
Zusätzlich sollte man bereits im Vorfeld das Transfernetzwerk (in meinem Beispiel hier 10.96.0.0/16) definieren sowie die IP-Adressen der Gegenstellen im späteren VPN-Tunnel:
IP Tunnel Endpunkt LCOS | 10.96.0.2 |
IP Tunnel Endpunkt pfSense | 19.96.0.1 |
Die WAN-Adresse des LCOS-Gerätes sollte entweder statisch sein oder mit einem DynDNS-Dienst zuverlässig aktualisiert werden. Aktuell gibt es einen Bug in pfSense welcher bei VTI-Interfaces ein setzen des "Remote Gateway" notwendig macht, obwohl laut Dokumentation hier auch 0.0.0.0 funktionieren müsste, mit welchem es allerdings aktuell nicht funktionieren will.
Starten wir nun also mit der Konfiguration des "Responders" bzw. der pfSense auf der virtuellen Maschine. Auf der Weboberfläche von pfSense klicken wir hierzu oben im Menü auf "VPN" und dann im Untermenü auf "IPsec":
Nun erstellen wir eine neue Phase-1-Verbindung über "Add P1":
Hier tragen wir nun die Werte von oben wie unter dem Screenshot beschrieben ein:
Remote Gateway | IP-Adresse des LCOS-Gerätes oder alternativ der DNS-Name |
My identifier | benutzername@domain.tld |
Peer identifier | benutzername@domain.tld |
Pre-Shared Key | 7fh270sncbvz1036dbaoync73704udhfo2635djf027 |
Für die Erstellung des PSKs kann entweder die Schaltfläche "Generate new Pre-Shared-Key" genutzt werden oder die Zeichenfolge wird an anderer Stelle zufällig generiert. Die Zeichenfolge wird später bei der Konfiguration des LANCOM-Gerätes nochmals benötigt.
Nun klicken wir unten auf "Save" um die Konfiguration zu speichern:
Danach legen wir für die Phase-1 nun eine Phase-2 an, in welchen wir z.B. dann die Tunnel-Endpunkte definieren. Dazu klicken wir unter dem angelegten Phase-1-Eintrag auf "Add P2":
Hinweis: Auf dem Screenshot ist die P2-Phase bereits angelegt, bei der Neuanlage ist der P2-Eintrag nicht vorhanden!
Nun füllen wir die Daten wie folgt aus:
Local Network Address | 10.96.0.1 |
Remote Network Address | 10.96.0.2 |
Optional kann für "Automatically ping host" noch eine Adresse angegeben werden, welche für die Dead-Peer-Detection verwendet werden soll. Die Adresse sollte dauerhaft erreichbar sein und auf ICMP reagieren. Wenn das Feld nicht ausgefüllt wird, wird nur die Erreichbarkeit der Gegenstelle geprüft.
Nun klicken wir unter auf "Save", um die Konfiguration zu speichern:
Nun sollte die Verbindung ungefähr so aussehen:
Nun müssen wir noch das VTI-Interface in der pfSense-Konfiguration aktivieren und einer Bezeichnung zuordnen. Dazu klicken wir oben im Menü auf der Weboberfläche auf "Interfaces" und dann im Untermenü auf "Assignments":
Dort taucht nun unsere Verbindung als Interface auf und kann nun in pfSense zugeordnet werden. Die 2. Verbindung nach der WAN-Verbindung ist standardmäßig LAN, was an sich ganz gut passt. Also klicken wir in der Weboberfläche unter "Available network ports" auf "Add". Nun wird das Interface als LAN-Interface gelistet:
Nun klicken wir auf "Save", um die Zuordnung zu übernehmen und die Änderungen zu speichern:
Jetzt müssen wir das Interface noch aktivieren, damit es auch genutzt werden kann. Dazu klicken wir oben im Menü auf "Interfaces" und dann auf unser neu gebackenes Interface "LAN":
Dort aktivieren wir nun das Interface und könnten optional noch die Bezeichnung anpassen, falls dies gewünscht ist.
Die weiterführenden Einstellungen verbleiben auf den Standardwerten. Um die Änderung zu übernehmen, klicken wir unten auf "Save":
Nun prüfen wir, ob der IPSec-Dienst auf pfSense läuft. Dazu klicken wir oben im Menü auf "Status" und dann im Untermenü auf "Services":
Nun sollte der Eintrag "ipsec" mit einem grünen Haken versehen sein. Falls nicht, kann hier der Dienst auch gestartet werden:
Ist hier alles soweit in Ordnung geht es nun am LCOS-Gerät weiter. Hier führen wir die Schritte nun anhand des WEBconfig aus. Wir navigieren auf dem LCOS-Gerät links im Konfigurationsmenü auf "VPN" und dort auf "Allgemein":
Hier müssen wir sicherstellen, das die VPN-Funktion generell aktiviert ist und die vereinfachte Einwahl mit Zertifikaten deaktiviert ist. Nun klicken wir etwas weiter unten auf den Link "IPv4-Regeln":
Hier müssen wir sicherstellen, das zumindest der Eintrag "RAS-WITH-NETWORK-SELECTION" vorhanden ist. Diesen werden wir später die die Zuweisung sowie für das Routing benötigen. Der Eintrag ist normalerweise bei LCOS-Geräten standardmäßig angelegt:
Falls wir hier Änderungen vornehmen mussten, diese mit der Schaltfläche "Setzen" speichern:
Nun müssen wir die passenden Verbindungs-Parameter (Benutzername/Kennwort sowie Verschlüsselungs-Richtlinien) erstellen. Dazu klicken wir auf "Authentifizierung":
Nun erstellen wir mit einem Klick auf "Hinzufügen" einen neuen Eintrag:
Nun füllen wir die Felder wie folgt aus:
Lokale Identität | benutzername@domain.tld |
Lokales Passwort | SehrGeheimMitSonderzeichen! |
Entfernte Identität | benutzername@domain.tld |
Entferntes Passwort | SehrGeheimMitSonderzeichen! |
Bitte auch die anderen Felder prüfen, die Authentifizierung wird mittels Key-ID durchgeführt. Nun speichern wir die Konfiguration mit "Setzen":
Danach klicken wir auf den Link "Verschlüsselung":
Hier erstellen wir einen neuen Eintrag mit einem Klick auf "Hinzufügen":
Nun setzen wir dort die folgenden Einstellungen:
Wir speichern die Einstellungen mit einem Klick auf "Setzen":
Nun klicken wir auf den Link "Identitäten":
Hier erstellen wir einen neuen Eintrag mit einem Klick auf "Hinzufügen":
Hier setzen wir die folgenden Einstellungen:
Entfernte Identität | benutzername@domain.tld |
Entferntes Passwort | 7fh270sncbvz1036dbaoync73704udhfo2635djf027 |
Hier ist zu beachten: Für "Entferntes Passwort" wird der Pre-Shared-Key eingetragen, NICHT das dem Benutzer zugehörige Kennwort!
Wir speichern die Einstellungen mit einem Klick auf "Setzen":
Nun klicken wir auf den Link "IPv4-Routing":
Hier erstellen wir einen neuen Eintrag mit einem Klick auf "Hinzufügen":
Hier legen wir nun die folgenden Einstellungen fest:
In meinem Beispiel sollen Clients im Netzwerk INTRANET durch den Tunnel mit der Gegenstelle kommunizieren können. Falls hier ein anderes Netzwerk gewünscht wird, muss dieses an dieser Stelle ausgewählt werden.
Wir speichern die Einstellungen mit einem Klick auf "Setzen":
Nun sind alle Vorbereitungen getroffen, um die Gegenstelle an sich zu konfigurieren. Dazu klicken wir auf "Verbindungs-Liste":
Dort klicken wir unten auf "Hinzufügen":
Nun legen wir eine neue Verbindung mit den folgenden Werten an:
Entferntes Gateway | Statische IPv4-Adresse der pfSense oder DNS-Name |
Hinweis: In der Regel kann das Feld "Routing-Tag" auf "0" belassen werden. Da das Gerät im Beispiel mehrere WAN-Leitungen hat definiere ich somit die Verbindungsherstellung über den Routing-Eintrag mit dem Routing-Tag "1". Wenn nur eine WAN-Verbindung existiert wird automatisch die Default-Route genutzt.
Wir speichern die Einstellungen mit einem Klick auf "Setzen":
Da es aktuell für die VPN-Gegenstelle noch kein Eintrag in der Routing-Tabelle gibt, wird das Gerät noch keinen Verbindungsaufbau durchführen. Die Verbindung ist aktuell allerdings noch immer nicht komplett, es fehlen noch die IP-Adressen für die Endpunkte in dem VPN-Tunnel.
Nun klicken wir auf der linken Seite im Menü auf "Kommunikation" > "Protokolle" > "IP-Parameter":
Dort klicken wir unten auf "Hinzufügen":
Nun tragen wir die IP-Parameter für die Phase-2-Verbindung ein:
IP-Adresse | 10.96.0.2 |
Netzmaske | 255.255.0.0 |
Standard-Gateway | 10.96.0.1 |
Wir speichern die Einstellungen mit einem Klick auf "Setzen":
Nun müssen wir 2 Routing-Einträge erstellen. Dazu wechseln wir auf der linken Seite im Menü auf "IP-Router" > "Routing" > "IPv4-Routing-Tabelle":
Dort klicken wir unten auf "Hinzufügen":
Nun legen folgende Einstellungen für die 1. Route fest:
Wir speichern die Einstellungen mit einem Klick auf "Setzen":
Dann klicken wir nochmals auf "Hinzufügen":
Nun legen folgende Einstellungen für die 2. Route fest:
Hinweis: Für eine spätere Trennung in der Firewall habe ich hier als Routing-Tag "2" gesetzt. Dies ist optional und kann in der Regel auf "0" belassen werden.
Wir speichern die Einstellungen mit einem Klick auf "Setzen":
Nun wird das LANCOM-Gerät durch die Routing-Einträge die VPN-Verbindung herstellen. Für das Debugging empfiehlt sich im LANconfig in der Trace-Ausgabe "VPN-IKE" sowie "VPN-Debug", falls die Verbindung nicht korrekt hergestellt werden kann.
Auf pfSense-Seite kann im Hauptmenü unter "VPN" > "IPSec" mit dem Log-Symbol rechts die aktuellen Log-Einträge angezeigt werden:
Eine schnelle Übersicht bietet das Graphen-Symbol, welches etwas übersichtlicher den Status der Verbindungen anzeigt. Hier kann auch eine VPN-Verbindung manuell abgebaut werden und so auch ein automatischer Neuaufbau nach Änderung der WAN-Adresse simuliert werden:
Eine korrekte Verbindung sollte dann ungefähr so aussehen:
Auf LANCOM-Seite wird eine korrekt hergestellte Verbindung entweder im WEBconfig oder im LANmonitor angezeigt. Im LANmonitor sieht das dann z.B. so aus:
Im WEBconfig findet sich der Status am einfachsten im Dashboard:
Falls auf der Seite des LANCOM-Gerätes mit einer DENY-ALL-Strategie gefahren wird, müssen ggf. noch Firewall-Regeln für die Kommunikation zwischen dem lokalen Netzwerk (in meinem Beispiel INTRANET) und dem Transfer-Netzwerk erstellt werden.