Zum Inhalt

Radius, RadSec und Certmgr

Stand: 2026-06-11

Diese Seite ist die zentrale MkDocs-Referenz fuer die Lanstyle Radius-/RadSec-Plattform und den Certmgr-Zertifikatspfad. Sie ersetzt keine Secret-Ablage; Passwoerter, Private Keys und Token gehoeren ausschliesslich nach Vaultwarden.

Kurzstand

Bereich Wert
Radius/RadSec VM VM 601 sgo-radius
Interner Zielname radius.ad.lanstyle.de
EAP/Public Name radius.lanstyle.de
Interne IP 10.222.40.36/24
RadSec Public NAT 80.155.133.58 TCP 2083 nach 10.222.40.36
Certmgr LXC 112 certmgr, 10.222.40.51/24
WLAN Onboarding/Hinweisportal LXC 128 wlan-onboarding, 10.222.40.52/24, https://wlan-onboarding.lanstyle.de
Proxmox Deploy-Pfad Proxmox 10.0.0.220 plus QEMU Guest Agent in VM 601
RadSec DynDNS Watcher radsecproxy-dyndns-watch.timer, prueft SMS/SGO alle 5 Minuten

Dienste

Dienst Port Zweck
FreeRADIUS UDP 1812/1813 RADIUS Auth/Accounting
FreeRADIUS local auth UDP 127.0.0.1:18120 lokale Auth-Instanz
radsecproxy TCP 2083 RadSec TLS von Aruba-Standorten
Nginx/UI TCP 80 Radius-Weboberflaeche
MariaDB TCP 127.0.0.1:3306 lokale Radius-Datenbank, nicht remote exponiert

Kundenzuordnung

Kunde Status Bestaetigte RadSec-Quelle
SGO Sportgymnasium Oberhof aktiv DynDNS sgo.fortidyndns.com, aktuell 176.52.192.249, radsecproxy Clientname sgo
SMS Salzmannschule Schnepfenthal aktiv DynDNS sms.dyndns64.de, aktuell 80.153.196.109, radsecproxy Clientname sms
SGJ Sportgymnasium Jena aktiv extern 82.119.173.50, radsecproxy Clientname sgj

Zertifikatsmodell

BYOD- und Schuelergeraete koennen keine interne Lanstyle-Root-CA voraussetzen. FreeRADIUS EAP verwendet deshalb ein oeffentlich vertrautes Let's-Encrypt-Zertifikat fuer radius.lanstyle.de.

RadSec bleibt davon getrennt:

  • radsecproxy nutzt ebenfalls das Let's-Encrypt-Serverzertifikat fuer radius.lanstyle.de.
  • Aruba RadSec-Clientzertifikate der Schulen bleiben auf interner Lanstyle-CA.
  • Auf Aruba-Controllern ist kein Upload des LE-Serverzertifikats erforderlich, solange die oeffentliche LE-Kette akzeptiert wird.
  • Windows-/BYOD-Clients zeigen beim ersten PEAP-Verbindungsaufbau ohne vorab verteiltes WLAN-Profil ggf. eine Vertrauensabfrage. Erwartet ist Ausgestellt fuer: radius.lanstyle.de, aktuell Ausgestellt von: YR2. Das ist kein Fehler, solange der Name und die oeffentliche LE-Kette passen.

Aktive Pfade auf VM 601:

Komponente Pfad
FreeRADIUS Fullchain /etc/freeradius/3.0/certs/le_fullchain.pem
FreeRADIUS Key /etc/freeradius/3.0/certs/le_privkey.pem
radsecproxy Fullchain /etc/radsecproxy/certs/le/fullchain.pem
radsecproxy Key /etc/radsecproxy/certs/le/privkey.pem

Certmgr-Automatisierung

certmgr-renew.timer auf LXC 112 startet certmgr-renew.service.

Der Service fuehrt zwei produktive Renewal-Pfade aus:

  • /opt/certmgr/certmgr-renew.sh production fuer ad.lanstyle.de und *.ad.lanstyle.de
  • /opt/certmgr/certmgr-renew-radius.sh production fuer radius.lanstyle.de

Bei geaendertem Radius-Zertifikat ruft der Radius-Pfad /opt/certmgr/deploy-radius.sh auf. Das Deploy-Script kopiert ueber SSH auf Proxmox 10.0.0.220 und nutzt dort den QEMU Guest Agent fuer VM 601.

Deploy-Ablauf:

  1. Zertifikat und Key nach VM 601 schreiben.
  2. Backup der bisherigen Radius-Zertifikatsdateien anlegen.
  3. freeradius -C ausfuehren.
  4. radsecproxy neu starten.
  5. freeradius neu starten.
  6. Dienststatus pruefen.

