IP-Adressen, Port für Syslog-Server / Empfangs-Host-IP-Adresse von IPS für UDP-Socke

Hallo,

ich möchte gerne den Syslog-Server (Remote-Protokollierung) im Unifi-Controller einrichten und muss dort die IP vom IPS und den Port, auf den IPS lauscht, angeben. Bei mir läuft IPS als Docker-Container auf einer Synology. Welche IP-Adresse muss ich dort eingeben und welchen Port? Die IP-Adresse der Synology und der Port 3777 werden es wohl nicht sein (jedenfalls scheint das nicht zu funktionieren):confused:

Entsprechend stellt sich mir beim Anlegen eines UDP-Socket die Frage, welche Empfangs-Host-IP-Adresse von IPS ich angeben muss (der Port wird 514 sein).

Kann jemand helfen? Vielen Dank und Grüße

Götz

Hallo,

mir wäre es neu, das auf dem IPS-Rechner ein Syslog-Server läuft. Kann man natürlich einrichten, auf Systemebene. Aber wenn du doch eine Synology hast, warum nutzt du nicht den dort verfügbaren Syslog-Server (Paket heisst glaube ich „Protokoll“ oder „Protokoll-Server“).

Mache ichnauch so, das shicken alle meine Rechner, bei denen ich das eingerichtet habe, ihre Protokolle hin. Jun musst fu allerdkngs in dem Docker-Container auch einrichten, das die System-Protokoll erzeugt werden. Das geht, aber denke daran, das so etwas immer weg ist, wenn man den Docker-Container neu erzeugt (zB bei einem update).

Wenn du die Meldungen vom IPS selbst an den syslig-Server schicken willst, könntest du GitHub - demel42/IPSymconSyslog: Syslog-Client für IP-Symcon verwenden.

Gruß
demel

Danke, demel.

Ich möchte allerdings einen Syslog-Server (Remote-Protokollierung) im Unifi-Controller und nicht in IPS einrichten. Dafür muss ich bei der Einrichtung im Unifi-Controller die IP vom IPS und den Port, auf den IPS lauscht, angeben. In IPS sollen dann die Daten vom Controller in eine Registervariable laufen (vgl. im Einzelnen UniFi Modul Reloaded - Seite 13).

An der Einrichtung des Syslog-Servers scheitere ich allerdings wegen IP, Port…

Da ich nicht glauben kann, dass keiner der Profis eine Antwort hat, wenn klar ist, was die Frage ist, konkretisiere ich das ganze wie folgt:

Auf der Synology laufen unter Docker
der [ul]
[li]Unifi-Controller (erreichbar unter IP-SYNOLOGY:123) [/li][li]IPS (erreichbar unter IP-SYNOLOGY:3777)[/li][li](und andere Systeme…).[/li][/ul]

Die IP ist für den Unifi-Controller und IPS also diesselbe.

Ich möchte die Daten aus dem Unifi-Controller in IPS bekommen. Dazu möchte ich

[ul]
[li]im Unifi-Controller einen Syslog-Server einrichten[/li][li]in IPS einen UDP Socket einrichten und[/li][li]das ganze in eine Registervariable laufen lassen.[/li][/ul]

Für die Einrichtung des Syslog-Servers muss ich die IP von IPS (also IP-SYNOLOGY?!?) sowie den Port angeben, auf dem IPS lauscht - welcher Port ist das, 3777???

Für die Einrichtung des UDP Socket muss ich den Sendehost angeben (ist das IP-SYNOLOGY oder IP-SYNOLOGY:123???), den Empfangshost (hier lässt sich nur „Alle“ oder „172.17.0.2“ auswählen?!?) sowie jeweils einen Port, also 514?!?

Für Hinweise wäre ich echt dankbar…!!!

Die Antwort von demel42 war bereits korrekt.

Im Unifi Controler wird lediglich das Syslog-Sendeziel hinterlegt, als Empfänger wird ein Syslog-Server benötigt. IPS bietet das von Hause aus nicht an. Man könnte zwar einen UDP Serversocket auf Port 514 in IPS erstellen, den Port 514 von Docker auf den Host mappen und kann dann die IP des Dockerhostes(also der Synology) und den gemappten Port im Unifi Controler eintragen. Jetzt muss man sich dann aber um die Verarbeitung der ankommenden Pakete selber kümmern. Das ist aber definitiv nichts mehr für Leute ohne signifikante Programmier- und Protokollkenntnisse. Wesentlich einfacher ist es einen sylog-ng oder rsyslog Dienst auf dem Linux-System zu installieren und die Logs vom Controler dort in eine Datei schreiben zu lassen.
Ich wüßte auch nichts was an Unifi Logeinträgen wie

U7PG2,802aa849e1f5,v4.0.66.10832: hostapd: ath0: STA 00:04:20:2c:2c:2e WPA: group key handshake completed (RSN)

so interessant ist, das ich sie im IPS lesen möchte.

Die Synology bietet einen Syslog-Server bereits an, ich verwende allerdings aktuell Graylog als Ziel, damit man darin auch mal was suchen kann

Vielen Dank, tommy!!!

