Die Fritzbox unterstützt von Haus aus IPsec über IKEv1.
Diverse Einstellungen müssen auf beiden Firewalls gleich sein um den VPN-Tunnel aufzubauen.
Der VPN-Tunnel bleibt nicht dauerhaft aufrecht und wird aufgebaut, sobald man z.B. ein Gerät des entfernten Netzwerks pingt.
Folgende Einstellungen können (die P1 und P2 Proposals sollten zur Fritzbox passen; Informationen dazu in der Hilfe der Fritzbox unter Stichwort „Firmen-VPN“) in der PFsense eingerichtet werden.
Menü: VPN → IPsec ⇒ Add P1
Menü: VPN → IPsec → Show Phase 2 Entries ⇒ Add P2
In der Fritzbox wird die u.a. Konfiguration als Datei importiert
Menü: Internet → Freigaben → VPN ⇒ VPN-Verbindung hinzufügen ⇒ Eine VPN-Konfiguration aus einer vorhandenen VPN-Einstellungsdatei importieren
VPN-Konfiguration anpassen und in eine Datei namens <DATEINAME>.cfg
vpncfg { connections { enabled = yes; conn_type = conntype_lan; name = "<NAME_DER_VPN_VERBINDUNG>"; always_renew = yes; reject_not_encrypted = no; dont_filter_netbios = yes; localip = 0.0.0.0; local_virtualip = 0.0.0.0; remoteip = 0.0.0.0; remote_virtualip = 0.0.0.0; remotehostname = "<DDNS_ADRESSE_DER_PFSENSE>"; localid { fqdn = "<DDNS_ADRESSE_DER_FRITZBOX>"; } remoteid { fqdn = "DDNS_ADRESSE_DER_PFSENSE"; } mode = phase1_mode_aggressive; phase1ss = "dh14/aes/sha"; ## oder phase1ss = "all/all/all" keytype = connkeytype_pre_shared; key = "<DER_EIGENE_PRE_SHARED_KEY>"; cert_do_server_auth = no; use_nat_t = yes; use_xauth = no; use_cfgmode = no; phase2localid { ipnet { ipaddr = <IP_SUBNETZ_DER_FRITZBOX>; mask = 255.255.255.0; } } phase2remoteid { ipnet { ipaddr = <IP_SUBNETZ_DER_PFSENSE>; mask = 255.255.255.0; } } phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs"; ## oder phase2ss = "esp-all-all/ah-none/comp-all/pfs" accesslist = "permit ip any <IP_SUBNETZ_DER_PFSENSE> 255.255.255.0"; } 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"; }
Hier entsteht eine Anleitung.
dst pfsense https://docs.netgate.com/pfsense/en/latest/recipes/wireguard-ra.html
-create tunnel for src pfsense
-create peer for src pfsense
-create FW rule for wireguard port
-create FW rule for peer (src pfsense)
src pfsense https://docs.netgate.com/pfsense/en/latest/recipes/wireguard-client.html
-create tunnel to dst pfsense
-create peer for dst pfsense
-set default routes to own gateways
-add interface for tunneldevice
-for tunneldevice set ip of src pfsense and add new gateway for wg tunnel
-set outbound nat to hybrid outbound nat
-create outbound nat roule with tunndeldevice interface and desired src ip or subnets
-create FW rule from src ip or subnets to ip or subnets behind wireguard tunnel on dst pfsense with gateway as tunneldevice interface with desired protocols and/or ports
Wireguard installieren.
sudo apt install wireguard-tools
Private- und Publickeys erstellen
wg genkey | tee privatekey | wg pubkey > publickey
WICHTOG: Die Schlüssel insbes. den Privatekey an einem sicheren Ort verwahren.
Hier eine Verbindung quick and dirty über das Terminal ohne Konfigurationsdatei.
sudo ip link add dev wg0 type wireguard sudo ip address add dev wg0 <CIDR-ADRESSE_DES_CLIENTS_IM_TUNNEL_MIT_SUBNETZMASKE_DES_NETZES> sudo wg set wg0 listen-port 51820 private-key <PFAD_ZU_PRIVATEKEY> peer <PUBLICKEY_DER_GEGENSEITE> allowed-ips <SUBNETZ_IM_TUNNEL_IN_CIDR> endpoint <IP_ADRESSE_DER_GEGENSTELLE>:<WIREGUARD_LISTENPORT_DER_GEGENSTELLE> sudo ip link set up dev wg0
Erklärung:
Ab diesem Zeitpunkt sollte es möglich sein eine IP Adresse im Tunnel zu erreichen (z.B. Ping)
Mit diesem Befehl kann man sich den Status von Wireguardverbindung anzeigen lassen.
bash>sudo wg
Man kann den Tunnel auch zunächst in einer Konfigurationsdatei definieren und dann Wireguard die Verbindung aufbauen lassen
Mit der oben erstellen und funktionierenden Verbindung kann man mit diesem Befehl einen Teil des Inhaltes für die Konfigurationsdatei ausgeben lassen.
sudo wg showconf wg0
Hier die Ausgabe:
[Interface] ListenPort = <EIGENER_LISTENPORT> (kann auf standard 51820 gesetzt sein) PrivateKey = <ZUVOR_ERSTELLTER_PRIVATEKEY> [Peer] PublicKey = <PUBLICKEY_DER_GEGENSTELLE> AllowedIPs = <SUBNETZ_IM_TUNNEL_IN_CIDR> Endpoint = <IP_ADRESSE_DER_GEGENSTELLE>:<WIREGUARD_LISTENPORT_DER_GEGENSTELLE>
Zu dieser Konfiguration kann man u.a. Zeile in den [Interface]
Teil hinzufügen, dann braucht man vorher keine Netzwerkschnittstelle mit IP Adresse erstelle.
Address = <CIDR-ADRESSE_DES_CLIENTS_IM_TUNNEL_MIT_SUBNETZMASKE_DES_NETZES>
Die Konfigurationsdatei wird gespeichert unter /etc/wireguard/<DATEINAME>.conf
.
Wenn zuerst die o.g. Methode angewandt wurde, muss die erstellte Netzwerkschnittstelle entfernt werden, damit Wireguard diese dynamisch erstellen kann.
sudo ip a flush dev wg0 sudo ip link delete wg0
Mit diesem Befehl verbindet man sich schließlich per Wireguard:
sudo wg-quick up <KONFIGURATIONSDATEINAME>
Die offizielle Wireguard App installieren.
Eine Konfiguration (beispiel unten) erstellen.
[Interface] PrivateKey = <PRIVATEKEY_DES_PEERS> ListenPort = 51820 Address = <IP_DES_PEERS> [Peer] PublicKey = <PUBLICKEY_DES_TUNNELS> AllowedIPs = <ERLAUBTE_IP_ADRESSEN_ODER_SUBNETZE> Endpoint = <WIREGUARD_TUNNEL_GATEWAY>:51820
Nun kann man in der App die Daten eingeben oder per QRCode importieren.
Dazu installiert man qrencode
und bildet damit den QRCode.
sudo apt install qrencode
Den QRCode erstellt man aus der o.g. Konfigurationdatei wie folgt:
qrencode -t ansiutf8 -r "wg_nbw_tablet.conf"