Inhaltsverzeichnis

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

Menü: VPN → IPsec → Show Phase 2 Entries ⇒ Add P2

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:

  1. Erstellung einer neuen Netzwerkschnittstelle für Wireguard
  2. IP Adresse für die neue Netzwerkschnittstelle setzen
  3. Wireguard Tunnel auf der neuen Netzwerkschnittstelle konfigurieren (entsprechende Konfiguration für einen Tunnel/Peer muss auf der Gegenseite vorhanden sein)
  4. 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"