Die Verarbeitung erfolgt über ein Skript, das jemand geschrieben hat, der offenbar wesentlich mehr Anhnung hat als ich… (vgl. UniFi Modul Reloaded - Seite 13).

Deine Antwort hat aber gezeigt, wo es möglicherweise hapert: Das Mappen von Docker auf den Host. Wenn ich im IPS-Container in den Port-Einstellungen unter Lokaler Port und Container Port jeweils 514 (TCP) eingibt und es übernehmen möchte, kommt die Meldung

„Lokaler Port 514,3777,5544 steht im Konflikt mit anderen Ports und anderen Diensten“.

Wie gehe ich hier richtig vor?

Vielen Dank noch einmal…

Wenn der Syslogport auf dem Host schon belegt ist, kann mann auch einen anderen nehmen, z.B.11514, also -p 11514:514/udp beim Start des Containers mitgeben. Auf dem Unifi Controler dann die wieder IP des Hostes und als Port jetzt 11514 eintragen

Hi tommy,

herzlichen Dank. Im Debug Protokoll der Registervariablen kommt jetzt bei Ausführung des Skriptes immerhin schon einmal „Buffer Länge 0“, irgendetwas tut sich also (anders als bisher).

Jetzt muss ich nur noch hinbekommen, dass die Unifi-Daten reinlaufen… Das Skript wirft weiter die Fehlermeldung aus

„Notice: Undefined index: VALUE in /var/lib/symcon/scripts/15798.ips.php on line 2“

Die ersten beiden Skriptzeilen sind folgende:

$regvar = 12345;
$newdata = $_IPS[‚VALUE‘];

Viele Grüße!

[ul]
[li]Ich habe jetzt den lokalen Port 11514 auf den Container Port 514 gemappt.
[/li][li]Im Controller habe ich die IP der Synology eingetragen und den Port 11514.
[/li][li]Im UDP-Socket habe ich als Sendehost die IP der Synology eingegeben und im Übrigen alle denkbaren Konstellationen durchversucht, also die Ports 514 und 11514 mal beim einen, mal beim anderen, bei beiden 514, bei beiden 11514, als Empfangshost-IP einmal Alle, einmal die 172.17.0.2…
[/li][/ul]

Leider kommt immer dieselbe Fehlermeldung. Was mache ich falsch oder was muss ich wo eintragen, damit es richtig ist???

Die Lösung steht da schon: UniFi Modul Reloaded - Seite 13
Es ist auch nicht hilfreich in zwei Threads das gleiche Thema zu behandeln!
Michael

Hi Michael,

Danke für den Hinweis und hinsichtlich der Fehlermeldung des Skripts hast Du vollkommen recht.

Mir geht es in diesem Thread hier (so wie ich ihn gestartet habe) auch mehr um das Prinzip (Einstellungen Syslog-Server und UDP Socket bei identischer IP-Adresse etc., vgl. oben). Ich hatte das Skript bereits minütlich durchführen lassen und bekomme dennoch die Meldungen nicht rüber (Buffer Länge 0 im Debug der RegVar), trotz der unterschiedlichen Einstellungsversuche.

Ich möchte hier nur nachvollziehen, wie ich den UDP Socket (unabhängig von den Hintergründen des speziellen Skripts) grundsätzlich bei meinem Setup einzustellen habe.

Viele Grüße…

Eigentlich wurden alle notwendigen Einstellungen hinreichend erklärt.
Nochmal der Ablauf:

  • Unifi Cnfiguration : Syslog senden an IP der DS, Port 11514
  • Docker Konfiguration: Port 11514 der DS geht zu Port 514 im IPSymcon Container
  • IPS UDP ServerSocket Instance: hört auf Port 514 des Container
  • IPS RegisterVariable Instance hat als Parent die Instance des Serversocket und bekommt die empfangenen Daten automatisch via Datenfluss
  • IPS Registervariable Instance hat als Event das genannte Auswertescript und übergibt ihm die Pakete vom Serversocket in $_IPS[‚VALUE‘]
  • Das Auswertescript nimmt die Daten von $_IPS[‚VALUE‘] und wertet sie aus

Statt planlosen Rumprobieren empfehle ich die die Zeit in etwas Nachdenken wie die Daten von A nach B kommen könnten sowie einem etwas längerem Studium der IPS Dokumentation zur Funktion der Registervariablen und dem Datenfluss zu investieren, dann erklärt sich vieles von selbst.

Vielen Dank tommi für Deine Geduld und Hilfe.

Ich hatte es schon einmal (und habe es wieder) genauso eingestellt:

  • Unifi Cnfiguration : Syslog senden an IP der DS, Port 11514

Ist genau so eingestellt.

  • Docker Konfiguration: Port 11514 der DS geht zu Port 514 im IPSymcon Container

Habe ich ebenfalls gemacht.

  • IPS UDP ServerSocket Instance: hört auf Port 514 des Container

Habe in der UDP ServerSocket Instance folgende Einstellungen vorgenommen:

