Signatur
Beschreibung
radius_add_server() registriert einen RADIUS-Server bei einem zuvor mit radius_auth_open() oder radius_acct_open() erzeugten Handle. Es können mehrere Server hinzugefügt werden; die RADIUS-Bibliothek versucht dann bei Fehlschlag automatisch den nächsten Server in der Liste.
Der Parameter secret ist das gemeinsame Geheimnis (Shared Secret) zwischen dem NAS (Network Access Server) und dem RADIUS-Server. Es wird zur Verschlüsselung sensibler Felder (z. B. Passwörter) im RADIUS-Paket verwendet und muss auf beiden Seiten identisch konfiguriert sein.
Mit timeout legt man fest, wie lange (in Sekunden) auf eine Antwort des Servers gewartet wird, bevor ein erneuter Versuch (max_tries) unternommen oder der nächste Server versucht wird. Diese Funktion ist besonders nützlich, wenn Redundanz durch mehrere RADIUS-Server benötigt wird.
Die Funktion gibt true bei Erfolg zurück. Im Fehlerfall liefert sie false; mit radius_strerror() lässt sich die genaue Fehlermeldung abrufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $radius_handle Pflicht | resource | Ein gültiges RADIUS-Handle, erzeugt durch radius_auth_open() oder radius_acct_open(). |
|
| $hostname Pflicht | string | Hostname oder IP-Adresse des RADIUS-Servers. | |
| $port Pflicht | int | UDP-Port des RADIUS-Servers. Typisch: 1812 für Authentifizierung, 1813 für Accounting. |
|
| $secret Pflicht | string | Das gemeinsame Geheimnis (Shared Secret) zwischen NAS und RADIUS-Server. Muss auf beiden Seiten übereinstimmen. | |
| $timeout Pflicht | int | Wartezeit in Sekunden, nach der ein Versuch als fehlgeschlagen gilt und ein erneuter Versuch gestartet wird. | |
| $max_tries Pflicht | int | Maximale Anzahl der Versuche, den Server zu erreichen, bevor zum nächsten Server gewechselt wird. |
Rückgabewert
true bei Erfolg zurück. Bei einem Fehler wird false zurückgegeben; die Fehlermeldung kann mit radius_strerror() abgerufen werden.Beispiele
Einzelnen RADIUS-Authentifizierungsserver hinzufügen
<?php
$radius = radius_auth_open();
if (!$radius) {
die('Konnte RADIUS-Handle nicht öffnen.');
}
$host = 'radius.example.com';
$port = 1812;
$secret = 'mein_geheimes_passwort';
$timeout = 3; // Sekunden
$retries = 3; // Versuche
if (!radius_add_server($radius, $host, $port, $secret, $timeout, $retries)) {
die('Server konnte nicht hinzugefügt werden: ' . radius_strerror($radius));
}
echo 'RADIUS-Server erfolgreich hinzugefügt.';
Redundanz durch mehrere RADIUS-Server
<?php
$radius = radius_auth_open();
if (!$radius) {
die('Konnte RADIUS-Handle nicht öffnen.');
}
$servers = [
['radius1.example.com', 1812, 'secret1', 3, 3],
['radius2.example.com', 1812, 'secret2', 3, 3],
];
foreach ($servers as [$host, $port, $secret, $timeout, $retries]) {
if (!radius_add_server($radius, $host, $port, $secret, $timeout, $retries)) {
echo 'Fehler beim Hinzufügen von ' . $host . ': ' . radius_strerror($radius) . PHP_EOL;
} else {
echo 'Server hinzugefügt: ' . $host . PHP_EOL;
}
}
// Nun Authentifizierungsanfrage aufbauen und senden ...
// Wichtig · Fallstricke
Sicherheit: Das Shared Secret sollte ausreichend lang und zufällig sein (mindestens 16 Zeichen) und niemals im Klartext in der Versionsverwaltung gespeichert werden. Verwende Umgebungsvariablen oder eine gesicherte Konfigurationsdatei.
Erweiterung: Diese Funktion gehört zur PECL-Erweiterung radius, die separat installiert werden muss (pecl install radius). Ab PHP 8.x ist die Unterstützung eingeschränkt; prüfe die Kompatibilität deiner Umgebung.
Alternativen: Für moderne Projekte existieren reine PHP-Bibliotheken (z. B. dapphp/radius), die keine PECL-Erweiterung voraussetzen und aktiver gepflegt werden.