sterva

IEEE 802.1X mit Captive Portal

Hallo zusammen,

ich möchte den Zugang zu den LAN-Ports via IEEE 802.1X + RADIUS beschränken. Alles was der Layer 3 Swich mit nicht autorisierten Klienten machen kann ist 1) blocken 2) in ein eigenes VLAN hängen.

Gibt es für den Windows-Klienten hier eine einfache Lösung mittels Benutzer / PW zu authentifizieren? Zum Beispiel über Captive Portal? Der Switch würde doch immernoch auf das okay des RADIUS servers warten oder nicht? Alles was ich lese sind irgendwelche Einstellungsorgien... o.O

Seid nett zu mir, ich mache das alles zum ersten mal.

Vielen Dank
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 672904

Url: https://administrator.de/forum/ieee-802-1x-mit-captive-portal-672904.html

Ausgedruckt am: 16.06.2025 um 04:06 Uhr

aXasflow
aXasflow 16.05.2025 um 14:00:26 Uhr
Goto Top
Hi,

schau mal hier:
Freeradius Management mit WebGUI


Grüße aXas
aqui
aqui 16.05.2025 um 14:42:50 Uhr
Goto Top
Vielleicht noch ein kleiner, ergänzender Tip zum obigen Tutorial und deiner Anforderung:
Das Fallback von nicht im Radius authentisierten Clients in ein bestimmtes Fallback VLAN (das mit dem Captive Portal) kann man auf unterschiedliche Weise handhaben und ist somit maßgeblich von deiner Switch Hardware bzw. dessen Featureset abhängig.
Die meisten Switches haben von sich aus oft schon eine konfigurierbare Fallback Option im Falle von nicht authorisierten Clients.
Sollten sie das nicht haben auf deiner Hardware regelst du das ganz einfach über das Default Profil des Radius wie z.B. Freeradius im o.a. Tutorial.
Und keine Angst, das ist alles kein Hexenwerk und in der Regel ein Nobrainer. Wenn du das Tutorial durcharbeitest hast du alle Werkzeuge dafür an der Hand. 😉
sterva
sterva 16.05.2025, aktualisiert am 22.05.2025 um 14:07:27 Uhr
Goto Top
Hallo zusammen,

ich habe das Tutorial durchgemacht und es funktioniert auch. Wenn ich unter Win10 den Abschnitt "Clients für die 802.1x Zugangskontrolle einrichten" durchgehe, ist die Rede von geschütztes EAP (PEAP) mit MSCHAPv2.

Jetzt ist es so, dass ich einen sehr alten Switch habe. Laut Internet kann er EAP oder CHAP (MD5). Die Option scheint Windows gar nicht erst zu haben. Geht da noch was?

Danke und Grüße
aqui
aqui 16.05.2025, aktualisiert am 17.05.2025 um 12:39:12 Uhr
Goto Top
MD5 kann der Freeradius natürlich auch! Das sollte also problemlos klappen mit deiner HP Gurke. face-wink Hier funktioniert das sogar mit Win 10 auf einem HP Procurve 2520 Methusalem.
Mit "EAP" ist gemeint das der das klassische EAPoL zum Client macht was ja Standard bei 802.1x ist. Da musst du dir also keinerlei Sorgen machen. Das wird mit dem 2848 ganz sicher klappen!
Im Zweifel immer den Radius mit freeradius -X im Debugger Mode laufen lassen und dir genau ansehen was da abgeht. face-wink
aqui
aqui 22.05.2025 um 17:19:27 Uhr
Goto Top
Wenn es das denn nun war und das eine gangbare Lösung für dich ist, bitte deinen Thread dann auch als erledigt schliessen!
Wie kann ich einen Beitrag als gelöst markieren?
sterva
sterva 22.05.2025 um 20:11:38 Uhr
Goto Top
Das mache ich, bin aber noch nicht fertig. :p

Ich verstehe nicht wozu die SQL-Option bei pfSense da ist: die User werden aus radius nicht hineinsynchronisiert. Und in pfSense angelegte User werden nicht in den radius portiert. Wenn ich den radius server für Authorisierung hinterlege, dann funktionieren auch - nur - dessen Benutzer. Es fühlt sich alles irgendwie nicht richtig an.
aqui
aqui 23.05.2025 aktualisiert um 11:11:52 Uhr
Goto Top
Die Radius Implementation in der pfSense ist nicht so homogen integriert wie bei der OPNsense. Beiden gemein ist aber die Verwendung einer lokalen Datenbank. Das Auslagern auf externe Datenbanken sehen diese Implementationen gar nicht vor. Folglich kann es niemals eine "Hineinsynchronisierung" von Benutzer Accounts geben. Das ist netztechnisch unmöglich.
Es gibt lediglich die Möglichkeit entweder das über die Package Verwaltung installierte eigene Freeradius Umfeld zu nutzen und dann mit dem was das bietet oder eben einen vollständig autarken externen Radius Server jedweder Couleur.
Die zentrale Frage die du leider nicht beantwortet hast ist WAS genau die mit deiner Frickelei bezwecken willst? Da kann man jetzt nur wild Kristallkugeln. face-sad
Details zur pfSense Radius Implementation auch HIER.
sterva
sterva 23.05.2025 um 16:59:06 Uhr
Goto Top
Ich hätte gerne einen geschützten VLAN Bereich aber auf dem gleichen Switch ...
aqui
aqui 23.05.2025 aktualisiert um 17:22:44 Uhr
Goto Top
Ich hätte gerne einen geschützten VLAN Bereich aber auf dem gleichen Switch ...
Mit dynamischer VLAN Zuweisung für die Clients via Radius für dieses VLAN??
Das ist ja dann kein Problem wenn du die VLAN ID im Radius den betreffenden Clients mitgibst.
Ansonsten legst du dir, wie generell ja üblich, ein statisches VLAN dafür an und weist dann eben statisch die Ports den Clients zu.
Die VLAN ID anlegen musst du aber so oder so.

Leider etwas schwer verständlich was du unter "Geschützt" genau verstehst bzw. was dein Ziel ist wenn du nur in so kurzen Sätzen antwortest?! 🤔
sterva
sterva 23.05.2025 aktualisiert um 18:12:15 Uhr
Goto Top
Mit dynamischen IP und Radius; für Userliste fällt mir hier nichts einfacheres ein.