[ul]
[li]Sendehost: IP der DS
[/li][li]Sendeport: 514
[/li][li]Empfangshost: 172.17.0.2
[/li][li]Empfangsport: 514
[/li][li]Socket geöffnet
[/li][/ul]

  • IPS RegisterVariable Instance hat als Parent die Instance des Serversocket und bekommt die empfangenen Daten automatisch via Datenfluss

Habe in der RegisterVariable Instance folgende Einstellungen vorgenommen:
Ziel: Auswerteskript
Unter „Gateway ändern“: UDP ServerSocket Instance ausgewählt

  • IPS Registervariable Instance hat als Event das genannte Auswertescript und übergibt ihm die Pakete vom Serversocket in $_IPS[‚VALUE‘]

Nach meinem Verständnis (bestätigt durch die Doku) müsste das Skript bei einem entsprechenden Datenfluss automatisch durch die Registervariable Instance ausgelöst werden

  • Das Auswertescript nimmt die Daten von $_IPS[‚VALUE‘] und wertet sie aus

Es kommen offenbar keine Daten an, das Skript wird daher nicht durch die Registervariable getriggert. Deshalb habe ich angefangen (in der Tat planlos) herumzuprobieren in der Hoffnung, dass es doch noch funktioniert…

Es scheint noch etwas falsch zu sein oder ich habe etwas übersehen, ich weiß allerdings nach 10x nachprüfen immer noch nicht was… Möglicherweise sendet der Controller auch nichts.

Ich habe das originale Script aus UniFi Modul Reloaded - Seite 13 wenig angepasst, damit man mehr sieht. Die ankommenden Daten werden jetzt ins Meldungsfenster geschrieben.
Vorher sind manuell 3 Stringvariable, eine RegisterVariable Instance und eine UDP Socket Server Instance und das Script wie folgt anzulegen

<?php

$ipvar=21174; //Anpassen auf eigene ID
$leavevar=31157; //Anpassen auf eigene ID
$entervar=50118; //Anpassen auf eigene ID

//Prüfung, ob das Script von der Registervariable Instance gestartet wurde
if ($_IPS['SENDER'] == "RegisterVariable") {
    $regvar = $_IPS['INSTANCE'];
    $newdata = $_IPS['VALUE'];

    // Daten in Puffer speichern wird hier verzichtet
    //$buffer = RegVar_GetBuffer($regvar);
    //$buffer .= $newdata;
    //RegVar_SetBuffer($regvar, $buffer);

    // in UTF8 wandeln
    $utf8data = utf8_decode($newdata);
    IPS_LogMessage("Syslog","Daten herhalten:".$newdata); //Auskommentieren für Normalbetrieb


    // Fall 1: Endgerät hat WLAN verlassen
    if (strpos($utf8data, "EVENT_STA_LEAVE") !== false)
        {
        preg_match_all("/\b[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}\b/su", $utf8data, $macs);
        $mac = $macs[0][0];
        SetValue($leavevar, $mac);
        IPS_LogMessage("Syslog", "WLAN verlassen durch ".$mac);
        }


    // Fall 2: Endgerät hat sich ins WLAN eingebucht
    if (strpos($utf8data, "EVENT_STA_JOIN") !== false)
        {
        preg_match_all("/\b[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}\b/su", $utf8data, $macs);
        $mac = $macs[0][0];
        SetValue($entervar, $mac);
        IPS_LogMessage("Syslog","WLAN betreten von ".$mac);
        }


    // Fall 3: IP-Adresse des Endgerätes nach Einbuchen auslesen
    if (strpos($utf8data, "EVENT_STA_IP") !== false)
        {
        preg_match_all("/\b[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}\b/su", $utf8data, $macs);
        $mac = $macs[0][0];

        preg_match_all("/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/", $utf8data, $ips);
        $ip = $ips[0][1];
        SetValue($ipvar, $ip);
        IPS_LogMessage("Syslog","IP:".$ip);
        }
} else {
        echo "Script muss von Registervariable aufgerufen werden";
}

Die Registervariable Instance bekommt als Target das Script und als Gateway die UDP Socket Server Instance.

Die Socketserver-Instance ist wie folgt definiert
Sendehost: freilassen ( wir wollen nur empfangen)
Sendeport: 514 (da muss was rein)
Empfangshost: Container-ID
Empfangsport: 514
Reuse Address: aktiviert

Die relevanten Docker Container Port Einstellungen

    -p 3777:3777 \
        -p 5544:5544 \
        -p 2001:2001 \
        -p 2010:2010 \
        -p 11514:514/udp \

Im Unifi Controler die IP des Dockerhostes/Synology und Port 11514 eintragen.

Im Debug der registervariable kann man gut sehen, was gesendet wurde.
Mit

logger -n <synology-ip> -P 11514 "test"

von einem Linux System kann man auch selbst was senden.

Am Ende sieht es so aus:

Heureka, es funktioniert nun! Dass es bislang nicht geklappt hat lag daran, dass ich beim Portmapping 11514 auf 514 TCP und nicht UDP eingestellt hatte :banghead:

Noch einmal herzlichen Dank, tommi, für Deine geduldvolle Hilfe!!!

Viele Grüße…