FritzBox - Site to Site VPN zu pfSense 2.5
Aus znilwiki
Changelog:
- 06.03.2021 erste Version mit pfSense 2.5 und FritzBox 6591 mit Firmware 7.13 (Kabel Deutschland)
Vorwort
Nach dem Upgrade meiner pfSense auf 2.5 funktionierte zunächst alles, nach einem Neustart baute sich aber der IPSec-Tunnel zur FritzBox nicht mehr auf.
Während des Upgrades hatte ich in der Ausgabe gesehen das 3DES demnächst nicht mehr unterstützt werden soll - also Grund genug diesen Artikel zu überarbeiten!
Ein paar Screenshots sind noch aus der alten Version, deshalb sind einige hell und andere Dunkel
Ausgangslage
Ich habe folgende "Geräte":
- pfSense 2.5 Firewall als virtuelle Maschine (VM) auf ESXi 6.7
- WAN Schnittstelle hat die feste, öffentliche IP 198.100.144.136
- LAN Schnittstelle hat die private IP 192.168.200.1
- FritzBox 6591 mit Firmware Fritz!OS 7.13
- WAN Schnittstelle hat dynamische, öffentliche IP
- Öffentliche IP wird über DynDNS.org registriert und ist somit über testlinz.dyndns.org erreichbar
- LAN-Schnittstelle hat die feste IP 192.168.1.200
Ich will hier also die Netzwerke 192.168.200.0/24 und 192.168.1.0/24 miteinander verbinden.
+-----------------------+ +----------------------------------+ +-------------------------------------+ +-----------------------+ | Netzwerk "Irgendwo" | | Firewall pfSense | | Fritz!Box 7390 | | Netzwerk "Daheim" | +-----------------------+ +---------------+------------------+ +---------------------+---------------+ +-----------------------+ | IP 192.168.200.0 | | Intern | Extern | | Extern | Intern | | IP 192.168.1.0 | | Maske 255.255.255.0 | <--> | 192.168.200.1 | 198.100.144.136 | <---- Internet ----> | testlinz.dyndns.org | 192.168.1.200 | <--> | Maske 255.255.255.0 | | Gateway 192.168.200.1 | +---------------+------------------+ +---------------------+---------------+ | Gateway 192.168.1.200 | +-----------------------+ +-----------------------+
Konfiguration pfSense
Wir melden und an der pfSense an und gehen auf
VPN - IPSec
Zunächst erstellen wir eine neue IPSec-Verbindung mit einem Klick auf das + Add P1 Symbol rechts unten
Der neue Dialog ist die Konfiguration für die "Phase 1".
Phase 1
Die 3 Abschnitte füllt Ihr wie folgt aus (in Bildern etwas tiefer zu sehen):
- Genernal Information
- Key Exchange version
V1
- Internet Protocol
IPv4
- Interface
WAN
- Remote gateway
DynDNS-Name eurer FritzBox
- Description
Beschreibung der Verbindung
- Key Exchange version
- Phase 1 proposal (Authentication)
- Authentication method
Mutal PSK
- Negotiation mode
Aggressive
- My identifier
My IP address
- Peer identifier
Distinguished name
-->DynDNS-Name eurer FritzBox
- Pre-Shared Key
ein Passwort aus Buchstaben und Zahlen oder klickt auf Generate new Pre-Shared Key
- Encryption algorithm
AES
- Key length
256 bits
- Hash algorithm
SHA512
- DH key group
14 (2048 bit)
- Lifetime
28800
- Authentication method
- Advanced Options
- NAT TRaversal
Auto
- Dead Peer Detection
Enable DPD
10
seconds5
retries
- NAT TRaversal
Im Anschluss einmal unten auf Save und danach oben wieder auf Apply changes
Phase 2
Zur Konfiguration der Phase 2 müsst zunächst links unten auf das + Show Phase 2 Entries klicken:
und dann auf + Add P2:
Die Abschnitte füllt Ihr wie folgt aus (in Bildern etwas tiefer zu sehen):
- Tunnels
- Mode
Tunnel IPv4
- Local Network
- Type:
LAN subnet
- Type:
None
- Type:
- Remote Network
- Type:
Network
- Address:
Internes Netzwerk Fritzbox
/24
- Die 24 steht für eine 24er Maske, also Subnetmask 255.255.255.0
- Type:
- Mode
- Phase 2 proposal (SA/Key Exchange)
- Protocol
ESP
- Encryption algorithms
AES
256 bits
- Hash algorithms
SHA512
- PFS key group
14 (2048 bit)
- Lifetime
3600
- Protocol
- Advanced Options
- Automatically ping host
Interne IP eurer Fritz!Box
- Automatically ping host
Wieder auf Save und danach auf Apply changes
Rules
Geht auf
Firewall -> Rules -> IPSec
und baut eine neue Regel um den Datenverkehr aus dem Fritz!Box Netzwerk durchzulassen:
WICHTIG: Erstellt die gleich Regel noch einmal - mit ICMP. Sonst klappt zwar der Zugriff, aber es geht kein Ping durch die Leitung (fand ich sehr nervig!)
Damit sind wir auf der Seite der pfSense fertig!
Fritz!Box
Zunächst müsst eine neue Textdatei erstellen mit folgendem Inhalt:
vpncfg {
connections {
enabled = yes;
conn_type = conntype_lan;
name = "VPN nach Irgendwo"; // NAME der Verbindung
always_renew = yes; // Verbindung immer herstellen
reject_not_encrypted = no;
dont_filter_netbios = yes;
localip = 0.0.0.0;
local_virtualip = 0.0.0.0;
remoteip = 198.100.144.136; // Feste oeffentliche IP der pfSense Firewall
remote_virtualip = 0.0.0.0;
localid {
fqdn = "testlinz.dyndns.org"; // dyndns name der FritzBox
}
remoteid {
ipaddr = 198.100.144.136; // Feste oeffentliche IP der pfSense Firewall
}
mode = phase1_mode_aggressive;
phase1ss = "dh14/aes/sha";
keytype = connkeytype_pre_shared;
key = "e24556bcfc49bb1129872bd5c3fa6dbb34011b4715320c0a0f88243b"; // Der gleiche wie in der pfSense Phase 1
cert_do_server_auth = no;
use_nat_t = no;
use_xauth = no;
use_cfgmode = no;
phase2localid {
ipnet {
ipaddr = 192.168.1.0;
mask = 255.255.255.0;
}
}
phase2remoteid {
ipnet {
ipaddr = 192.168.200.0; // Das interne Netzwerk LAN hinter der pfSense
mask = 255.255.255.0; // inklusive Subnetmask
}
}
phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
accesslist = "permit ip any 192.168.200.0 255.255.255.0"; // Firewall Einstellungen für pfSense Subnetz
}
ike_forward_rules = "udp 0.0.0.0:500 0.0.0.0:500",
"udp 0.0.0.0:4500 0.0.0.0:4500";
}
Kopiert euch das obige in eine Textdatei (.txt) und passt die Namen und IP-Adressen an:
- alle
198.100.144.136
durch die öffentliche IP eurer pfSense - alle
192.168.200.0
durch das interne Netzwerk eurer pfSense - alle
192.168.1.0
durch das interne Netzwerk eurer Fritz!Box
Dann Importiert Ihr die Datei in eure Fritz!Box:
Dann wird die Datei Importiert und der Tunnel aufgebaut:
Das war schon alles!
Per Ping können wir nun die Verbindung testen.
Fehler mit IPv6 Protokoll
Falls der Verbindungsaufbau immer mal wieder nicht klappt und Ihr sowohl auf der Fritz!Box als auch auf der pfSense das IPv6 Protokoll aktiv habt schaut doch mal hier:
pfSense - IPSec mit IPv4 Remote IP wird aber IPv6 genommen