Ein DAU, dessen MAC-Adresse ich noch nicht kenne, stopft sein LAN-Kabel in den Switch-Port, wird gegen irgendwas/-wie autorisiert, landet (wird geschubst) in einem VLAN und kann dort und nur dort (=geschützt) mit seines gleichen kommunizieren. Aber physisch eben über den gleichen Switch-Port zu anderen Switch-Ports und damit nicht über einen Knoten. Hier käme der Prozess eines HotSpot + Captive Portal am nächsten. Alle Tutorials (auch dein) behandeln aber eher DAU -> Firewall -> Internet.

Ich habe zuerst an *1.X gedacht, aber dann müsste der DAU in der Registry rumfummeln und Hacken in den Diensten setzen. Davon abgesehen weiß ich nicht ob das zu dem erwünschten Szenario führt und auch führen kann. An sich habe ich ja kein Problem damit, dass der Nutzer den Zugang zum Switch bekommt. Layer 3 würde mir daher genügen, da im Default-VLan ich die Kommunikation zwischen den Teilnehmer unterbieten könnte.

Ich habe über die Materie hier und da immer mal wieder gelesen; es ist das erste Mal, dass ich was damit auch mache.
aqui
aqui 23.05.2025 aktualisiert um 19:47:54 Uhr
Goto Top
OK, verstanden. Das ist natürlich problemlos möglich und wurde dir oben auch schon genannt sofern man denn helfende Antworten auch liest?! 🧐
Dafür gibt es üblicherweise 2 Optionen dies umzusetzen:
1.)
Die erste Option ist die klassische und weniger abhängig vom .1x oder MAB Featureset des Switches oder WLAN APs.
Hier Definierst du im Radius Server die Default Aktion. Das also was der Radius machen soll wenn es keine positive Authentisierung des Clients gibt. Im Default ist das immer ein Access denied auf dem Radius, so das der betreffende Client rausgeschmissen wird.
Als Alternative kann man dem Radius über das Default Profil auch sagen das er nicht authorisierte Clients im Default erlauben soll und ihnen dann aber ein entsprechendes VLAN mitgibt. Diese User werden somit in ein isoliertes "Gummizellen" oder Gast VLAN auf dem Switch gezwungen.
Wie man diese Lösung mit dem Freeradius schnell und unkompliziert löst erklärt dir dieser Forenthread.

2.)
Die andere Option ist von deiner Switchhardware bzw. dem Featureset dessen MAB und 802.1x Funktion abhängig.
Viele dieser Switches supporten ein sog. Authentication Fail VLAN. Man kann dann über die Switchkonfig eine VLAN ID mitgeben für den Fall das der Client vom Radius ein Access denied bekommt.
Als Beispiel einmal die Port Konfig eines Cisco Switches die sowas veranschaulicht:
interface GigabitEthernet0/4
 description Authentication MAP plus Dot1x
 switchport mode access
 authentication event fail action authorize vlan 99  <<---
 authentication port-control auto
 authentication periodic
 mab
 dot1x pae authenticator
 spanning-tree portfast 
Anderes Beispiel einer Ruckus ICX Switch Konfiguration:
authentication
  auth-default-vlan 3
  restricted-vlan 20   <<--
  auth-fail-action restricted-vlan   <<--
  dot1x enable
  dot1x enable ethe 1/1/1 to 1/1/4 
Hier siehst du das der Switch selber bei gescheiterter Radius Authorisierung den Port selber automatisch ins VLAN 20 bzw. 99 legt.
Bei WebGUI Switches ist das identisch da gibts dann einen Haken für die KlickiBunti Fraktion.

Mit beiden Optionen lässt sich das also recht einfach umsetzen.
Die Kommunikation der "Gummizellen" VLAN Teilnehmer untereinander unterbindet man auf dem Switch immer mit der Private VLAN oder isolated VLAN Funktion. (Portisolation)

P.S.:
und Hacken in den Diensten setzen
Hacken? 🤔 Die ⛏️ benutzt man doch eigentlich nur im Garten gegen das Unkraut oder hat sie unten am Fuß?! In der IT hacken ja in der Regel nur Hacker. Du meinst vermutlich einen Haken, oder?
sterva
sterva 23.05.2025 um 21:55:04 Uhr
Goto Top
Naja, soweit bin ich eben noch nicht ! 😯 Du wolltest wissen was ich machen will und genau das wollte ich noch testen !!! 🤗 Vor einer Woche habe ich auf einer grünen Wiese angefangen (=Frickelei). Heute war das Thema VLAN und HyperV dran. Wenn ich mit einem Tag komme, weigert sich PfSense mir die IP-Adresse des betreffenden VLANs zu geben. ;/

Kein Stress 🍻
aqui
aqui 24.05.2025 aktualisiert um 11:46:48 Uhr
Goto Top
Wenn ich mit einem Tag komme, weigert sich PfSense mir die IP-Adresse des betreffenden VLANs zu geben.
Zeigt klar das du an der pfSense und/oder am ihr angeschlossenen Switch bzw. dessen Uplink Port zur pfSense etwas falsch konfiguriert hast!
Ohne ein paar hilfreiche Konfig Screenshots vom Setup deiner beiden beteiligten Komponenten müssen wir natürlich Kristallkugeln was der genaue Grund sein könnte?! 🤔
Die VLAN Interaktion zwischen pfSense und Switch sollte natürlich als Allererstes sauber funktionieren, denn darauf baut ja schliesslich alles weitere auf.

Halte dich einfach und stressfrei an das hiesige VLAN Tutorial was alle Schritte auf pfSense und Switch im Detail und für Laien leicht verständlich und mit bunten Bildern erklärt! Dann wird mit deinem VLAN Setup auch ganz sicher nichts schief gehen! face-wink

VLAN Installation und Routing mit pfSense, Mikrotik, DD-WRT oder Cisco RV Routern
sterva
sterva 26.05.2025 aktualisiert um 18:13:30 Uhr
Goto Top
Ich komme jetzt nicht mehr weiter, ich hoffe ich drücke mich halbswegs verständlich aus und ihr könnt mir helfen...

netzwerk

Problem:
Klient -> Switch(802.1x Port) -> pfSense LAN (Hyper V)
Leider bekomme ich für den Klienten keine IP face-sad

In der Konfiguration: Klient -> pfSense LAN (Hyper V) funktioniert das.
Damit auch Klient(Vlan-ID hinterlegt) -> pfSense LAN funktioniert, musste ich die Netzwerkkarten bei Virtueller Maschine pfSense trunken
Es wurde dann jeweils die IP des VLAN-ID-DHCP Servers gezogen, je nach VLAN-ID; eingetragen direkt bei der Netzwerkkarte.

Hänge ich bei der Switch den Klienten an einen non-.1x Port, bekommt er auch eine IP aus einem non-Vlan Bereich und kann ins Internet.

