PFsense
VPN zur Fritzbox
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.
VPN Einstellungen der PFsense
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
- General Information
- Description: Name der VPN Verbindung
- IKE Endpoint Configuration
- Key Exchange version: IKEv1
- Internet Protocol: IPv4
- Interface: WAN
- Remote Gateway: DynDNS Adresse der Fritzbox
- Phase 1 Proposal (Authentication)
- Authentication Method: Mutual PSK
- Negotiation mode: Aggressive
- My identifier: Fully qualified domain name → DynDNS Adresse der PFsense
- Peer identifier: Fully qualified domain name → DynDNS Adresse der Fritzbox
- Pre-Shared Key: Der eigene Key (kann auch von der PFsense generiert werden)
- Phase 1 Proposal (Encryption Algorithm)
- Encryption Algorithm: AES
- Algorithm: 256 bits
- Key length: SHA512
- Hash: 14 (2048 bit)
- Expiration and Replacement
- Life Time: 28800
- Advanced Options
- Dead Peer Detection: Enable DPD
Menü: VPN → IPsec → Show Phase 2 Entries ⇒ Add P2
- General Information
- Description: Name der Phase 2 Verbindung
- Mode: Tunnel IPv4
- Networks
- Local Network: eigenes Netzwerk oder Host im eigenen Netzwerk
- Remote Network: entferntes Netzwerk oder Host im entfernten Netzwerk
- Phase 2 Proposal (SA/Key Exchange)
- Protocol: ESP
- Encryption Algorithms: AES ⇒ 256 bits
- Hash Algorithms: SHA512
- PFS key group: wie in Phase 1 (hier: 14 (2048 bit))
- Expiration and Replacement
- Life Time: 3600
- Keep Alive
- Automatically ping host: eine IP Adresse im entfernten Netzwerk
VPN Einstellungen der Fritzbox
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"; }
Wireguard zwischen 2 PFsense
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
Verbinden von Linux
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:
- Erstellung einer neuen Netzwerkschnittstelle für Wireguard
- IP Adresse für die neue Netzwerkschnittstelle setzen
- Wireguard Tunnel auf der neuen Netzwerkschnittstelle konfigurieren (entsprechende Konfiguration für einen Tunnel/Peer muss auf der Gegenseite vorhanden sein)
- neue Netzwerkschnittstelle aktivieren
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>
Android
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"