DynDNS mit DS-Lite für L2tp mit MikroTik
Hallo zusammen,
ich möchte gerne einen MikroTik einrichten als L2tp Server.
Das sollte ich vermutlich hinbekommen da es hier ja wirklich gute Anleitungen gibt mit denen ich das bereits schon mal umgesetzt habe.
Jetzt ist es aber so das der Internetanschluss ein DS-Lite Anschluss ist und ich damit keine Möglichkeit habe, die IPv4 Adresse als DynDNS einzurichten...
Klappt das ganze auch über IPv6 in Verbindung mit Strato ?
Wenn ja, wie ? Und wenn nein, welche Alternativen habe ich ? Abgesehen vom Buisness Tarif damit ich eine statische Adresse kriege...
VG
ich möchte gerne einen MikroTik einrichten als L2tp Server.
Das sollte ich vermutlich hinbekommen da es hier ja wirklich gute Anleitungen gibt mit denen ich das bereits schon mal umgesetzt habe.
Jetzt ist es aber so das der Internetanschluss ein DS-Lite Anschluss ist und ich damit keine Möglichkeit habe, die IPv4 Adresse als DynDNS einzurichten...
Klappt das ganze auch über IPv6 in Verbindung mit Strato ?
Wenn ja, wie ? Und wenn nein, welche Alternativen habe ich ? Abgesehen vom Buisness Tarif damit ich eine statische Adresse kriege...
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 42940314658
Url: https://administrator.de/contentid/42940314658
Ausgedruckt am: 21.11.2024 um 15:11 Uhr
54 Kommentare
Neuester Kommentar
ich möchte gerne einen MikroTik einrichten als L2tp Server.
Kein Problem, guckst du HIER! Jetzt ist es aber so das der Internetanschluss ein DS-Lite Anschluss ist
Das ist sehr schlecht, denn damit scheitert zumindestens für IPv4 dieses Unterfangen. Bei DS-Lite Anschlüssen ist es bekanntlich generell technisch unmöglich per IPv4 auf Router oder Firewall von remote zuzugreifen egal ob VPN oder Port Forwarding.
Du scheiterst am zentralen CG-NAT Gateway des Providers das prinzipbedingt nicht überwunden werden kann mit IPv4.
Ein direkter Zugriff ist nur per IPv6 möglich. Damit klappt es natürlich fehlerlos. Bedeutet aber das der VPN Client dann auch in einem Netz ist das IPv6 kann wie z.B. alle Mobilfunknetze.
welche Alternativen habe ich ?
Die klassische Alternative ist ein Jumphost mit einem preiswerten vServer.
Tailscale ist zu einem großen Teil OpenSource und wenn man das mit dem Fremdhost nicht möchte, kann man eigene Hosts mit Tailscale einrichten.
Das Projekt heißt Headscale. Mir ist das für mein privates Netz zu viel Aufwand und so wie das Setup von OP aussieht, denke ich auch an ein SOHo Umfeld.
Kein Unternehmen, welches ich berate, hat ein DS Lite Anschluss.
Grüße Daniel
Das Projekt heißt Headscale. Mir ist das für mein privates Netz zu viel Aufwand und so wie das Setup von OP aussieht, denke ich auch an ein SOHo Umfeld.
Kein Unternehmen, welches ich berate, hat ein DS Lite Anschluss.
Grüße Daniel
Huhu, Ich gehe davon aus Du bist bei Vodafone?
Möglichkeit 1: auf Bridge Mode umstellen lassen.
Möglichkeit 2: Einen Server aus der Cloud vorschalten, dann von daheim mittels ipsec eine Verbindung zu Cloud und nachher Traffic über Tunnel leiten.
Fund aus dem Netz
https://youtu.be/7QBh1YVoaj8?si=ie9N8p3rdeyl5e3n
Möglichkeit 1: auf Bridge Mode umstellen lassen.
Möglichkeit 2: Einen Server aus der Cloud vorschalten, dann von daheim mittels ipsec eine Verbindung zu Cloud und nachher Traffic über Tunnel leiten.
Fund aus dem Netz
https://youtu.be/7QBh1YVoaj8?si=ie9N8p3rdeyl5e3n
Warum machst du dir das Leben schwer und installierst solche Frickeleien? Und dann auch noch mit unsicherem Port Forwarding wo jeder dann offen die Daten mitlesen kann. Ein NoGo sofern dir dein Datenschutz etwas wert ist.
Das o.a. Jumphost Tutorial serviert dir doch eine wasserdichte Anleitung auf dem Silbertablett zum Abtippen wo du jeden onboard VPN Client auf allen Endgeräten nutzen kann? Einfacher gehst ja nun nicht.
Wenn du eine FritzBox mit einer 7.5er Firmware hast kannst du den Jumphost auch mit Wireguard VPN aufsetzen. Ein Tutorial dazu findest du HIER.
Du hast die freie Wahl zwischen 2 einfachen Lösungen. Aber man kann natürlich auch nach dem Motto warum einfach machen wenn's umständlich auch geht agieren.
Das o.a. Jumphost Tutorial serviert dir doch eine wasserdichte Anleitung auf dem Silbertablett zum Abtippen wo du jeden onboard VPN Client auf allen Endgeräten nutzen kann? Einfacher gehst ja nun nicht.
Wenn du eine FritzBox mit einer 7.5er Firmware hast kannst du den Jumphost auch mit Wireguard VPN aufsetzen. Ein Tutorial dazu findest du HIER.
Du hast die freie Wahl zwischen 2 einfachen Lösungen. Aber man kann natürlich auch nach dem Motto warum einfach machen wenn's umständlich auch geht agieren.
Das sagt sich einfach wenn man sich gut auskennt
Sollte ja eigentlich auch so sein wenn man in einem Administrator Forum unterwegs ist. Sonst geht man ja zu gutefrage.net ! Du hast alles richtig gemacht soweit. Die nftables solltest du erstmal NICHT aktivieren, denn wenn du dir noch mehr Stolpersteine in den Weg legst macht das die Sache nicht einfacher. Also zum Testen den Part erstmal weglassen!!
Allen hätte zum Troubleshooting deine verwendeten Konfig Dateien hier sehr geholfen. Leider fehlen diese. So sind wir hier jetzt alle zum blinden Kristallkugeln verdammt. Du kannst dir selber denken das das eine zielführende Hilfe noch weiter erschwert... Welche Erwartungshaltung hast du also an eine Lösung?
Außerdem habe ich keine Ahnung wie ich jetzt mit einem Laptop von außen drauf kommen würde...
Auch das beschreibt doch das Tutorial haarklein! Hast du es denn wirklich gelesen und verstanden?? 🤔Du startest den IKEv2 VPN Client auf deinem Laptop, trägst die vServer IP oder Hostnamen als Ziel ein, User und Passwort...fertisch. Steht doch alles im Tutorial.
Bedenke das du dafür die Zertifikate erstellen und auf den Laptop importieren musst. Ist das geschehen?
dass solange der Status nicht auf grün springt ich mir die Einwahlversuche sowieso sparen kann...
Das ist absolut richtig geschlussfolgert!! Wie gesagt...helfen würde deine vServer Konfig und die Fritz VPN Datei.sondern einen ganz normalen IPv4. Sollte ja aber trotzdem möglich sein, richtig ?
Das ist auch richtig. Für einen Test spielt das keine Rolle. id = fqdn:157.x.x.x <<<Adresse des vServers
Das geht so nicht, denn bei einer FQDN Deklaration kann man logischerweise keine IP angeben! Das muss dann mit "ip" geschehen wenn man das so will.Tip:
Wenn du rein nur eine IP hast aber keinen FQDN Hostnamen kannst du immer freie Hostnamen von nip.io auf Basis der IP verwenden! Die verhalten sich wie FQDN Hostnamen ohne das du einen DNS Hostnamen registrieren musst.
Klappt auch mit dem IP Adressen im heimischen LAN!
Wenn deine vServer Hostadresse also z.B. die 157.10.20.30 ist, dann ist der FQDN Name dazu
- 157-10-20-30.nip.io
- 9d0a141e.nip.io
- vserver-157-10-20-30.nip.io
- vserver-9d0a141e.nip.io
Diese FQDN Namen kannst du dann später auch bequem für die Zertifikatserzeugung nehmen.
(Ein GUI für die Konvertierung der 4 Octets zu Hex Ziffern findest du u.a. hier.)
Thema VPN Konfig...
Wollte erstmal die Verbindung zwischen FritzBox und vServer herstellen, dafür benötige ich das Zertifikat noch nicht, oder ?
Richtig, dafür ist KEIN Zertifikat erforderlich!Das Problem ist aber das wenn du die IKEv2 Server Definition mit in der Konfig hast und dort einen Syntax Fehler wie den obigen eingebaut hast der Daemon wegen dieses Fehlers nicht starten kann und damit dann auch die Fritzbox Verbindung scheitert.
Heisser Tip:
Lass erstmal die IKEv2 Server Konfig komplett weg und definiere dort erstmal rein nur die Fritzbox Connection.
Alles was .conf als Endung hat lädt der Daemon automatisch so das du den IKEv2 Server auch später mit einer separaten .conf Datei im Verzeichnis realisieren kannst. 😉
Also erstmal dann rein nur die FB Konfig zum Fliegen bringen und keine anderen .conf Dateien außer der der Fritzbox im Verzeichnis
Die sieht dann so aus:
connections {
fritzbox {
local_addrs = 157.x.x.x
remote_addrs = 0.0.0.0/0
local {
auth = psk
id = 157.x.x.x
}
remote {
auth = psk
id = keyid:strongswan@fritz.box
}
children {
net {
local_ts = 172.25.24.0/23
remote_ts = 192.168.178.0/24
esp_proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
}
}
version = 1
proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
}
}
secrets {
ike-1 {
id = keyid:strongswan@fritz.box
secret = "Geheim123!"
}
}
Wenn fehlerfrei den Daemon mit systemctl restart strongswan neu starten.
Die dazu korrespondierende Fritzbox VPN Konfig Datei zum Import sieht dann so aus:
vpncfg {
connections {
enabled = yes;
editable = no;
conn_type = conntype_lan;
name = "Mein-vServer";
always_renew = no;
reject_not_encrypted = no;
dont_filter_netbios = yes;
localip = 0.0.0.0;
local_virtualip = 0.0.0.0;
remoteip = 157.x.x.x;
remote_virtualip = 0.0.0.0;
keepalive_ip = 172.25.24.1;
localid {
key_id = "strongswan@fritz.box";
}
remoteid {
ipaddr = 157.x.x.x;
}
mode = phase1_mode_idp;
phase1ss = "LT8h/all/all/all";
keytype = connkeytype_pre_shared;
key = "Geheim123!";
cert_do_server_auth = no;
use_nat_t = yes;
use_xauth = no;
use_cfgmode = no;
phase2localid {
ipnet {
ipaddr = 192.168.178.0;
mask = 255.255.255.0;
}
}
phase2remoteid {
ipnet {
ipaddr = 172.25.24.0;
mask = 255.255.254.0;
}
}
phase2ss = "esp-all-all/ah-none/comp-all/pfs";
accesslist = "permit ip any 172.25.24.0 255.255.254.0";
}
}
Sehr hilfreich zum Troubleshooting ist immer der Output von swanctl -q
Desweiteren wenn du vor der Einwahl bzw. Aktivieren des VPN auf der FB einmal ein swanctl -T eingibst und dann die Fritzbox rebootest, ihr einmal den WAN Port ziehst, oder den blauen Haken zum Deaktivieren und Aktivieren des VPN setzt so das die FB die VPN Connection neu triggert.
Dann zeigt dir der swanctl -T Output ein sehr detailiertes Protokoll der IPsec VPN Einwahl deiner Fritzbox auf deinem vServer. Dort kann man ggf. auch sofort Fehler erkennen.
Das swanctl -T Logging kannst du mit Ctrl-C dann wieder stoppen.
Tut es
👏 👍Heißt unterm Strich, ich erstelle jetzt eine ikev2.conf mit folgendem inhalt: ?????
Ja!Allerdings mit einer kleinen Korrektur, denn das braucht natürlich einen separaten connections {...} Abschnitt!
So sähe es richtig aus:
connections {
ikev2-mobile-vpn {
unique = replace
version = 2
proposals = aes256-sha512-modp2048,aes256-sha256-modp2048,aes256-sha256-modp1024
send_cert = always
pools = pool-ipv4
local_addrs = 157.x.x.x
remote_addrs = 0.0.0.0/0,::/0
local {
auth = pubkey
certs = DeinServerZertifikat.pem
id = fqdn:157.x.x.x.nip.io
}
remote {
id = %any
auth = eap-mschapv2
eap_id = %any
}
children {
ikev2-mobile {
local_ts = 0.0.0.0/0
esp_proposals = aes256-sha512,aes256-sha384,aes256-sha256,aes256-sha1
start_action = trap
}
}
}
}
pools {
pool-ipv4 {
addrs = 172.25.25.0/24
dns = 9.9.9.9, <ggf._provider_dns>, 192.168.178.1
}
}
secrets {
eap-1 {
id = user1
secret = "Passw00rt1"
}
eap-2 {
id = user2
secret = "Passw00rt2"
}
Diese packe ich dann ins gleiche Verzeichnis wie die jumphost.conf, richtig ?
Jepp..! Richtig, wenn jumphost.conf deine Fritzbox Konfig ist. (meinefritzbox.conf wäre ja etwas sinnvoller aber ist ja alles Kosmetik. 😉)Dabei bekomme ich diese Meldung:
Ooops...das ist blöd. apt install strongswan-pki hast du ausgeführt?!
Wenn ja mache mal folgendes:
apt update
apt-cache search libtss2-tcti-tabrmd
apt install libtss2-tcti-tabrmd-dev
und versuchst es nochmal.
Wenn alle Stricke reissen kann man das auch bequem und entspannt über ein GUI auf einem Winblows Rechner machen:
https://hohnstaedt.de/xca/
Oder per OpenSSL:
https://legacy.thomas-leister.de/eine-eigene-openssl-ca-erstellen-und-ze ...
Kosmetischer Tip:
Den Dateiname "raspica-key.pem" solltest du ggf. auf deinen vServer Hostnamen anpassen und das "raspi" damit ersetzen also "meinvserverca-key.pem"
Das hat geklappt
👍Hast Du Dich hier verschrieben ?
Ooops, ja. Ist korrigiertEine .crt Datei kommt doch mit den oberen Befehlen gar nicht raus
Ja, da hast du Recht. Manche schreiben ein .pem andere .crt. Letztlich ist das egal.Ich habe das oben aber alles korrigiert damit es nicht zu Verwirrung führt. Sorry nochmal... 🙈
Sorry aber bei den Zertifikaten habe ich gerade ein riesen Fragezeichen im Gesicht...
Relevant für die Funktion ist einzig und allein nur das Server Zertifikat was unter .../x509 und das CA Zertifikat was unter .../x509ca steht.Letzteres musst du in deine Endgeräte importieren!
Die Key Dateien sind nicht relevant, stören aber auch nicht.
Nochmal schrittweise:
- Die CA brauchst du um überhaupt ein Server Zertifikat zu generieren. Das ist quasi die Ausweisbehörde
- Die CA selber hat auch ein Zertifikat und eine Key Datei. Letztere ist für die Funktion nicht relevant. Das CA Zertifikat kommt in die Endgeräte als vertrauenswürdig, denn wenn bei Einwahl das Server Zertifikat abgefragt wird prüft der Client ob die "Ausweisbehörde" da einen Stempel druntergemacht hat. Fehlt der Stempel kommst du nicht rein. Wie im richtgen Leben also. Diese, bei IKEv2 Clients eingebaute Prüfung, stellt also nochmal eine zusätzliche Sicherheit dar, das deinen Clients niemand einen Fake VPN Server unterjubeln kann.
- Mit Hilfe des CA Zertifikats (quasi als "Behördenstempel") generierst du das Server Zertifikat und den Server Key wobei hier auch Letzterer wieder nicht für die Funktion relevant ist.
- Sehr wichtig sind im Server Zertifikat aber der CN Name und --san!! Das verifizieren einige VPN Clients. Der Windows Client z.B. immer mit dem was als Server Zieladresse angegeben ist. Wenn du also dort als als Serveradresse 157.x.x.x.nip.io im FQDN Format verwendest, dann MUSS dieser FQDN auch als CN oder --san definiert sein, ansonsten verweigert der Windows Client den Zugang. Bei Apple kann man das mit der "remote ID" im VPN Client immer separat einstellen ob man hier IP oder FQDN nimmt zur Verifikation. Bei Windows ist das immer an das Format der Serveradresse gekoppelt!!
Hab jetzt mal alles durchgebootet
Auch ein systemctl restart strongswan gemacht?!Output von swanctl -q ??
Was hast du als CN Name im Zertifikat angegeben?? Denk dran was oben steht das du als Zieladresse auch die remote ID verwenden musst!! Deshalb ist es immer sinnig IP und FQDN in das Zertifikat zu bringen das beides angegeben werden kann!!
So oder so ist das jetzt rumraten...
Hilfreich wie oben ist wieder mal der swanctl -T Output wenn der Client einwählt.
Tip:
Kopiere VORHER das Fritzbox Conn Profil woanders hin das das nicht zusätzlich lädt und die das Logging beim Troubleshooting vollmüllt. So hast du dann nur rein den IPV2 Server im Logging beim Testen!!
Auch hier wenn du was an der Konfig änderst immer systemctl restart strongswan und/oder swanctl -q damit du sehen kannst ob alles korrekt geladen wurde!
Hast du dann in der VPN Konfig den Domain Namen eingegeben als Serveradresse und als remote ID??
Wenn ja lauert hier der Teufel im Detail sollte der vServer auch über IPv6 erreichbar sein, weil der Client dann primär den Hostnamen auf die IPv6 Adresse auflöst der aber keine VPN Konfig für v6 hat.
Um dem sicher aus dem Weg zu gehen kannst du zumindestens auf dem iPhone einmal die Server IP direkt als nackte IP angeben und nicht den Hostnamen. Damit erzwingt man dann eine v4 Verbindung.
Die remote ID muss aber auf dem FQDN bleiben, weil der ja auch im Zertifikat ist.
Deine IKEv2 Message ist eigentlich OK, das Zertifikat wird ja auch richtig eingelesen wie du am Logging sehen kannst.
Eigentlich sollte es nach "peer supports MOBIKE" dann so weitergehen...
(Der o.a. iPhone VPN Client öffnet hier das VPN aus einem lokalen WLAN 192.168.1.0/24)
Sprich, dein Server kommt gar nicht zur MS-CHAPv2 Authentisierung, ansonsten müsste er das negotiating mit den User Credentials, wie oben, anzeigen. Irgendwas mag er also am Zertifikat nicht. Mmhhh... 🤔
⚠️ Das mag an einem Kardinalsfehler liegen....
Das Logging zeigt ja das du im Zertifikat als FQDN Namen 157-x-x-x.nip.io definiert hast.
In deiner Server Konfig steht aber id = fqdn:157.x.x.x.nip.io mit Punkten statt richtig mit "-" wie im Zertifikat angegeben!!
Das gibt dann natürlich einen Mismatch der FQDN Hostadresse und dann bricht der Server die Verbindung ab weil die FQDN Adresse nicht übereinstimmt!
Hier muss in deine VPN Server Konfig dann natürlich unbedingt:
id = fqdn:157-97-109-171.nip.io
rein!! Das muss identisch mit dem CN im Zertifikat sein!
Vermutlich liegt es daran?!
Wenn ja lauert hier der Teufel im Detail sollte der vServer auch über IPv6 erreichbar sein, weil der Client dann primär den Hostnamen auf die IPv6 Adresse auflöst der aber keine VPN Konfig für v6 hat.
Um dem sicher aus dem Weg zu gehen kannst du zumindestens auf dem iPhone einmal die Server IP direkt als nackte IP angeben und nicht den Hostnamen. Damit erzwingt man dann eine v4 Verbindung.
Die remote ID muss aber auf dem FQDN bleiben, weil der ja auch im Zertifikat ist.
Deine IKEv2 Message ist eigentlich OK, das Zertifikat wird ja auch richtig eingelesen wie du am Logging sehen kannst.
Eigentlich sollte es nach "peer supports MOBIKE" dann so weitergehen...
....
09[IKE] peer supports MOBIKE
09[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
09[IKE] authentication of '157.x.x.x.nip.io' (myself) with RSA signature successful
09[IKE] sending end entity cert "CN=157.x.x.x.nip.io, C=DE"
09[ENC] generating IKE_AUTH response 1 [ IDr CERT AUTH EAP/REQ/ID ]
09[ENC] splitting IKE message (1632 bytes) into 2 fragments
09[ENC] generating IKE_AUTH response 1 [ EF(1/2) ]
09[ENC] generating IKE_AUTH response 1 [ EF(2/2) ]
09[NET] sending packet: from 157.x.x.x[4500] to 80.x.x.x[5162] (1236 bytes)
09[NET] sending packet: from 157.x.x.x[4500] to 80.x.x.x[5162] (468 bytes)
13[NET] received packet: from 80.x.x.x[5162] to 157.x.x.x[4500] (96 bytes)
13[ENC] parsed IKE_AUTH request 2 [ EAP/RES/ID ]
13[IKE] received EAP identity 'user'
13[IKE] initiating EAP_MSCHAPV2 method (id 0x7A)
13[ENC] generating IKE_AUTH response 2 [ EAP/REQ/MSCHAPV2 ]
13[NET] sending packet: from 157.x.x.x[4500] to 80.x.x.x[5162] (112 bytes)
16[NET] received packet: from 80.x.x.x[5162] to 157.x.x.x[4500] (144 bytes)
16[ENC] parsed IKE_AUTH request 3 [ EAP/RES/MSCHAPV2 ]
16[ENC] generating IKE_AUTH response 3 [ EAP/REQ/MSCHAPV2 ]
16[NET] sending packet: from 157.x.x.x[4500] to 80.x.x.x[5162] (144 bytes)
07[NET] received packet: from 80.x.x.x[5162] to 157.x.x.x[4500] (80 bytes)
07[ENC] parsed IKE_AUTH request 4 [ EAP/RES/MSCHAPV2 ]
07[IKE] EAP method EAP_MSCHAPV2 succeeded, MSK established
07[ENC] generating IKE_AUTH response 4 [ EAP/SUCC ]
07[NET] sending packet: from 157.x.x.x[4500] to 80.x.x.x[5162] (80 bytes)
05[NET] received packet: from 80.x.x.x[5162] to 157.x.x.x[4500] (112 bytes)
05[ENC] parsed IKE_AUTH request 5 [ AUTH ]
05[IKE] authentication of '192.168.1.197' with EAP successful
05[IKE] authentication of '157.x.x.x.nip.io' (myself) with EAP
05[IKE] peer requested virtual IP %any
05[CFG] reassigning offline lease to 'user'
05[IKE] assigning virtual IP 172.25.25.1 to peer 'user'
05[IKE] peer requested virtual IP %any6
05[IKE] no virtual IP found for %any6 requested by 'user'
05[IKE] IKE_SA ikev2-mobile-vpn[125] established between 157.x.x.x[157.x.x.x.nip.io]...80.x.x.x[192.168.1.197]
Sprich, dein Server kommt gar nicht zur MS-CHAPv2 Authentisierung, ansonsten müsste er das negotiating mit den User Credentials, wie oben, anzeigen. Irgendwas mag er also am Zertifikat nicht. Mmhhh... 🤔
⚠️ Das mag an einem Kardinalsfehler liegen....
Das Logging zeigt ja das du im Zertifikat als FQDN Namen 157-x-x-x.nip.io definiert hast.
In deiner Server Konfig steht aber id = fqdn:157.x.x.x.nip.io mit Punkten statt richtig mit "-" wie im Zertifikat angegeben!!
Das gibt dann natürlich einen Mismatch der FQDN Hostadresse und dann bricht der Server die Verbindung ab weil die FQDN Adresse nicht übereinstimmt!
Hier muss in deine VPN Server Konfig dann natürlich unbedingt:
id = fqdn:157-97-109-171.nip.io
rein!! Das muss identisch mit dem CN im Zertifikat sein!
Vermutlich liegt es daran?!
👏👍 Glückwunsch! Zumindestens das iPhone rennt, was zeigt das deine Konfig generell OK ist!
Mmhhh... 🤔 Du siehst wieder wie oben das er am Zertifikat stehenbleibt. Irgendwas daran mag der Windows Client nicht oder.... du hast vergessen das CA Zertifikat in die "Vertrauenswürdigen Stammzertifizierungsstellen" zu importieren?!?
WAS genau hast du am Windows Client in der Registry fürs VPN verändert??
Dein Windows IKEv2 Client ist dadurch ja nicht mehr ganz "original". Möglich das da dann eins der Crypto Credentials fehlt.
Kannst du das vergleichsweise ggf. einmal mit einem jungfräulichen Windows Client probieren?
Mmhhh... 🤔 Du siehst wieder wie oben das er am Zertifikat stehenbleibt. Irgendwas daran mag der Windows Client nicht oder.... du hast vergessen das CA Zertifikat in die "Vertrauenswürdigen Stammzertifizierungsstellen" zu importieren?!?
WAS genau hast du am Windows Client in der Registry fürs VPN verändert??
Dein Windows IKEv2 Client ist dadurch ja nicht mehr ganz "original". Möglich das da dann eins der Crypto Credentials fehlt.
Kannst du das vergleichsweise ggf. einmal mit einem jungfräulichen Windows Client probieren?
👏👍 Glückwunsch!
Tja, es sind immer die kleinen Flüchtigkeitsfehler, die passieren schon mal im Eifer des VPN Gefechts!! Da muss dir nichts peinlich sein. Wichtig ist immer das man strategisch vorgeht, sie findet und beseitigt was du ja souverän gemacht hast! 😉
Fritzbox wählt sich als Initiator ein, Client am vServer und vom Client solltest du dann schon die IP der FB pingen können.
Dein vServer ist quasi ein Allround VPN Server.
Für die Clients reichst du einfach dein CA Zertifikat weiter zum Import und gibst jedem User eine weitere User ID die du nur unten in den "Secrets" hinzufügst.
Mit den Clients kannst du dann jedes verbundene FB Netz erreichen. Wenn du dort ein Regelwerk etablieren willst das nicht alle alles erreichen können machst du das mit iptables oder dem moderneren nftables. Einfache Logik!
Tja, es sind immer die kleinen Flüchtigkeitsfehler, die passieren schon mal im Eifer des VPN Gefechts!! Da muss dir nichts peinlich sein. Wichtig ist immer das man strategisch vorgeht, sie findet und beseitigt was du ja souverän gemacht hast! 😉
Schritt2: Was muss ich ändern wenn es dann um den eigentlichen DS-Lite Anschluss geht ?
Gar nichts mehr! Das ist ja schon deine laufende Konfig. Fritzbox wählt sich als Initiator ein, Client am vServer und vom Client solltest du dann schon die IP der FB pingen können.
Ich benötige doch nicht für mehrere Standorte je einen vServer oder ?
Nein, natürlich nicht. Dein vServer ist ja der zentrale Connection Punkt für alle. Du klonst quasi für jede weitere FB VPN Verbindung einfach nur deine fritzbox.conf Datei für die neue, setzt eine andere key ID und Passwort, fertisch. Alternativ kannst du auch andere VPN protokolle verwenden wie Wireguard.Dein vServer ist quasi ein Allround VPN Server.
Für die Clients reichst du einfach dein CA Zertifikat weiter zum Import und gibst jedem User eine weitere User ID die du nur unten in den "Secrets" hinzufügst.
Mit den Clients kannst du dann jedes verbundene FB Netz erreichen. Wenn du dort ein Regelwerk etablieren willst das nicht alle alles erreichen können machst du das mit iptables oder dem moderneren nftables. Einfache Logik!
vielen Dank für deine bisherige Hilfe
Immer gerne! Dafür ist ein Forum ja da...😊nftables muss nach jedem Serverreboot gestartet werden weil er nicht automatisch startet
Die Lösung ist kinderleicht: systemctl enable nftables löst das Problem. Das gleiche gilt für Strongswan. systemctl enable strongswan
Obiges kann aber variieren je nachdem wie der Strongswan/swanctl Service in deiner Distro benannt wurde.
Ein systemctl status strongswan oder systemctl status strongswan-swanctl sollte dir das zeigen.
Das "enable" Keyword bedeutet das dieses Services beim Booten gestartet werden.
Auch nichts im Bezug auf ipv6 oder so ?
Nein, denn versteht man dich richtig, willst du den Jumphost ja (erstmal) nur für IPv4 verwenden, oder?IPv6 hast du bei DS-Lite ja so oder so immer.
Willst du allerdings auch v6 routen, dann muss man das natürlich anpassen.
Das der Strongswan Dienst nicht richtig startet nach dem Booten ist ungewöhnlich. 🤔
Ggf. macht es Sinn den Start nach dem Autostart der nftables Firewall etwas zu verzögern sollten diese beiden Dienste sich in die Quere kommen. Das müsste man mal checken.
Du kannst ja testweise einmal testweise temporär den automatischen Start der Firewall mit systemctl disable nftables deaktivieren und checken ob so der Strongswan Daemon dann sauber nach dem Reboot startet wenn er allein ist.
So weisst du das sich beide Daemons ggf. beeinflussen. Mit einem Delay kann man dann den IPsec Dienst etwas verzögern.
Aber mein iphone will jetzt nicht mehr
An der IKEv2 Konfig Datei hast du ja rein gar nichts geändert wenn du nur die Fritzbox Konfig angepasst, oder? Du nutzt ja aktuell für jede Connection jetzt eine separate .conf Datei, richtig?Damit funktionieren die dann völlig unabhängig voneinander. Das eine kann niemals das andere beeinflussen.
Bezeichnend ist aber der Fehler:
12[CFG] looking for peer configs matching 157.x.x.x[157-x-x-x.nip.io]...79.x.x.x[172.16.2.13]
12[CFG] no matching peer config found
Was besagt das Strongswan deinen konfigurierten IKEv2 Peer "157-x-x-x.nip.io" nicht findet im Connection Setup.
Kann es sein das du hier wieder Tippfehler hast Striche und Punkt usw.?
Ansonsten mit systemctl restart strongswan mal den Daemon neu starten.
Wenn alle Stricke reissen wieder strategisch vorgehen wie oben und alle Fritzbox .conf Dateien rauskopieren und nur den IKEv2 Server belassen, mit swanctl -q die Paramter laden und checken und den Daemon neu starten und erstmal wieder nur den IKEv2 Server fixen.
und zack klappt es
👍 Works as designed!! 😉Wenn ich jetzt 2 Standorte haben will.... kapiere es noch nicht so ganz...
Was ist daran nicht zu kapieren?? Ist doch kinderleicht:- Weitere .conf Datei für diesen 2ten Standort im Strongswan anlegen. Kannst die bestehende kopieren und passt da nur lokale LAN IP (phase2localid), KeyID und Passwort an.
- swanctl -q oder Daemon neu starten um die neue Konfig einzulesen
- Dazu korrespondierende Fritzbox VPN Datei in die weitere Fritzbox importieren
- Fertisch
⚠️ Zwei wichtige Punkte:
- Jede Fritzbox braucht eine individuelle KeyID
- ...und ein individuelles Passwort.
Es macht also Sinn die KeyIDs pro Standort entsprechend zu benennen.
Z.B key_id = "standort1@fritz.box"; und key_id = "standort2@fritz.box";. Das dient nicht nur der besseren Unterscheidung und Übersichtlichkeit sondern auch der Sicherheit!
Die KeyIDs sind dann entsprechend in den jeweiligen Strongswan .conf Dateien für die FBs und in den FB Importdateien anzupassen.
Auch die Passwörter müssen in der Strongswan Konfig Datei eindeutig sein. Du kannst nicht in beiden FB .conf Dateien " ike-1 {..." nutzen mit dem gleichen Index!!
Entweder nummerierst du das durch ala "ike-1 {..." und "ike-2 {..."oder nimmst sowas wie "ike-sto1 {..." und "ike-sto2 {...". Das ist Geschmackssache solange es nur unterschiedlich ist.
Zusätzlich musst du den Fritzboxen auch zwingend unterschiedliche Connection Namen in der Strongswan Konfig Datei geben. Z.B. standort1 oder fb-standort1 usw. je nach Geschmack
⚠️ Obacht:
Solltest du eine Any zu Any Kommunikation wünschen, also das die Fritzboxen bzw. ihre lokalen LANs auch untereinander über den Jumphost kommunizieren können, musst du das entsprechend noch in den FB Konfig Dateien ergänzen!
AVM hat dafür eine Anleitung in seinem VPN Knowledge Portal:
https://avm.de/service/wissensdatenbank/dok/FRITZ-Box-7490/230_Uber-IPSe ...
Auch hier findest du dazu Infos:
2 Netze hinter Fritzbox VPN
PFSense mit Fritzboxen verbinden
Hier ist also die accesslist unter der phase2ss entsprechend anzupassen.
Ansonsten sind deine Konfig Dateien oben alle korrekt!
Den Status deiner Peers kannst du auch immer mit ipsec statusall auf dem vServer ansehen.
Kann ich es denn so einstellen das bestimmte User nur in bestimmte Netze kommt ?
Wie meinst du das?? Wenn du doch die lokalen LANs der Fritzboxen koppelst??Nur so viel...
Eine Firewall filtert immer nach Netzwerk Traffic aber nicht nach User/Passwort. Wie sollte sie auch sowas erkennen? Denn ohne Customizing gilt beim Pool bekanntlich immer: First come, first serve??
Es gibt aber ein paar Workarounds sowas hinzubekommen.
Wenn du das für die mobilen Dialin User meinst kann man anhand der User/Pass Credentials eine feste IP Adresse vergeben aus dem Pool. Hier kann man dann wieder mit einem nftables Regelwerk bestimmen zu welchen IP Netzen, Hosts und Diensten (TCP/UDP Ports) diese User IPs dann Zugang haben sollen oder nicht.
Bei einer eventuellen LAN-LAN Kopplung der FBs ginge das auch wenn man Clients in der FB über die Mac Zuweisung feste IPs vergibt. Dann kann man die Clients anhand ihrer IPs auch wieder selektieren und mit einem entsprechenden Regelwerk belegen.
Machbar ist vieles...
Aber in der Konstellation würde es natürlich nicht gewollt sein das der User an Standort A in mein Netzwerk kommt oder in das meines Kumpels oder das mein Kumpel an mein Netzwerk kommt oder an den von Standort A usw...
Das ist verständlich und macht auch Sinn.Wenn das alles moderne FBs sind die Ver. 7.5x laufen haben könntest du die Verbindung der FBs auch auf Wireguard laufen lassen.
Das erspart dir dann das Customizing der Firewall, da im Wireguard Setup gleich definiert werden kann wer mit wem darf. (AllowedIPs Parameter)
Das würde das Setup zumindestens für den FB Zugriff etwas vereinfachen.
Das VPN Dialin für die mobilen Clients bleibt dann weiterhin auf dem IKEv2 Server um problemlos die onboard Clients nutzen zu können.
So ein Design ist auch umsetzbar wenn alle beteiligten FBs 7.5.x supporten. Ein apt install wireguard intstalliert dir alle Tools dafür und was du bei der etwas "speziellen" AVM WG Implementation zu beachten hast erklärt dir dieses Tutorial.
Meine keys habe ich über https://www.wireguardconfig.com/ generiert:
Völlig sinnfrei und auch sehr gefährlich sowas auf einer fremden Seite zu machen die ggf. dann deine ganzen VPN Keys kennt! 🧐Warum machst du das nicht bequem auf deinem vServer mit:
wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee fritzbox_private.key | wg pubkey > fritzbox_public.key
Dann musst du die zum Server passende FritzBox WG Client (Initiator) Datei unbedingt manuell anpassen, da die Fritzbox Wireguard Implementation NICHT Standard konform ist! Hast du das beachtet? (FB Fehler kommt zu 98% von einem falschen Key Format (Cut and Paste Fehler?!))
FB Wireguard Import Datei sollte dann so aussehen:
[Interface]
PrivateKey = <fritzbox_private.key>
Address = 192.168.178.1/24
[Peer]
PublicKey = <server_public.key>
AllowedIPs = 10.10.10.0/24,172.25.26.0/28
Endpoint = <dns-adresse_vServer>:51820
PersistentKeepalive = 25
Wie man die Fritzbox Datei entsprechend an einen klassischen WG Server anpasst erklärt dir das hiesige WG/AVM Tutorial!
Hatte ich gemacht aber hab die keys dann anschließend nicht gefunden
Oh man...🤦♂️ Die landen so doch immer in dem Verzeichnis in dem du auch aktuell bist. (Prompt) Ein ls -la in deinem aktuellen Verzeichnis hätten sie dir angezeigt. 😉Wenn du das Verzeichnis fest bestimmen willst gibst du das in den Kommandos logischerweise dediziert an:
wg genkey | tee /home/user1/server_private.key | wg pubkey > /home/user1/server_public.key
Beide Keys findest du dann im Verzeichnis /home/user1/ !!
Sehe jetzt erstmal keinen Fehler in meiner config…
Ggf. versteckte Steuerzeichen von einem Winblows Text Editor?
Mmmmhhh, komisch. 🤔 Klappt hier mit einer 7490 und aktuellem 7.57er Firmware fehlerlos über den Import:
Gibts da ggf. noch ne andere aktive Konfig?
- "Netzwerke koppeln oder spezielle Verbindung herstellen" klicken
- Dann "Wurde diese WireGuard-Verbindung bereits auf der Gegenstelle erstellt ?" JA klicken
- Fertisch
Irgendeine Idee wo es hängen könnte ?
Nicht wirklich... Gibts da ggf. noch ne andere aktive Konfig?
Hier kommt, wie gewünscht, die Lösung mit der dedizierten Zuweisung von IP Adressen im IKEv2 VPN Server und der dann möglich Filterung von Traffic zu den Zielnetzen für mobile VPN User.
(Dank an Forenkollege @colinardo für seine Tips zu diesem Setup!)
Schlüssel zur einfachen Lösung ist das Strongswan Plugin eap-radius was dann dediziert den mobilen VPN Usern feste IP Adressen per Radius Authentisierung zuweist statt zufällig über den IP Pool.
Ob das Plugin bei dir aktiv ist kannst du mit swanctl -S klären.
Im Output sollte dann u.a. ein eap-radius stehen!!
Es hat zusätzlich den großen Vorteil das außer der Firewall Steuerung auch die User Konfiguration der mobilen VPN User zentralisiert ist und du hast über das Radius Log eine Protokollierung wer wann eingewählt war bzw. wenn es Probleme gibt.
Beschreibung hier gilt für Debian basierte Linux Distros wie Ubuntu usw.
Los gehts....
Mit apt get freeradius wird der Freeradius Server installiert.
Hier gilt es nun zwei Anpassungen zu machen. Zum einen muss das Radius Server Passwort gesetzt werden (Default = testing123) und eine User Datei angelegt werden
Editiert die Datei zum Setzen des Radius Passworts im Abschnitt "client localhost" und "IPv6 Client". Dort wird mit "secret" das Passwort nach deiner Wahl gesetzt:
Diese ist unter /etc/freeradius/3.0/mods-config/files/authorize zu finden und enthält viele Beispiele.
Sinnvoll ist es diese Datei nicht direkt zu editieren mit deinen Benutzern sondern sie zu belassen wie sie ist und am Anfang mit dem nano ein $INCLUDE users.vpn einzufügen.
Das hat den Vorteil das du diese Beispieldatei nicht verfummeln musst und eine eigene Users Datei von dir mit dem Namen users.vpn geladen wird, was ggf. das Troubleshooting und die Übersichtlichkeit deutlich vereinfacht. Den Dateinamen kannst du frei wählen.
Diese dann separate VPN Userdatei unter /etc/freeradius/3.0/mods-config/files/users.vpn hat die folgende Struktur:
"Framed-IP-Address = 172.25.25.1" ist die dem User fest zugewiesene Client IP Adresse.
Stoppt den FreeRadius Daemon und nun startest du den Server testweise manuell im Debug Mode mit freeradius -X um ggf. Fehler im Setup aufzudecken. (Manche Linux Distros radiusd -X)
Der Radius sollte dann ein "Ready to process requests" am Ende melden wenn alles korrekt konfiguriert wurde!
Ein <Ctrl C> beendet den Radius Debug Mode.
Erstmal belässt du den Radius Server noch mit manuellem Start um später das gesamte Zusammenspiel mit den mobilen Usern checken zu können.
Wie man das Radius Logging aktiviert erklärt das hiesige Radius Tutorial im Detail.
Wie oben schon beschrieben ist das eap-radius Plugin schon aktiv, muss aber noch entsprechend auf den Radius Server (IP Adresse) und sein Passwort angepasst werden, damit das Plugin auch Zugang zum Radius Server bekommt.
Die Debian basierten Distros haben dafür unter /etc/strongswan.d/charon schon eine fertige eap-radius.conf Datei in der man nur noch die Radius Server IP und das Passwort per nano Editor eintragen muss:
Da der Radius Server hier nur intern genutzt wird wird als Hostname localhost verwendet!
Hier solltest du zur Sicherung vorab die bestehende IKEv2 Konfiguration ins Home Verzeichnis kopieren.
Dann kommentierst du alles was in der Sektion pools { und secrets { steht mit einem "#" davor aus.
So kannst du sicherstellen das deine schon sauber funktionierende IKEv2 Konfig auch weiter sicher funktioniert.
Die gesamte IP Adressierung und Username/Passwort kommt ja nun vom Radius Server, so das diese o.a. Definitionen für den User Adresspool und die Passwörter hier nicht mehr benötigt wird.
Sollte alles sauber klappen kannst du die mit "#" auskommentierten Zeilen später komplett entfernen.
In der Konfig selber musst du noch die beiden Parameter pools und auth (Letzteres unter remote) entsprechend anpassen das nun der Radius dafür genutzt wird!
Eine entsprechende live IKEv2 Konfig für die mobilen VPN Clients sähe dann so aus:
Mit dem üblichen swanctl -q bzw. auch systemctl restart strongswan lädst du die neue IKEv2 Konfig.
Dann startest du zum Testen den Radius wieder im Debug Mode.
Nun wählst du dich mit einem funktionierenden mobilen VPN Client ein und dann solltest du am Ende zahlloser Meldungen vom Radius ein "Access accept..." angezeigt bekommen.
Im Radius Log (cat /var/log/freeradius/radius.log) steht dann sowas wie
Zumindestens beim Windows Client kannst du auch mit ipconfig -all die korrekte Zuweisung der Client IP und der DNS Server bei aktivem VPN Tunnel checken.
Wenn dem so ist, dann kannst du den Radius Server mit systemctl restart freeradius wieder als Daemon starten und die Kommentarzeilen in der IKEv2 Konfig final löschen.
Zum Hinzufügen der mobilen VPN Benutzer musst du lediglich nur noch die o.a. VPN Userdatei im Radius ergänzen oder anpassen.
⚠️ Beachte dabei 2 Dinge:
Mit der dedizierten, benutzerspezifischen VPN IP Adresse der mobilen VPN User kannst du jetzt eine recht granulare Zugriffsteuerung deiner Benutzer auf die per VPN Tunnel angeschlossenen, lokalen VPN Router Netzwerke erreichen.
Dies geschieht in der Forwarding Chain (Routing Chain) wie das folgende Beispiel zeigt:
Das Regelwerk ist selbsterklärend.
Du kannst dir das mit Variablen noch etwas vereinfachen und vertipsicherer machen um solchen Fauxpas wie beim FB Passwort zu vermeiden.
Du erkennst vermutlich die einfache Logik hinter dem Firewall Regelwerk?!
Bei Änderungen an der nftables Firewall natürlich ein systemctl restart nftables nicht vergessen!
(Dank an Forenkollege @colinardo für seine Tips zu diesem Setup!)
Schlüssel zur einfachen Lösung ist das Strongswan Plugin eap-radius was dann dediziert den mobilen VPN Usern feste IP Adressen per Radius Authentisierung zuweist statt zufällig über den IP Pool.
Ob das Plugin bei dir aktiv ist kannst du mit swanctl -S klären.
Im Output sollte dann u.a. ein eap-radius stehen!!
Es hat zusätzlich den großen Vorteil das außer der Firewall Steuerung auch die User Konfiguration der mobilen VPN User zentralisiert ist und du hast über das Radius Log eine Protokollierung wer wann eingewählt war bzw. wenn es Probleme gibt.
Beschreibung hier gilt für Debian basierte Linux Distros wie Ubuntu usw.
Los gehts....
Inhaltsverzeichnis
Installation und Anpassung des Freeradius Servers
Mit apt get freeradius wird der Freeradius Server installiert.
Hier gilt es nun zwei Anpassungen zu machen. Zum einen muss das Radius Server Passwort gesetzt werden (Default = testing123) und eine User Datei angelegt werden
Radius Passwort setzen
nano /etc/freeradius/3.0/clients.conf
client localhost {
....
# The default secret below is only for testing, and should
# not be used in any real environment.
#
secret = testing123
....
}
# IPv6 Client
client localhost_ipv6 {
ipv6addr = ::1
secret = testing123
}
Radius Userdatei anlegen
Der zweite Schritt ist die Anpassung der User Datei für die mobilen VPN User.Diese ist unter /etc/freeradius/3.0/mods-config/files/authorize zu finden und enthält viele Beispiele.
Sinnvoll ist es diese Datei nicht direkt zu editieren mit deinen Benutzern sondern sie zu belassen wie sie ist und am Anfang mit dem nano ein $INCLUDE users.vpn einzufügen.
Das hat den Vorteil das du diese Beispieldatei nicht verfummeln musst und eine eigene Users Datei von dir mit dem Namen users.vpn geladen wird, was ggf. das Troubleshooting und die Übersichtlichkeit deutlich vereinfacht. Den Dateinamen kannst du frei wählen.
Diese dann separate VPN Userdatei unter /etc/freeradius/3.0/mods-config/files/users.vpn hat die folgende Struktur:
# Radius User Beispiel fuer mobile IKEv2 User.
#
# username Cleartext-Password := "test123!"
# Framed-IP-Address = 172.25.25.x
# MS-Primary-DNS-Server = <dns_server_provider>,
# MS-Primary-DNS-Server = <anderer_DNS_server>,
# Mobile VPN User
fmueller Cleartext-Password := "Geheim123!"
Framed-IP-Address = 172.25.25.1,
MS-Primary-DNS-Server = 1.2.3.4,
MS-Secondary-DNS-Server = 9.9.9.9
aschulze Cleartext-Password := "Geheim321!"
Framed-IP-Address = 172.25.25.2,
MS-Primary-DNS-Server = 1.2.3.4,
MS-Secondary-DNS-Server = 9.9.9.9
Radius Server checken
systemctl stop freeradius
Der Radius sollte dann ein "Ready to process requests" am Ende melden wenn alles korrekt konfiguriert wurde!
Ein <Ctrl C> beendet den Radius Debug Mode.
Erstmal belässt du den Radius Server noch mit manuellem Start um später das gesamte Zusammenspiel mit den mobilen Usern checken zu können.
Wie man das Radius Logging aktiviert erklärt das hiesige Radius Tutorial im Detail.
Anpassung des "eap-radius" Plugins
Wie oben schon beschrieben ist das eap-radius Plugin schon aktiv, muss aber noch entsprechend auf den Radius Server (IP Adresse) und sein Passwort angepasst werden, damit das Plugin auch Zugang zum Radius Server bekommt.
Die Debian basierten Distros haben dafür unter /etc/strongswan.d/charon schon eine fertige eap-radius.conf Datei in der man nur noch die Radius Server IP und das Passwort per nano Editor eintragen muss:
# Shared secret between RADIUS and NAS. If set, make sure to adjust the
# permissions of the config file accordingly.
secret = testing123
# IP/Hostname of RADIUS server.
server = localhost
Anpassung der IKEv2 Konfig für die mobilen User
Hier solltest du zur Sicherung vorab die bestehende IKEv2 Konfiguration ins Home Verzeichnis kopieren.
Dann kommentierst du alles was in der Sektion pools { und secrets { steht mit einem "#" davor aus.
So kannst du sicherstellen das deine schon sauber funktionierende IKEv2 Konfig auch weiter sicher funktioniert.
Die gesamte IP Adressierung und Username/Passwort kommt ja nun vom Radius Server, so das diese o.a. Definitionen für den User Adresspool und die Passwörter hier nicht mehr benötigt wird.
Sollte alles sauber klappen kannst du die mit "#" auskommentierten Zeilen später komplett entfernen.
In der Konfig selber musst du noch die beiden Parameter pools und auth (Letzteres unter remote) entsprechend anpassen das nun der Radius dafür genutzt wird!
Eine entsprechende live IKEv2 Konfig für die mobilen VPN Clients sähe dann so aus:
connections {
ikev2-mobile-vpn {
unique = replace
version = 2
proposals = aes256-sha512-modp2048,aes256-sha256-modp2048,aes256-sha256-modp1024
send_cert = always
pools = radius
local_addrs = 157.x.y.z
remote_addrs = 0.0.0.0/0,::/0
local {
auth = pubkey
certs = Mein-vServerCert.crt
id = fqdn:157-x-x-x.nip.io
}
remote {
id = %any
auth = eap-radius
eap_id = %any
}
children {
ikev2-mobile {
local_ts = 0.0.0.0/0
esp_proposals = aes256-sha512,aes256-sha384,aes256-sha256,aes256-sha1
start_action = trap
}
}
}
}
Finaler Check
Mit dem üblichen swanctl -q bzw. auch systemctl restart strongswan lädst du die neue IKEv2 Konfig.
Dann startest du zum Testen den Radius wieder im Debug Mode.
Nun wählst du dich mit einem funktionierenden mobilen VPN Client ein und dann solltest du am Ende zahlloser Meldungen vom Radius ein "Access accept..." angezeigt bekommen.
Im Radius Log (cat /var/log/freeradius/radius.log) steht dann sowas wie
Auth: (27) Login OK: [aschulze] (from client localhost_ipv6 port 608 cli 80.1.2.3[5121])
Wenn dem so ist, dann kannst du den Radius Server mit systemctl restart freeradius wieder als Daemon starten und die Kommentarzeilen in der IKEv2 Konfig final löschen.
Zum Hinzufügen der mobilen VPN Benutzer musst du lediglich nur noch die o.a. VPN Userdatei im Radius ergänzen oder anpassen.
⚠️ Beachte dabei 2 Dinge:
- Nach einer Änderung muss der Radius Server mit systemctl restart freeradius neu gestartet werden um die Userdatei neu einzulesen!
- Groß- Kleinschreibung bei den User/Passwort Daten ist relevant!
User Zugriffsregeln mit der nftables Firewall steuern
Mit der dedizierten, benutzerspezifischen VPN IP Adresse der mobilen VPN User kannst du jetzt eine recht granulare Zugriffsteuerung deiner Benutzer auf die per VPN Tunnel angeschlossenen, lokalen VPN Router Netzwerke erreichen.
Dies geschieht in der Forwarding Chain (Routing Chain) wie das folgende Beispiel zeigt:
chain forward {
type filter hook forward priority filter;
# LAN Forwarding fuer mobile VPN User begrenzen
ip saddr 172.25.25.1 ip daddr { 192.168.178.0/24 } log prefix "[nftables]Schulze: " counter drop
ip saddr 172.25.25.2 ip daddr { 192.168.178.0/24, 192.168.69.0/24 } counter drop
ip saddr 172.25.25.3 ip daddr { 192.168.69.0/24 } counter drop
ip saddr 172.25.25.4 ip daddr { 192.168.0.0/16 } log prefix "[nftables]Mueller: " counter drop
}
- Schulze darf nicht auf das .178.0er Netz zugreifen und wird, wenn er das macht, mitgeloggt
- User2 darf nicht auf das .178.0er und das .69.0er Netz zugreifen
- User3 darf nicht auf das .69.0er Netz zugreifen
- Müller darf nicht auf 192.168er Netze zugreifen und wird, wenn er das macht, mitgeloggt
Du kannst dir das mit Variablen noch etwas vereinfachen und vertipsicherer machen um solchen Fauxpas wie beim FB Passwort zu vermeiden.
# Fritzbox Netze definieren
define FRITZ_NETZE = { 192.168.69.0/24, 192.168.178.0/24 }
define SCHIFF = { 192.168.178.0/24 }
define USER1 = { 172.25.25.1 }
define USER1to3 = { 172.25.25.1, 172.25.25.2, 172.25.25.3 }
chain forward {
type filter hook forward priority filter;
# LAN Forwarding fuer mobile VPN User begrenzen
ip saddr $USER1 ip daddr $SCHIFF log prefix "[nftables]User1: " counter drop
ip saddr 172.25.25.3 ip daddr { 192.168.69.0/24 } counter drop
ip saddr $USER1to3 ip daddr $FRITZ_NETZE counter drop
}
Bei Änderungen an der nftables Firewall natürlich ein systemctl restart nftables nicht vergessen!
Inhaltsverzeichnis
Anbindung Mikrotik Router
Die Anbindung eines Mikrotik Routers geschieht analog zu der der Fritzbox. Unterschied ist nur das das modernere IKEv2 Verfahren (Default bei Strongswan) im hiesigen Setup benutzt wird.
Der Mikrotik ist durch sein größeres Featureset hier deutlich flexibler im VPN Setup als die Fritzbox!
Konfiguration Strongswan
Die vollständige Fritzbox Konfig wurde hier der Übersicht halber weggelassen. Die P1 und P2 Credentials sind der Einfachheit halber vom Fritzbox Setup übernommen. (Details zu den Fritzbox IPsec Krypro Credentials findet man u.a. HIER)
LAN IP Mikrotik: 192.168.88.0 /24
connections {
fritzbox {
local_addrs = 212.1.2.3
remote_addrs = 0.0.0.0/0
......
}
mikrotik {
local_addrs = 212.1.2.3
remote_addrs = 0.0.0.0/0
local {
auth = psk
id = 212.1.2.3
}
remote {
auth = psk
id = keyid:mikrotik@mikrotik.intern
}
children {
net {
local_ts = 172.25.24.0/23
remote_ts = 192.168.88.0/24
esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
}
}
proposals = aes256-sha512-modp2048,aes256-sha512-modp1024
}
}
secrets {
ike-1 {
id = keyid:fritzbox@fritzbox.intern
secret = "Geheim123!"
}
ike-2 {
id = keyid:mikrotik@mikrotik.intern
secret = "test1234!"
}
}
Konfiguration Mikrotik Router
Wie oben schon gesagt wurden der Einfachheit halber die Fritzbox P1 und P2 Credentials übernommen und das Default Profil genutzt. Man kann aber auch ein separates Profil erstellen.
P1 und P2 Krypto Settings
Peer und Identity Setting
Tunnel Setting (Proposal) und Check
Man sieht hier schon den Tunnel im "established" Status (Aufgebaut) und das im WinBox Screenshot eingebettete Ping Fenster zeigt den erfolgreichen Ping von der LAN IP des Mikrotik (Source) auf die Loopback Adresse des vServers.
Entsprechend zeigt dann der Mikrotik auch die SAs an.
Das Pendant auf der anderen Seite (vServer) dann entsprechend:
Tunnel Status und SAs:
Security Associations (1 up, 0 connecting):
mikrotik[1]: ESTABLISHED 4 minutes ago, 212.1.2.3[212.1.2.3]...80.1.2.3[mikrotik@mikrotik.intern]
mikrotik[1]: IKEv2 SPIs: ac5a581a137e5219_i 72371f37f93aaf3f_r*, rekeying in 3 hours
mikrotik[1]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/MODP_2048
net{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c1cfe3ec_i 0a464006_o
net{1}: AES_CBC_256/HMAC_SHA2_512_256, 392 bytes_i (7 pkts, 167s ago), 392 bytes_o (7 pkts, 167s ago), rekeying in 51 minutes
net{1}: 172.25.24.0/23 === 192.168.88.0/24
Trace des Verbindungsaufbaus:
09[NET] received packet: from 80.1.2.3[5140] to 212.1.2.3[4500] (368 bytes)
09[ENC] parsed CREATE_CHILD_SA request 8 [ No KE SA TSi TSr ]
09[CFG] selected proposal: ESP:AES_CBC_256/HMAC_SHA2_512_256/MODP_1024/NO_EXT_SEQ
09[IKE] CHILD_SA net{2} established with SPIs c1cfe3ec_i 0a464006_o and TS 172.25.24.0/23 === 192.168.88.0/24
Fazit
Works as designed! 👍 😉Klappt alles genau wie gewünscht
👍 👏 So sollte es sein! es einen User gibt der sich öfter verbinden kann
Ja, natürlich! In dem Falle lässt du das o.a. Kommando einfach weg oder kommentierst es mit einem "#" davor aus.Dann gilt der Default unique=no und Mehrfachlogins sind möglich.
Das Kommando gilt global für die Connection wirkt sich also immer auf alle User aus.
Details dazu hier.