Der Switch an sich bekommt immer eine IP (aus Range Vlan-ID = 0 !) und ist auch aus dem Netzwerk erreichbar. Auch der PC mit dem Radiusserver ist erreichbar und mit pfSense testbar, wenn auch aus einer anderen Client-ID Range.


1) den Radius-Server beim Switch hinterlegt:
radius-server host 192.168.20.100 key meinkey
(der Client-ID Range 192.168.10.0/24 und 192.168.20.0/24 auf dem Radius dazu ist hinterlegt)

2) Typ für die 802.1x Authentifizierung
aaa authentication port-access eap-radius

3) Ethernet Ports 3 als „Authenticator“
aaa port-access authenticator 3

4) VLAN 200 als “Authorized” VLAN
aaa port-access authenticator 3 auth-vid 200

5) VLAN 666 als “Un-Authorized” VLAN
aaa port-access authenticator 3 unauth-vid 666

6) Aktivieren der 802.1x Funktion „port-access“
aaa port-access authenticator active

7) maximale Anzahl Geräte
aaa port-access authenticator 3 client-limit 1

Ergebniss sieht so aus:
Status Closed bedeutet, dass "Either no client is connected or the connected client has not received authorization through 802.1X authentication"

Ziehe ich den Stecker, steht statt 666 eine 1 (Vlan 0, default, in meiner obigen Logik)
status1


status2
aqui
aqui 26.05.2025 aktualisiert um 19:42:56 Uhr
Goto Top
und ihr könnt mir helfen...
Klar können wir das! 😉

Erstmal vorab zu deinem Screenshot. Eine "VLAN 0" (Null) ID gibt es nicht die ist im 802.1q Standard nicht vorgesehen. Vergiss den Unsinn also wieder ganz schnell...
Das Default VLAN 1 ist auf einem Trunk in der Regel das sog. Native VLAN oder auch das PVID VLAN.
Das bezeichnet das VLAN in das an einem Trunk Interface alle UNgetaggten Frames, also solche ohne VLAN Information (Tag) geforwardet werden.
Auf der pfSense oder OPNsense ist es der Traffic der vom physischen Parent Interface der Firewall kommt. Der wird an dem Trunkport immer UNtagged gesendet
Details zu der Thematik auch in der VLAN Schnellschulung.
Das nur als kurze VLAN Auffrischung vorweg. face-wink

Dein o.a. erster Screenshot ist recht verwirrend. face-sad
In den Zeilen ist die Rede von WiFi, Privat und LAN mit IP Adressen die dann aber in den Spalten völlig unterschiedlich zu den dort genannten VLANs sind. Damit ist die eigentliche IP Adressierung der VLANs leider unklar.
Hilfreich ist die VLAN ID in das 3te Byte bei Verwendung von /24er Netzadresse zu "kodieren". Das hilft später bei der Installation und beim logischen Erkennen der VLAN IP Adressen. Mit 666 als ID wird das natürlich etwas schwierig. Letztlich aber alles nur kosmetisch. face-wink
Wir nehmen also einmal folgende Adressierung und VLAN ID an. (Wie gesagt "0" ist Unsinn)

  • VLAN 1 = UNtagged = PVID VLAN = 192.168.10.0 /24 - Firewall VLAN 1 IP: 192.168.10.1 (Parent Interface)
  • VLAN 200 = Tagged = 192.168.11.0 /24 - Firewall VLAN 200 IP: 192.168.11.1
  • VLAN 666 = Tagged = 192.168.12.0 /24 - Firewall VLAN 666 IP: 192.168.12.1

Problem: Leider bekomme ich für den Klienten keine IP
Nebenbei erfährt man man das deine Firewall virtualisiert ist. 🙄
Das ist generell kein Problem aber es kommt entscheidend darauf an WIE die virtuellen Interfaces der Firewall an den vSwitch des Hypervisors angebunden ist!!!
Das o.a. Fehlerbild zeigt ganz klar das hier dein Fehler liegt!

In einer virtualisierten Firewall hast du in deinem Falle 3 Netzwerk Interfaces (WiFi, Privat, LAN). Je nachdem WIE der vSwitch des HyperV dies erfordert werden die an den vSwitch angebunden.
Bei so gut wie allen vSwitches passiert das UNtagged und man bestimmt mit der vSwitch Konfiguration in welchem VLAN man diesen Traffic haben will und vor allem WIE der vSwitch diesen VLAN Trunk über eine einzelne NIC nach außen weiterleitet. Das bedeutet das üblicherweise kein Tagging dieser der virtuellen Firewall Netzwerkkarten erfordert.
Zu 98% hast du hier einen Konfigurationsfehler gemacht, denn das Fehlerbild zeigt eindeutig das es keinerlei Layer 2 Verbindung zwischen deinem internen vSwitch im HyperV mit den Netzwerkkarten der Firewall gibt. Auf das Setup solltest du dich mit der Fehlersuche also nochmals konzentrieren.
Als Hilfe kannst du dir im Folgenden einmal ansehen wie so ein Set auf auf VmWare und auf Proxmox auszusehen hat.
pfSense unter Proxmox
pfSense unter ESXi / VmWare
Allgemeine Tips zur Anpassung einer virtualisierten pfSense/OPNsense findet du HIER.

Der Switch an sich bekommt immer eine IP (aus Range Vlan-ID = 0 !)
Wie gesagt die VLAN ID "0" ist falsch aber du redest hier sehr wahrscheinlich vom PVID VLAN (untagged).
Das bestätigt zusätzlich den Verdacht deiner falschen Anbindung der 2 anderen Firewall Interfaces bzw. virtuellen NICs an den vSwitch! Hier ist also mehr Info zum HyperV vSwitch Setup erforderlich um dir zielführend helfen zu können.
Hänge ich bei der Switch den Klienten an einen non-.1x Port, bekommt er auch eine IP aus einem non-Vlan Bereich und kann ins Internet.
Das ist auch klar und erwartbar, denn hier schiebst du ja schlicht und einfach nur das ungetaggte PVID VLAN durch.
Auch der PC mit dem Radiusserver ist erreichbar und mit pfSense testbar, wenn auch aus einer anderen Client-ID Range.
Auch das klar und erwartbar, denn die Management IP des Switches liegt in der Regel im Default immer im PVID VLAN und mit der IP sendet er die Radius Requests ja auch an den Radius Server. Alles klassischer Standard also.