Graylog-Anbindung

Lanstyle Radius/RadSec 10.222.40.36 sendet FreeRADIUS-/RadSec-Logs an Graylog:

  • Ziel: 10.222.60.20:1514/tcp
  • Mechanismus: rsyslog
  • FreeRADIUS-Dateilog: /var/log/freeradius/radius.log wird per imfile gespiegelt
  • Live-Mitschnitt 2026-06-07: Payloads und ACK am Graylog-LXC bestaetigt
  • Seit 2026-06-08 filtert /etc/rsyslog.d/90-graylog-radius-radsec.conf erwartbaren radsecproxy Idle-/Reconnect-Chatter vor dem Graylog-Forwarding.
  • Gefiltert werden tlsservernew: incoming TLS connection, erfolgreiche TLS connection ... up und tlsserverrd ... no requests.
  • Lokales Journal bleibt vollstaendig; echte radsecproxy Fehler/Warnungen werden weiter nach Graylog gesendet.
  • FreeRADIUS-Auth-Logging ist aktiv (auth = yes), Passwortlogging bleibt deaktiviert (auth_badpass = no, auth_goodpass = no). Damit landen Login OK, Login incorrect und Invalid user ueber den FreeRADIUS-Dateimirror in Graylog, ohne Passwoerter zu protokollieren.
  • Backup der Filteraenderung: /root/rsyslog-radsec-noise-filter-backup-20260608-010251

RadSec DynDNS und Idle-Verhalten

radsecproxy nutzt fuer SMS und SGO bewusst DynDNS-Namen, weil die oeffentlichen Standort-IP-Adressen wechseln koennen:

Standort radsecproxy Client Hostname
SMS sms sms.dyndns64.de
SGO sgo sgo.fortidyndns.com

Wichtig: radsecproxy loest FQDNs laut lokaler Manpage nur beim Start auf und uebernimmt spaetere DNS-Aenderungen nicht automatisch. Deshalb laeuft auf VM 601 der Timer radsecproxy-dyndns-watch.timer.

Der Watcher:

  • prueft alle 5 Minuten die DNS-Aufloesung von SMS und SGO,
  • speichert den letzten Stand in /var/lib/radsecproxy/dyndns-client-ips.state,
  • startet radsecproxy nur bei tatsaechlicher IP-Aenderung neu,
  • loggt Aenderungen mit Tag radsecproxy-dyndns-watch.

Backup/Einrichtung:

  • /root/radsecproxy-dyndns-hosts-cleanup-20260608-150636/hosts
  • /root/radsecproxy-dyndns-watch-backup-*

Die Logmeldung tlsserverrd: timeout ... no requests, closing connection ist erwartbares Aruba-/RadSec-Idle-Verhalten, wenn eine TLS-Verbindung aufgebaut, aber kein RADIUS-Request gesendet wird. TCPKeepalive on ist in den RadSec-Client-Bloecken gesetzt; das verhindert tote TCP-Sessions, ersetzt aber kein echtes RADIUS-Status-/Keepalive-Paket. StatusServer ist in radsecproxy fuer ausgehende Server-Bloecke relevant, nicht fuer eingehende Aruba-Clients.

Aruba Controller Timing

Stand 2026-06-08:

Standort Controller Enterprise-SSID RadSec-Ziel Accounting Interim-Accounting
SGO 192.168.30.32 SGO radius.lanstyle.de aktiv 5 Minuten
SMS 10.64.2.65 SMS radius.lanstyle.de aktiv 5 Minuten
SGJ 10.128.16.204 SGJ radius.lanstyle.de aktiv 5 Minuten

Der Aruba-Parameter radius-interim-accounting-interval ist in Minuten angegeben. Fuer das RadiusDesk-Ziel "Passwort plus registrierte MAC-Adresse, Geraetebegrenzung ueber MACs statt Session-Limit" ist 5 Minuten der operative Sollwert fuer entfernte Standorte. 30 Minuten ist funktional, aber zu traege fuer zeitnahe Accounting-/Statussicht nach Roaming, Abbruch oder Geraetewechsel.

RadSec laeuft standortseitig ueber den oeffentlichen Namen radius.lanstyle.de; WAN-seitig wird nur TCP 2083 zum radsecproxy benoetigt. Auth und Accounting werden danach lokal auf VM 601 an FreeRADIUS UDP 1812/1813 weitergereicht. Es ist keine separate oeffentliche UDP-Freigabe fuer 1812/1813 vorgesehen.

