Start · Sprachen · PHP · Referenz · radius_add_server

radius_add_server

Funktion

Fügt einem RADIUS-Handle einen RADIUS-Server hinzu, gegen den Authentifizierungs- oder Accounting-Anfragen gesendet werden können.

seit PHP 1.1.0 Kategorie: misc

Signatur

radius_add_server(resource $radius_handle, string $hostname, int $port, string $secret, int $timeout, int $max_tries): bool

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

Typ
bool
Beschreibung
Gibt 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.';
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 ...
Server hinzugefügt: radius1.example.com Server hinzugefügt: radius2.example.com

// 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.