Wenn du allerdings in der Basis Grundkonfiguration ganz ohne Radius schon gar nicht den grundsätzlichen Betrieb der 2 zusätzlichen VLANs zum Laufen bekommst wird natürlich der ganze Rest scheitern.
Eine saubere VLAN Funktion deiner 3 Netze muss natürlich am physischen Switch gegeben sein erstmal auch ohne Radius. Darauf baut ja der Rest der Funktionen auf. Einfache Logik! face-wink
Dein erster Schritt ist also den vSwitch im HyperV und die korrekte VLAN Funktion zum Fliegen zu bringen. Ohne das das klappt macht es keinen Sinn den 2ten vor dem ersten Schritt zu machen bzw. deine ansonsten richtigen Schritte 1 bis 7 umzusetzen.

Ergebniss sieht so aus: Status Closed bedeutet, dass "Either no client is connected or the connected client has not received authorization through 802.1X authentication"
Ja, auch das ist ebenso wieder klar und erwartbar, denn alle Ports die für die 802.1x Port Security aktiviert sind sind im Default (Mode "Auto") blockiert. Soll ja auch so sein wenn sich kein Client authorisiert hat. ("Du kommst hier nicht rein!")
Erst mit erfolgreicher .1x Authorisierung bekommt der Client Zugang. Nach deiner (unbekannten) Syntax zu urteilen gilt dabei (geraten):
  • aaa port-access authenticator 3 auth-vid 200 = Authentisierte Clients ohne dynamische VLAN ID vom Radius landen per Default im VLAN 200
  • aaa port-access authenticator 3 unauth-vid 666 = Nicht authentisierte Clients landen per Default im VLAN 666. Das erklärt auch warum ein unauthentisierter Client im VLAN 666 landet wie du oben beschreibst.
Dein unbekannter Switch supportet also scheinbar (geraten) das im vorherigen Thread beschriebene VLAN Verhalten mit onboard Features.
Deine CLI "show" Outputs bestätigen das Verhalten. Sieht also so aus, das abgesehen vom richtigen VLAN Handling des vSwitches, die Radius Authentisierung an sich mehr oder minder klappt.
Wenn du den Freeradius mit "freeradius -X" im Debugging Mode laufen lässt kannst du das auch live sehen was vom und zum Switch geht! face-wink
sterva
sterva 27.05.2025 aktualisiert um 16:31:47 Uhr
Goto Top
Wenn ich jetzt mit dem Radius-Benutzer, der das Profil für das VLAN 200 hat, am CP anmelde, bleibt die IP des VLAN-666 (aka Gummizelle) und die Netzwerkverbindung bestehen. face-sad

dalo1

Was zuvor gefehlt hat, war Tagged-Flag für das VLAN auf dem Switch-Port, an dem das System mit virtuellen Maschinen hängt. 🤦‍♂️ Denn der *1x-Port an sich ist ja untagged. HyperV ist immernoch im Trunkmodus. Auf diese Weise bekam der Klient auch IP/Gateway des vlan-666. Das Captive Portal darauf funktioniert auch. Jedoch wechselt er nach dem Radius-Login nicht das VLAN...
aqui
aqui 27.05.2025 aktualisiert um 17:53:51 Uhr
Goto Top
bleibt die IP des VLAN-666 (aka Gummizelle) und die Netzwerkverbindung bestehen.
Lasse den Freeradius dafür unbedingt einmal im Debugging Mode laufen!
Damit kann man wasserdicht checken ob der Radius das Attribut mit der VLAN ID an den Switch übermittelt.
Wenn ja, dann ist es ein Fehler im Switch (ggf. Fehlkonfiguration) das der die vom Radius übermittelte VLAN ID nicht korrekt auf seinen Port anwendet.
Denn der *1x-Port an sich ist ja untagged.
Das ist grundsätzlich erstmal richtig und üblicher Standard. Dot1x Ports sind ja im allgemeinen Access Ports die Endgeräte mit untagged Traffic bedienen.
Es gibt aber Hersteller wie Ruckus u.a. denen man auch einen Tagged Flag mitgeben kann indem man als VLAN ID ein "T:200" vor der VLAN ID mitgibt. Ein Ruckus ICX Switch setzt den Port dann auf Tagged.
Lässt man es weg dann nimmt der ICX immer ein "U:200" an und setzt den Port untagged ins VLAN 200. Das ist aber Hersteller spezifisch und nicht alle Hersteller supporten sowas.
Jedoch wechselt er nach dem Radius-Login nicht das VLAN...
Da gilt es jetzt herauszufinden ob es am Radius oder Switch liegt. Der Debugging Mode ist dein Freund! 😉
sterva
sterva 27.05.2025 aktualisiert um 19:55:15 Uhr
Goto Top
🤔

Die Anfrage kam als RequestID 255 von 192.168.11.100 (Klient im VLAN 666; Anm. ich hab hier leider einen Fehler in der Darstelltung)
über 192.168.20.1 (Gateway pfSense Privat, also anderes Netzwerk ) an 192.168.20.100 (Radiusserver)

VLAN 1 = UNtagged = PVID VLAN = 192.168.10.0 /24 - Firewall VLAN 1 IP: 192.168.10.1 (Parent Interface)
VLAN 200 = Tagged = 192.168.12.0 /24 - Firewall VLAN 200 IP: 192.168.12.1
VLAN 666 = Tagged = 192.168.11.0 /24 - Firewall VLAN 666 IP: 192.168.11.1


freerad1

Danach kam etwas User und Gruppensuche. Irgendwann hat er die wohl auch gematched und die Einträge gezogen:

freerad2

Dann muss er wohl den Login geokayed haben:

freerad3
sterva
sterva 27.05.2025 um 21:56:27 Uhr
Goto Top
Hier nochmal der komplette Abzug.

Vielleicht noch zur Klärung:

  • Auf dem Windows Klienten habe ich gar keine Einstellungen vorgenommen.
  • Der Switch kann an sich nur MD5
  • Switch ist aus 192.168.20.0, seit dem der Switch Port getaggt ist, nicht mehr erreichbar / pingbar. Er leitet die Anfragen aber offensichtlich weiter. Ich weiß aber nicht ob pfSense, nachdem access-accept das auch dem Switch mitgibt. Und dann in ms-chap 2...