Backups/Readbacks der letzten Controller-Aenderungen:

  • SGO: /Users/vinc32/Documents/Syslog/backups/aruba-sgo-accounting-20260607_234729
  • SGO Live-Verify: /Users/vinc32/Documents/Syslog/backups/aruba-sgo-live-verify-20260608_000002
  • SMS/SGJ: /Users/vinc32/Documents/Syslog/backups/aruba-remote-timing-20260607_235931

VLAN999 Hinweis- und Onboarding-Portal

Stand 2026-06-11:

  • Portal-LXC: 128 wlan-onboarding, IP 10.222.40.52, URL https://wlan-onboarding.lanstyle.de.
  • Healthcheck: /healthz.
  • SGO und SMS sind hint_only: kein M365-Login, keine MAC-Selbstregistrierung.
  • SGJ nutzt M365-Self-Service mit Admin-GUI, RadiusDesk-Sync und CoA/Disconnect fuer automatische Reauth.
  • Falsches Passwort bleibt Access-Reject.
  • Korrektes Passwort plus unbekannte/private MAC ist fuer SGO/SMS kein Reject mehr, sondern Access-Accept mit VLAN 999 und Aruba-Hinweisrolle.

FreeRADIUS/RadiusDesk:

  • RADIUSdesk_mac_quarantine_vlan setzt bei MAC-Quarantaene zusaetzlich:
  • @SGO: Aruba-User-Role := "SGO-MAC-Hinweis"
  • @SMS: Aruba-User-Role := "SMS-MAC-Hinweis"
  • Backup vor der Aenderung: /root/backups/radiusdesk-hint-role-20260611-004126/ auf VM 601.
  • Session-Limits sind auf 0; die Geraetebegrenzung erfolgt ueber registrierte MACs.

Aruba:

Standort Captive-Profil Hinweisrolle Portal-URL
SGO SGO-Hinweisportal SGO-MAC-Hinweis https://wlan-onboarding.lanstyle.de/?site=sgo
SMS SMS-Hinweisportal SMS-MAC-Hinweis https://wlan-onboarding.lanstyle.de/?site=sms
SGJ Captive-/Onboarding-Flow mit M365 SGJ PreAuth/Onboarding https://wlan-onboarding.lanstyle.de/?site=sgj

UDM/Firewall fuer SGO/SMS:

Standort VLAN999-Netz Gateway UDM/API Stand
SGO 192.168.255.0/24 192.168.255.1 https://10.3.0.1 Legacy-Regeln fuer Portal/DNS/DHCP allow, danach local/routed block
SMS 10.64.255.0/24 10.64.255.1 https://10.64.0.1 Zone-Policies fuer Portal/DNS/DHCP allow, danach Internal/VPN/DMZ/Hotspot/Gateway/External block

Portal-Ports: TCP 80, 443, 8088 zu 10.222.40.52. Fuer SGO/SMS gibt es keine Microsoft-Allowlist und kein freies Internet in VLAN 999.

Backups/Readbacks:

  • Portal-App/Doku: Lanstyle-Projekt ops/wlan_onboarding.
  • SGO UDM: ops/unifi/backups/sgo-vlan999-hint-lockdown-20260611_062640.
  • SMS UDM: ops/unifi/backups/sms-vlan999-hint-lockdown-20260611_061720.
  • SGO/SMS Aruba: ops/wlan_onboarding/backups/aruba-*-hintportal-20260611-*.
  • SGO UniFi API-Key liegt in Vaultwarden als SGO / UniFi UDM Pro API.
  • SMS UniFi API-Key liegt in Vaultwarden als SMS / UniFi UDM Pro API.

RadiusDesk MAC- und Session-Policy

Stand 2026-06-11:

  • Alle vorhandenen permanent_users haben Rd-Mac-Check := 1.
  • Damit muss die Client-MAC als Device/MAC in RadiusDesk eingetragen sein.
  • Lehrerprofile haben session_limit = 0 und Rd-Fup-Session-Limit = 0.
  • Nicht-Lehrerprofile haben ebenfalls session_limit = 0; die Limitierung erfolgt nicht ueber parallele Sessions, sondern ueber registrierte MACs/Geraete.
  • EAP/PEAP und TTLS kopieren die aeussere Calling-Station-Id in den inner-tunnel, damit die MAC-Pruefung bei Benutzer/Passwort-Authentifizierung greifen kann.
  • Der inner-tunnel normalisiert Calling-Station-Id vor RADIUSdesk_main ueber RADIUSdesk_rewrite_calling_station_id.

Aktiver Zielstand: Session-Limits blockieren nicht mehr; die MAC-Pflicht gilt weiterhin fuer alle Profile. Unterschiede zwischen Lehrer/Schueler/Trainer werden ueber erlaubte/registrierte Geraete bzw. Profilregeln abgebildet, nicht ueber offene Accounting-Sessions.