(1) Received Access-Request Id 255 from 192.168.20.1:39568 to 192.168.20.100:1812 length 228
(1)   Service-Type = Login-User
(1)   User-Name = "testuser2"  
(1)   MS-CHAP2-Response = 0x01012bb191df0690ee183925b8783daf722a0000000000000000fde064cde8f2b91805d6821bde0ff3662d700ee6b983fbba
(1)   MS-CHAP-Challenge = 0x3e843289da8c25dd8d0fb873e3d5718b
(1)   NAS-IP-Address = 192.168.20.1
(1)   NAS-Identifier = "CaptivePortal-test_internet"  
(1)   Calling-Station-Id = "74:d4:dd:59:35:c4"  
(1)   Called-Station-Id = "00:15:5d:38:01:0d:pfSense.home.arpa"  
(1)   NAS-Port-Type = Ethernet
(1)   NAS-Port = 2000
(1)   Framed-IP-Address = 192.168.11.100
(1) # Executing section authorize from file /etc/freeradius/3.0/sites-enabled/default
(1)   authorize {
(1)     policy filter_username {
(1)       if (&User-Name) {
(1)       if (&User-Name)  -> TRUE
(1)       if (&User-Name)  {
(1)         if (&User-Name =~ / /) {
(1)         if (&User-Name =~ / /)  -> FALSE
(1)         if (&User-Name =~ /@[^@]*@/ ) {
(1)         if (&User-Name =~ /@[^@]*@/ )  -> FALSE
(1)         if (&User-Name =~ /\.\./ ) {
(1)         if (&User-Name =~ /\.\./ )  -> FALSE
(1)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
(1)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   -> FALSE
(1)         if (&User-Name =~ /\.$/)  {
(1)         if (&User-Name =~ /\.$/)   -> FALSE
(1)         if (&User-Name =~ /@\./)  {
(1)         if (&User-Name =~ /@\./)   -> FALSE
(1)       } # if (&User-Name)  = notfound
(1)     } # policy filter_username = notfound
(1)     [preprocess] = ok
(1)     [chap] = noop
(1) mschap: Found MS-CHAP attributes.  Setting 'Auth-Type  = mschap'  
(1)     [mschap] = ok
(1)     [digest] = noop
(1) suffix: Checking for suffix after "@"  
(1) suffix: No '@' in User-Name = "testuser2", looking up realm NULL  
(1) suffix: No such realm "NULL"  
(1)     [suffix] = noop
(1) eap: No EAP-Message, not doing EAP
(1)     [eap] = noop
(1)     [files] = noop
(1) sql: EXPAND %{User-Name}
(1) sql:    --> testuser2
(1) sql: SQL-User-Name set to 'testuser2'  
rlm_sql (sql): Reserved connection (3)
(1) sql: EXPAND SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id  
(1) sql:    --> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'testuser2' ORDER BY id  
(1) sql: Executing select query: SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'testuser2' ORDER BY id  
(1) sql: User found in radcheck table
(1) sql: Conditional check items matched, merging assignment check items
(1) sql:   Cleartext-Password := "12345678"  
(1) sql: EXPAND SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id  
(1) sql:    --> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'testuser2' ORDER BY id  
(1) sql: Executing select query: SELECT id, username, attribute, value, op FROM radreply WHERE username = 'testuser2' ORDER BY id  
(1) sql: EXPAND SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority  
(1) sql:    --> SELECT groupname FROM radusergroup WHERE username = 'testuser2' ORDER BY priority  
(1) sql: Executing select query: SELECT groupname FROM radusergroup WHERE username = 'testuser2' ORDER BY priority  
(1) sql: User found in the group table
(1) sql: EXPAND SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = '%{SQL-Group}' ORDER BY id  
(1) sql:    --> SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = 'VLAN-200' ORDER BY id  
(1) sql: Executing select query: SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = 'VLAN-200' ORDER BY id  
(1) sql: Group "VLAN-200": Conditional check items matched  
(1) sql: Group "VLAN-200": Merging assignment check items  
(1) sql: EXPAND SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = '%{SQL-Group}' ORDER BY id  
(1) sql:    --> SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = 'VLAN-200' ORDER BY id  
(1) sql: Executing select query: SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = 'VLAN-200' ORDER BY id  
(1) sql: Group "VLAN-200": Merging reply items  
(1) sql:   Tunnel-Type := VLAN
(1) sql:   Tunnel-Medium-Type := IEEE-802
(1) sql:   Tunnel-Private-Group-Id := "200"  
rlm_sql (sql): Released connection (3)
Need more connections to reach 10 spares
rlm_sql (sql): Opening additional connection (7), 1 of 25 pending slots used
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Connected to database 'radiusdb' on Localhost via UNIX socket, server version 10.11.11-MariaDB-0+deb12u1, protocol version 10  
rlm_sql (sql): Closing expired connection (6) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing expired connection (5) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing expired connection (4) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing expired connection (2) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing expired connection (1) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): You probably need to lower "min"  
rlm_sql (sql): Closing expired connection (0) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
(1)     [sql] = ok
(1)     [expiration] = noop
(1)     [logintime] = noop
(1) pap: WARNING: Auth-Type already set.  Not setting to PAP
(1)     [pap] = noop
(1)   } # authorize = ok
(1) Found Auth-Type = mschap
(1) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
(1)   authenticate {
(1) mschap: Found Cleartext-Password, hashing to create NT-Password
(1) mschap: Creating challenge hash with username: testuser2
(1) mschap: Client is using MS-CHAPv2
(1) mschap: Adding MS-CHAPv2 MPPE keys
(1)     [mschap] = ok
(1)   } # authenticate = ok
(1) # Executing section post-auth from file /etc/freeradius/3.0/sites-enabled/default
(1)   post-auth {
(1)     if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) {
(1)     if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name))  -> FALSE
(1)     update {
(1)       No attributes updated for RHS &session-state:
(1)     } # update = noop
(1) sql: EXPAND .query
(1) sql:    --> .query
(1) sql: Using query template 'query'  
rlm_sql (sql): Reserved connection (3)
(1) sql: EXPAND %{User-Name}
(1) sql:    --> testuser2
(1) sql: SQL-User-Name set to 'testuser2'  
(1) sql: EXPAND INSERT INTO radpostauth (username, pass, reply, authdate ) VALUES ( '%{SQL-User-Name}', '%{%{User-Password}:-%{Chap-Password}}', '%{reply:Packet-Type}', '%S.%M' )  
(1) sql:    --> INSERT INTO radpostauth (username, pass, reply, authdate ) VALUES ( 'testuser2', '', 'Access-Accept', '2025-05-27 19:09:12.333376' )  
(1) sql: Executing query: INSERT INTO radpostauth (username, pass, reply, authdate ) VALUES ( 'testuser2', '', 'Access-Accept', '2025-05-27 19:09:12.333376' )  
(1) sql: SQL query returned: success
(1) sql: 1 record(s) updated
rlm_sql (sql): Released connection (3)
(1)     [sql] = ok
(1)     [exec] = noop
(1)     policy remove_reply_message_if_eap {
(1)       if (&reply:EAP-Message && &reply:Reply-Message) {
(1)       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(1)       else {
(1)         [noop] = noop
(1)       } # else = noop
(1)     } # policy remove_reply_message_if_eap = noop
(1)     if (EAP-Key-Name && &reply:EAP-Session-Id) {
(1)     if (EAP-Key-Name && &reply:EAP-Session-Id)  -> FALSE
(1)   } # post-auth = ok
(1) Login OK: [testuser2/<via Auth-Type = mschap>] (from client network-1 port 2000 cli 74:d4:dd:59:35:c4)
(1) Sent Access-Accept Id 255 from 192.168.20.100:1812 to 192.168.20.1:39568 length 196
(1)   Tunnel-Type = VLAN
(1)   Tunnel-Medium-Type = IEEE-802
(1)   Tunnel-Private-Group-Id = "200"  
(1)   MS-CHAP2-Success = 0x01533d38354430454339363230324542324343353636313331373543393544363344373439313634363632
(1)   MS-MPPE-Recv-Key = 0x71ffca242d678e4af1557381ab6c2764
(1)   MS-MPPE-Send-Key = 0x67dd1dd75bac35fa953887dfef18df07
(1)   MS-MPPE-Encryption-Policy = Encryption-Allowed
(1)   MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed
(1) Finished request
Waking up in 4.9 seconds.
(1) Cleaning up request packet ID 255 with timestamp +221 due to cleanup_delay was reached
Ready to process requests
aqui
aqui 28.05.2025 aktualisiert um 11:50:56 Uhr
Goto Top
Hier kannst du sehen wie es mit der VLAN ID 11 an einem Cisco Catalysten fehlerfrei funktioniert:

back-to-topVLAN Profil und Vorab Check via PC mit dem NTRadPing Tool
Hier kann man schon vorab erkennen das der Radius Server sauber die VLAN Attribute mitgibt! (Attribute Dump)
rad1

back-to-topDebug Output des Freeradius (gekürzt)
Auch hier, wie zu erwarten, der Reply des Radius mit den VLAN Attributen aus der SQL Datenbank und dem finalen "Access Accept" inklusive der VLAN Attribute! (Zeilen 12-14)
(1) sql: --> SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = 'VLAN-11' ORDER BY id  
(1) sql: Executing select query: SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = 'VLAN-11' ORDER BY id  
(1) sql: Group "VLAN-11": Merging reply items  
(1) sql:   Tunnel-Type := VLAN
(1) sql:   Tunnel-Medium-Type := IEEE-802
(1) sql:   Tunnel-Private-Group-Id := "11"  
rlm_sql (sql): Released connection (3)

(1)   } # post-auth = ok
(1) Login OK: [vlan11] (from client lab-network1 port 0)
(1) Sent Access-Accept Id 5 from 10.1.10.222:1812 to 10.1.10.199:57476 length 36
(1)   Tunnel-Type = VLAN
(1)   Tunnel-Medium-Type = IEEE-802
(1)   Tunnel-Private-Group-Id = "11"  
(1) Finished request 

back-to-topCheck auf einem Cisco Catalysten
Port Konfig:
interface FastEthernet0/1
 description Authentication Dot1x only
 switchport mode access
 authentication event fail retry 0 action authorize vlan 98
 authentication port-control auto
 authentication periodic
 dot1x pae authenticator
 spanning-tree portfast 

Show Output der Port Authentisierung
Hier sieht man das der Port 0/1 dem VLAN 11 zugeordnet wurde. Auch erwartbar, da die oigen Checks schon einwandfrei gezeigt haben das die VLAN Attribute mitkommen.
CiscoSW#show authentication int fa0/1

Client list:
Interface  MAC Address     Method   Domain   Status         Session ID
Fa0/1      8cae.4cfe.0194  Dot1x    DATA     Authz Success  0A010A0600000002002
  
CiscoSW#show vlan | include 11
11   VLAN-11                          active    Fa0/1 

Der Cisco hat einen Debug Mode an Bord mit dem man den Authentisierungsprozess auch auf dem Switch genau ansehen kann:
May 28 08:25:05.431: AUTH-EVENT (Fa0/1) Set new linksec data (handle 0xB3000003) NULL data
May 28 08:25:05.431: AUTH-EVENT (Fa0/1) Signalling Authc success for client 8cae.4cfe.0194
May 28 08:25:05.431: AUTH-EVENT (Fa0/1) Authorized client count: 0
May 28 08:25:05.431: AUTH-EVENT (Fa0/1) Authorized client count: 0
May 28 2025 08:25:05 CEST: %AUTHMGR-5-VLANASSIGN: VLAN 11 assigned to Interface Fa0/1 AuditSessionID 0A010A0600000003003E610F
May 28 08:25:05.431: AUTH-EVENT (Fa0/1) Setting vlan to 11 on DATA Vlan
May 28 08:25:05.431: AUTH-EVENT (Fa0/1) Signalling Authz success for client 8cae.4cfe.0194
May 28 08:25:06.471: AUTH-EVENT (Fa0/1) New IP: 10.11.1.150 for client 8cae.4cfe.0194 
Zeile 5 spricht für sich selber. face-wink

Fazit:
Works as designed!! 👍 😉

Zu deinen Punkten...
Auf dem Windows Klienten habe ich gar keine Einstellungen vorgenommen.
Das ist etwas ungewöhnlich, denn zu mindestens auf den Windows LAN Adaptern ist es per Default deaktiviert. Hier musst du immer manuell den Dienst "Automatische Konfiguration (verkabelt)" VORHER starten:
windot1x
Bei MAB oder auf WLAN Adaptern ist das unter Winblows NICHT erforderlich.

Der Switch kann an sich nur MD5
Das ist kein Problem, der Freeradius supportet auch MD5. Am Cisco Catalysten kann man das dediziert mit mab eap am Port umstellen.
Allerdings gibt es hier einen Wermutstropfen weil EAP-MD5 große Einschränkungen hat. Zitat:
"EAP-MD5 is an authentication method that uses a challenge-response protocol, but it lacks encryption and doesn't offer mutual authentication or dynamic keys. While it can be used for basic authentication, it's not ideal for secure environments where dynamic VLAN assignment is crucial"
Unter normalen Umständen scheitert also eine dyn. VLAN Zuweisung damit. Man kann EAP-MD5 in einem PEAP Tunnel übertragen aber ob der Switch dann eine dyn. VLAN Zuweisung umsetzen kann ist mehr als fraglich.
Es ist sehr verwunderlich das deine Switch Hardware auf EAP-MD5 limitiert ist da PEAP seit Jahrzehnten dort Standard ist. Heute supportet jeder Chinesen Switch vom Blödmarkt diese Funktion. Der o.a. Catalyst ist fast 20 Jahre alt und kann das wie so gut wie alle LAN Switches problemlos.

Switch ist aus 192.168.20.0, seit dem der Switch Port getaggt ist, nicht mehr erreichbar / pingbar
Nur nochmal zur Klarstellung: Ein Dot1x oder MAB Port für Endgeräte, egal ob mit oder ohne dyn. VLAN Zuweisung, darf keinesfalls getagged werden!! Dot1x oder MAB Ports sind IMMER ungetaggt. Logisch, denn daran werden ja immer ungetaggte Endgeräte betrieben. Nicht das du hier etwas falsch verstanden hast!!

Den Radius Check mit dem NTRadPing Tool solltest du immer vorab machen.
Aber auch an deinem Freeradius Debugging Output oben kannst du ja ganz klar sehen das dein Radius Server die VLAN ID Attribute zurückgibt. Aus Sicht des Radius Servers ist das also absout OK. NTRadPing wird das dann ebenso im Attribute Dump anzeigen.
Der böse Buhmann ist dein Switch der das scheinbar nicht oder nicht richtig am Port umsetzt! face-sad
sterva
sterva 29.05.2025 aktualisiert um 09:47:16 Uhr
Goto Top
Ich habe jetzt einfach EPAP + EAP-MSCHAPv2 in Win11 beim Netzwerk eingestellt und siehe da:

1) Ist auf dem Switch zu dem Klient-Port ein autorisiertes (auth-vid) VLAN hinterlegt, dann funktioniert die Anmeldung aus Windows unabhängig davon ob im Stammsatz des Radius-Benutzers ein VLAN hinterlegt ist oder nicht.

2) Ist kein autorisiertes VLAN auf dem Switch hinterlegt funktioniert die Anmeldung nur mit dem Radius-Benutzer mit einem VLAN im Stammsatz.

Insofern kann ich den Switch-Port also fremdsteuern ??

3) Aber das Captive Portal schubst nicht in das VLAN face-sad Vielleicht muss ich da mit paar Haken nachhacken ?
Ich habe den Debug-Modus gefunden, er ist nicht so ganz inhaltsreich.
aqui
aqui 29.05.2025 aktualisiert um 13:32:56 Uhr
Goto Top
Insofern kann ich den Switch-Port also fremdsteuern ??
WIE ist die Frage gemeint? Das du den Port grundsätzlich öffnen kannst mit der Authentisierung oder das du ein VLAN dynamisch dem Port zuweisen kannst?? 🤔

Das der durch Dot1x geblockte Port grundsätzlich mit der Radius Authentisierung geöffnet wird ist eins der klassischen Grundmerkmal von .1x. Das muss man sicherlich nicht hinterfragen.
Die dynamische VLAN Zuweisung über die Radius Attribute eigentlich auch. Das ist ebenso klassischer Standard. Man kann ja grundsätzlich bei Radius noch viel mehr Attribute zuweisen. Z.B. eine 2stufige Authentisierung mit .1x und MAB erzwingen usw. usw.

Grundsätzlich gilt folgende Logik:
Wenn du kein statisches VLAN an einem Dot1x Port zuweist liegt auch ein so ein Port im Default ja immer untagged im VLAN 1 dem Default VLAN.
Ein User der ohne dynamische VLAN Attribute authentisiert wird, sprich also nur als einfacher User landet dann in diesem VLAN 1.
Legst du den Port ins VLAN xy dann landet dieser User nach der Authentisierung erwartungsgemäß im VLAN xy. Solange der Radius keine anderen Attribute liefert macht der Port dann was ihm statisch über die lokale Portkonfig gesagt wurde.
Liefert der Radius aber VLAN Attribute mit für die dynamische VLAN Zuweisung, dann "überrennen" diese Attribute die statische Port Zuweisung und wenden das VLAN vom Radius an.
Mit anderen Worden: Die Radius VLAN Informationen zu einer Authentisierung haben immer Priorität über statische Port Zuweisungen!
An einem Dot1x Port macht das auch durchaus Sinn, weil Radius hier immer die "höhere" Instanz ist.

Aber das Captive Portal schubst nicht in das VLAN
Auch das ist leider wieder etwas verwirrend was du damit genau meinst??
Ein Captive Portal ist ja grundsätzlich fest über die Konfig auf ein VLAN gebunden. Das ist immer statisch und nie dynamisch veränderbar.
Klar und auch verständlich weil das CP ja in der Regel auf einem externen Gerät wie Firewall usw. liegt. Aber auch einige Switches die eine Web Authentisierung supporten auf einem VLAN sind über die Switchkonfig fest auf dieses eine VLAN gemappt. Diese Konfig hat nichts mit der Dot1x Konfig, Radius etc. zu tun und ist immer völlig unabhängig davon.
Das CP kann also niemals irgendwie dynamisch "geschubst" werden, geschweige denn kann selber "schubsen".

Willst du nun unauthorisierte Nutzer wie z.B. Gäste usw. in ein "Zwangs VLAN" packen geht das über die 2 schon oben beschriebenen Optionen:
  • Radius hat ein Default Profil was allen unauthorisierten Usern das VLAN Attribut xy zuweist und diese Nutzer dann über die dynamische VLAN Zuweisung am Switchport zwangsweise in das VLAN packt. Wie gesagt spielt dann hier eine ggf. vorhandene statische VLAN Zuweisung am Port keine Rolle, weil die Radius Attribute diese "überstimmen" da höhere Prio.
  • Über den Switch selber. Der Switch reagiert dann nur auf ein "Access DENY" des Radius und sobald das kommt und ein sog. "Auth. Fail VLAN xy " am Port konfiguriert ist (Cisco z.B.: authentication event fail retry 0 action authorize vlan xy) schmeisst der Switch das ins VLAN xy.
Letzteres ist eine UND Bedingung! Gibt es kein "Auth. Fail VLAN xy " am Port dann geht der Port erwartungsgemäß in den Blocking Mode nach dem "Access DENY" des Radius.
Eigentlich alles eine sehr einfache Logik! 😉

Ich habe den Debug-Modus gefunden, er ist nicht so ganz inhaltsreich.
Auch hier wieder der Doppeldeutigkeit halber die Nachfrage: Du meinst deinen Switch und dessen Debug Option, oder?? 🤔
Die Freeradius Debug Option ist bekanntlich eins der besten Tools beim Security Troubleshooting mit Dot1x, MAB und Radius!!
sterva
sterva 29.05.2025 um 14:56:19 Uhr
Goto Top
Na es geht doch darum wie ich aus dem zugewiesen "Auth. Fail VLAN xy" nach der Autorisierung am Radius gerade über Captive Portal in ein neues VLAN komme. Aber ja, das macht nicht das CP an sich, sondern der Radius-Server. CP soll diese Autorisierung anstoßen und anscheinend funktioniert das so mit deinem Cisco und bei mir nicht? Dazu habe ich den Test über Win11 als Alternative durchgeführt um zu sehen ob es auf anderem Wege geht.

Wenn ich mich also über Win11 im LAN Netzwerk anmelde funktioniert das; ich lande im VLAN 200, der offensichtlich von Radius übergeben wird. Zum testen habe ich das VLAN 200 als auth-vid vom Switch zuvor entfernt, trotzdem wurde der Port auf VLAN 200 geschaltet. Das meinte ich mit "Switch-Port fremdsteuern". Das bedeutet, dass die Technik grundsätzlich willig ist nach Einstellungen aus deinen Tutorials zu funktionieren.

Und jetzt ist eben die Frage worauf es beim CP ankommt; warum die VLAN Angaben nicht am Switch ankommen - gesendet werden sie ja. Und ja, mit Debug-Modus meinte ich den Switch ;) Und der ist leider nicht sehr aussagefreudig.
aqui
aqui 29.05.2025, aktualisiert am 01.06.2025 um 11:06:58 Uhr
Goto Top
Na es geht doch darum wie ich aus dem zugewiesen "Auth. Fail VLAN xy" nach der Autorisierung am Radius gerade über Captive Portal in ein neues VLAN komme.
Das kommt darauf an was dein eigentliches Ziel ist. face-wink
Dot1x und CP sind ja eigentlich 2 getrennte Dinge die per se nichts miteinander zu tun haben werden aber oft zusammen genutzt, da hast du Recht, keine Frage.
Wobei Dot1x bzw. die dynamische VLAN Zuweisung primär dafür verantwortlich ist das Endgerät überhaupt erstmal sicher in das dazu erforderliche VLAN zu bringen. Also das reine Layer 2 Handling. Nicht mehr und nicht weniger...
Das Captive Portal ist dann für die L3 Connectivity zuständig. Fast immer auch in Verbindung mit DHCP, sprich der IP Adressierung. HIER am Beispiel der CPS auf den bekannten Firewalls OPNsense oder pfSense.