MAC-Format:

  • Aruba kann Calling-Station-Id z.B. als aabbccddeeff, aa:bb:cc:dd:ee:ff oder aa-bb-cc-dd-ee-ff liefern.
  • RadiusDesk speichert Devices ueberwiegend als aa-bb-cc-dd-ee-ff.
  • Die aktive Policy normalisiert die Anfrage vor dem DB-Vergleich auf Bindestrichformat.
  • Offene Alt-/Stale-Sessions in radacct sind weiterhin ein Monitoring-/Cleanup-Thema. Stand 2026-06-08 waren 32 offene Sessions mit 2 unbekannten MACs sichtbar; Cleanup muss wegen RadiusDesk-Triggern separat sauber umgesetzt werden.

RadiusDesk Accounting und Trigger

Am 2026-06-08 wurde ein Accounting-Folgefehler behoben: FreeRADIUS meldete bei Accounting-Stop/Update rlm_sql_mysql: ERROR 1136 (Column count doesn't match value count at row 1). Ursache war nicht die FreeRADIUS-Accounting-Query, sondern der RadiusDesk-Trigger auf radacct, der per INSERT INTO radacct_history SELECT * FROM radacct kopiert. radacct hatte 34 Spalten, radacct_history nur 30.

Korrektur:

  • radacct_history um die fehlenden IPv6-Spalten ergaenzt:
  • framedipv6address
  • framedipv6prefix
  • framedinterfaceid
  • delegatedipv6prefix
  • Trigger-Test mit Stop-Update erfolgreich.
  • Backup: /root/radiusdesk-radacct-history-schema-fix-20260608-150939

radpostauth und radacct schreiben wieder; radpostauth zeigt Access-Accept/Access-Reject, radacct dient weiter als Grundlage fuer Session-Limits.

Backup/Readback der Umstellung:

  • /Users/vinc32/Documents/Syslog/backups/radiusdesk-enforce-mac-limit-20260608_001055
  • /Users/vinc32/Documents/Syslog/backups/radiusdesk-inner-tunnel-mac-normalize-20260608_003256
  • Server-Backup: /root/radiusdesk-enforce-mac-limit-backup-20260608-001056
  • Server-Backup inner-tunnel: /root/radiusdesk-inner-tunnel-mac-normalize-backup-20260608-003257

Verifikation

Zertifikats- und Serviceverifikation vom 2026-06-08:

  • radius.lanstyle.de: Let's Encrypt, SAN DNS:radius.lanstyle.de, aktuelle CA YR2, RSA-Zertifikat.
  • FreeRADIUS: active.
  • radsecproxy: active.
  • MariaDB: active.
  • systemd-resolved: active.
  • rsyslog: active.
  • radsecproxy-dyndns-watch.timer: active.
  • Key/Cert-Match per Public-Key-Hash bestaetigt.
  • Keine neuen unknown CA, More than 50 roundtrips, No EAP session oder SQL-1136-Fehler im Nachbeobachtungsfenster nach den Fixes.
  • SMS-Testuser test.wifi@SMS wurde mit registrierter MAC erfolgreich authentifiziert; dynamisches VLAN 2020 wurde geliefert und Accounting geschrieben.

Backups der letzten Umstellung:

  • Certmgr: /root/certmgr-radius-deploy-backup-20260607-204423
  • Radius vor Deploy: /root/radius-certmgr-predeploy-backup-20260607-224424
  • Radius lokaler ACME-Cron: /root/radius-disable-local-acme-backup-20260607-225523

Betriebsregeln

  • Keine Radius-/RadSec-Secrets in MkDocs oder Obsidian speichern.
  • FreeRADIUS EAP fuer BYOD bleibt auf oeffentlichem LE-Zertifikat.
  • Interne Lanstyle-CA bleibt fuer RadSec-Clientzertifikate und verwaltete interne Zertifikate relevant.
  • Lokalen acme.sh-Cron auf Radius nicht wieder aktivieren, solange certmgr zentrale Zertifikatsquelle ist.
  • MariaDB bleibt lokal gebunden auf 127.0.0.1:3306.
  • Firewall-Freigaben fuer TCP 2083 nur fuer berechtigte RadSec-Clients fuehren.
  • Statische /etc/hosts-Eintraege fuer SMS/SGO duerfen nicht dauerhaft verwendet werden; wechselnde Standort-IP-Adressen muessen ueber DynDNS und den Watcher verarbeitet werden.
  • auth_badpass und auth_goodpass nicht aktivieren, damit keine Passwoerter in lokalen Logs oder Graylog landen.

Verwandte Seiten