Du hast Recht, wenn du beides kombinieren willst oder musst ist es natürlich essentiell wichtig primär erstmal wichtig das die dynamischen VLAN Zuordnung funktioniert.
Dabei ist es erstmal egal ob das über Dot1x oder MAB via Radius VLAN Attribute oder über die Switchfunktion realisiert wird.
Einzig und allein zählt das ein nicht authorisiertes Endgerät in genau dem VLAN landet in der sich auch das Captive Portal befindet. Damit das CP also funktioniert ist es also essentiell das Endgeräte in dem betreffenden VLAN landet. Diese Funktion ist also essentiall für den CP Betrieb.
Diese Funktion ist übrigens völlig unabhängig vom Client. Ob du das also mit Winblows egal ob 10 oder 11, Mac OS, Linux oder Smartphones machst ist für die Funktion völlig irrelevant.

ich lande im VLAN 200, der offensichtlich von Radius übergeben wird.
Würde ja bedeuten das deine dynamische VLAN Zuweisung problemlos und korrekt funktioniert sofern der Switchport nicht statisch in das VLAN 200 konfiguriert wurde und es auch dann klappt wenn du das VLAN 200 im Radius testweise mal auf 300 änderst und der Port dann beim gleichen User in 300 liegt.
Dein "offensichtlich" macht allerdings etwas stutzig?! Bist du dir über die Funktion unsicher? Wenn ja, warum?? Du kannst das doch wasserdicht verifizieren.
Zum testen habe ich das VLAN 200 als auth-vid vom Switch zuvor entfernt, trotzdem wurde der Port auf VLAN 200 geschaltet.
Das ist gut, denn das ist das erwartbare Verhalten.
Du kannst es querchecken indem du a. den Login Namen einmal bewusst falsch schreibst, dann sollte der Port dicht bleiben. Zusätzlich einmal zum User die VLAN ID ändern. Wenn der Port sich dann in dem geänderten VLAN befindet arbeitet dein Switch wie er soll.

Und jetzt ist eben die Frage worauf es beim CP ankommt; warum die VLAN Angaben nicht am Switch ankommen - gesendet werden sie ja
Nochmal: Das CP selber hat mit dem VLAN oder auch dem dynamischen VLAN bzw. Dot1x und Radius nicht das Geringste zu tun. Es weiss gar nichts von VLANs.
CPs befinden sich fast immer auf Routern oder Firewalls, also L3 Devices und "lauschen" auf Port TCP 80 und 443 Traffic. Ist ein Router Interface (eine Firewall ist auch ein Router) mit einem aktiven CP konfiguriert forwardet dieses Interface keinen Traffic mit Ausnahme von DHCP und DNS. Sobald ein Endgerät TCP 80 oder 443 Traffic sendet und das CP dies "sieht", triggert es als Antwort darauf die eigene Portalseite die die Authentisierungsdaten abfragt.
Diese können statisch sein, ein Einmaltoken oder können auch wieder von einem Radius kommen. Die CP Authentisierung ist völlig unabhängig von der der dyn. VLANs.
Kann der User sich im CP authentisieren landen die Mac Adressen dieser Endgeräte in der Forwarding Tabelle des CPs. Ohne Authentisierung nicht und das CP blockt weiter den Traffic.
Auch das eigentlich eine einfache Logik.
Dot1x oder MAB Switch und CP haben also per se erstmal nichts miteinander zu tun. Ausnahme sind L3 Switches die eine onboard Web Authentisierung supporten.
Die Frage worauf es beim CP ankommt stellt sich doch eigentlich gar nicht. Port Authentisierung und CP sind 2 getrennte Baustellen wenn dyn. VLAN Switch und CP auf unterschiedlichen Komponenten liegen wie (vermutlich) bei dir.
aqui
aqui 02.06.2025 um 08:03:27 Uhr
Goto Top
Wenn es das als Lösung war bitte deinen Thead dann auch als erledigt schliessen!
Wie kann ich einen Beitrag als gelöst markieren?