• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Raspberry Pi, RPI-Monitor, neue "Sensoren"

/dev/null

Moderator
Teammitglied
Hallo Freunde,

Weil der RPI-Monitor ja auch ein Dienst ist, poste ich nach langem Suchen meine Frage mal hier.
Ich erwähne auch fairerweise, dass ich das gleiche Problem schon im Raspi-Forum gepostet habe (dort gehört es ja eigentlich hin), aber bis jetzt noch keine Antwort erhielt.

Ich betreibe jetzt mittlerweile vier RasPi mit diversen Diensten (von pi-hole über Seafile, radicale ... bis KODI). Und auf allen Geräten läuft der RPI-Monitor. Für jedes der Geräte habe ich die Konfiguration des RPI-Monitors so angepasst, dass "nützliche" Sachen angezeigt und nicht zutreffendes ausgeblendet wird.

Ich betreibe schon viele Jahre ein dauerhaftes VPN-Dreieck per AVM-VPN zwischen drei entfernten Standorten ("Eifel" - "Leipzig" - "Dänemark") mit Clientanbindung von bis zu 10 Clients je Server. Nun läuft auf meinem vierten RasPi (und auch an den anderen Standorten) je ein Wireguard-Server und alles ist auf diese drei Server migriert, läuft prächtig und kann den Uplink auch voll auslasten.

Jetzt möchte ich gern die "Lebenszeichen" der anderen beiden Server und der insgesamt ca. 25 Clients auf dem RPI-Monitor angezeigt haben.

Intern funktioniert das so, dass zwischen allen Servern und Clients ein udp-Netz aufgebaut wird (bei mir: 192.168.42.0 mit :40404). Es reicht mir, wenn ich bspw. per "ping" diese je Gerät festen IPs anspreche. Es geht ja nur darum zu erkennen, ob eine bestimmte IP erreichbar ist, was so ziemlich identisch mit der Funktion des Tunnels zu diesem Gerät ist.

Und genau das möchte ich mit dem RPI-Monitor machen ... .

Die aktiven Dienste werden bspw. per netstat ermittelt und grafisch angezeigt. Das Monitoring der Dienste (auch der WG-Port 40404) ist somit klar. Aber wie mache ich das mit der IP?

Beispiel für den DNS.Server:
Code:
dynamic.9.name=DNS
dynamic.9.source=netstat -nlt
dynamic.9.regexp=tcp .*:(53).*LISTEN

Und hier die grafische Auswertung:
web.status.1.content.1.line.3= " <b>pi-hole DNS</b>: " +Label(data.DNS,"==53","OK","success")+Label(data.DNS,"!=53","KO","danger")

Ich würde mich über Denkanstöße sehr freuen. Weitere Informationen werden selbstverständlich gerne geliefert.


MfG Peter
(Und wie immer: Liebe Grüße nach Leipzig!)
 
/dev/null schrieb:
... Aber wie mache ich das mit der IP?
Leider verstehe ich die Frage nicht. Ich habe nur einen Verdacht was du meinen könntest.
Wie wäre das:
Code:
dynamic.x.source=ssh ip_server_oder_client netstat -tnalp
Gruß
Gräfin Klara
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
Danke!
Ich glaube, dass ist der von mir benötigte Denkanstoß. Werde gleich mal testen

MfG Peter
 
Natürlich muß in ~/.ssh/config folgendes eingetragen sein:
Code:
HOST klarissa
	HostName ip_des_clients_mit_laufendem_sshd
	Port 22
	AddressFamily inet
	ConnectTimeout 3
	User root
	IdentityFile ~/.ssh/name_des_keys_für_klarissa
Dann würde die Zeile folgend aussehen:
dynamic.x.source=ssh klarissa netstat -tnalp

Der key für klarissa sollte so erstellt worden sein, dass kein password notwendig ist.
Wenn das nicht der Fall ist, dann vorher:
Code:
# ssh-add /root/.ssh/name_des_keys_für_klarissa
> password
Damit ist das password für diesen key dem System bekannt.

Gruß
Gräfin Klara
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
Nein, ist es leider doch noch nicht.

Noch mal zum Ausgang.
Wenn der WG-Server gestartet wird, dann verbindet er sich per udp mit seinen Gegenstellen. Mit dem Kommando "wg" kann man das wie folgt sehen (hier nur oben die Daten meines WG-Servers und darunter meines Smartphones):
Code:
root@raspi-2:/etc/rpimonitor/template # wg
interface: wg0
  public key: <Dummie .... 4=>
  private key: (hidden)
  listening port: 40404

peer: 
  preshared key: (hidden)
  endpoint: 82.207.*.*:36093
  allowed ips: 192.168.42.101/32, fd00:42::101/128
  latest handshake: 1 minute, 28 seconds ago
  transfer: 116.27 MiB received, 2.10 GiB sent

Ausgehend von meinem WG-Server (wo eben auch der RPI-Monitor läuft) kann ich die IPs (192.168.42.*) der drei WG-Server und auch der bei mir angeschlossenen und ggw. verbundenen Clients "anpingen". Von meinem PC aus geht das gewolltermaßen (Routing) nicht. Sonst könnte ich das ja mit dem dauerhaft laufenden Applett "Serverstatus" direkt vom PC machen. Der wertet selbst ICMP-Echos aus.

Code:
root@raspi-2:/etc/rpimonitor/template # ping -4 192.168.42.101
PING 192.168.42.101 (192.168.42.101) 56(84) bytes of data.
64 bytes from 192.168.42.101: icmp_seq=1 ttl=64 time=102 ms
64 bytes from 192.168.42.101: icmp_seq=2 ttl=64 time=602 ms
64 bytes from 192.168.42.101: icmp_seq=3 ttl=64 time=41.5 ms
^C
--- 192.168.42.101 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 41.540/248.531/601.987/251.149 ms
root@raspi-2:/etc/rpimonitor/template #

Mein Ziel ist also, die beiden dauerhaft mit meinem eigenen WG-Server per VPN verbundenen anderen WG-Server und die mit meinem eigenen WG-S. zu verbindenden/verbundenen Clients per RPI-Monitor grafisch darzustellen. Also wie bei allen anderen Diensten in einer kleinen Tabelle mit Name und Button "OK" oder "KO".

Per netstat habe ich keine entsprechende Ausgabe hinbekommen. Weder nach udp noch nach tcp gefiltert und auch nicht mit Beigabe der gesuchten IP:

Code:
root@raspi-2:/etc/rpimonitor/template # netstat 192.168.42.101 -unalp
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           223/avahi-daemon: r 
udp        0      0 0.0.0.0:40404           0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           337/dhclient        
udp        0      0 0.0.0.0:39019           0.0.0.0:*                           223/avahi-daemon: r 
udp6       0      0 :::5353                 :::*                                223/avahi-daemon: r 
udp6       0      0 :::60280                :::*                                223/avahi-daemon: r 
udp6       0      0 :::40404                :::*                                -                   
root@raspi-2:/etc/rpimonitor/template # netstat -unalp
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           223/avahi-daemon: r 
udp        0      0 0.0.0.0:40404           0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           337/dhclient        
udp        0      0 0.0.0.0:39019           0.0.0.0:*                           223/avahi-daemon: r 
udp6       0      0 :::5353                 :::*                                223/avahi-daemon: r 
udp6       0      0 :::60280                :::*                                223/avahi-daemon: r 
udp6       0      0 :::40404                :::*                                -                   
root@raspi-2:/etc/rpimonitor/template # netstat -tnalp
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      713/sshd            
tcp        0      0 192.168.188.160:22      192.168.188.10:45514    VERBUNDEN   7537/sshd: pi [priv 
tcp        0    204 192.168.188.160:22      192.168.188.10:45210    VERBUNDEN   7395/sshd: pi [priv 
tcp6       0      0 :::22                   :::*                    LISTEN      713/sshd

Die einzigen IPs welche ich sehe, sind die der ssh-Verbindung mit ihren beiden Endpunkten PC und RasPi. Und ich sehe natürlich, dass auf dem RasPi die udp-Verbindung auf :40404 steht bzw. auf weitere Verbindungen lauscht. Das letztgenannte werte ich ja auch schon mit "Wireguard = OK" aus.

BTW:
Ich sehe gerade, dass du noch mal gepostet hast (ssh ...). Ich schicke erst mal ab und lese dann deinen Beitrag durch.
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
ssh:
Ich will das ganze schon auf dem RasPi und mit dem RPI-Monitor machen. Deshalb ist der Zugang per ssh auch nicht erforderlich. (Mal ganz davon abgesehen, dass ich generell in der sshd_config den direkten Root-Zugang verbiete, ausschließlich PubkeyAuthentication zulasse und meine private-keys mit einem PW gesichert sind. JA, ich übertreibe eben ... .)

Wenn mir eine Lösung einfallen würde, mit welcher ich eine ICMP Anwort automatisiert auswerten und grafisch darstellen kann, wäre ich schon weiter.

BTW:
Das alles hier ist HOBBY eines IT-Rentners. Ich freue mich über jeden helfenden Hinweis - werde es aber auch überleben, wenn dieser Wunsch nicht in Erfüllung geht. Also ... vertretbarer Aufwand ... :)


MfG Peter
 
Das ist komplex und und es braucht schon eine Abbildung des Aufbaus um es wirklich zu verstehen.
Ich kann deshalb nur ahnen.

Probier das Problem auf den Kopf zu stellen.
Schau es dir nicht von der Netzwerk- sondern von der Prozessseite an, also von Innen und nicht von Außen.
Von Seite Netzwerk gesehen ist z.B. 0.0.0.0:68 eine korrekte Information, der udp listener hört an allen devices.
So hast du sie konfiguriert (was nicht gut ist)
Von Innen betrachtet (also aus Sicht des Prozesses) ist diese Information natürlich nicht korrekt.
Code:
root@raspi-2:/etc/rpimonitor/template # lsof -a -c/.*$/ -i4 -nP
Was tut das?
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
Es meckert, dass dieses Programm auf dem RasPi nicht installiert ist ;-)
Ich installiere das mal nach und teste.

Für heute mache ich aber erst mal Schluss. Noch eine Runde mit dem Hund und dann winkt der Bettzipfel. Ich war schon beim letzten Moderatorentreffen 2011 in Köln der Älteste - und jetzt erst ... .

Gute Nacht!
MfG Peter

edit:
Ich konnt's nicht lassen ...
Code:
root@raspi-wgs:/etc/rpimonitor/template # lsof -a -c/.*$/ -i4 -nP
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae 231 avahi   12u  IPv4  10077      0t0  UDP *:5353 
avahi-dae 231 avahi   14u  IPv4  10079      0t0  UDP *:60164 
dhclient  339  root    7u  IPv4  11437      0t0  UDP *:68 
sshd      712  root    3u  IPv4  12593      0t0  TCP *:22 (LISTEN)
sshd      936  root    3u  IPv4  12919      0t0  TCP 192.168.188.160:22->192.168.188.10:45106 (ESTABLISHED)
sshd      964    pi    3u  IPv4  12919      0t0  TCP 192.168.188.160:22->192.168.188.10:45106 (ESTABLISHED)
root@raspi-wgs:/etc/rpimonitor/template #

Aber nun endgültig weg ...
 
Schade!
Bleibt nur ICMP oder ein kleiner udp server.
Wie sollte der output bei ICMP für eine optimale Auswertung aussehen?
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
Ich bin ja immer von der Voraussetzung ausgegangen: wenn die Gegenstelle (ein Client oder ein anderer WG-Server) aktiv und mit ihrer in der .conf vergebenen festen IP erreichbar ist (per ICMP oder meinetwegen erkennbar auf :40404 lauschend), dann steht auch der entsprechende VPN-Tunnel.
Die eigentliche Auswertung (die Anzeige) hätte ich dann schon irgendwie analog des geposteten Musters für den laufenden DNS-Server gemacht. Also wenn <was auch immer>, dann Anzeige "OK", wenn nicht, dann "KO" und damit eine grüne oder rote Fläche.
Letztendlich wollte ich im RPI-Monitor eine Anzeige erreichen, wie ich sie bei der Plasma-App "Serverstatus" habe.

Ist wohl doch schwieriger, als ich dachte (sonst hätte ich mich auch nicht hilfesuchend an zwei Foren gewandt). Vlt. werde ich mich auch noch einmal direkt an den Entwickler des RPI-Monitors wenden - wenn nur mein "im höheren Alter selbst beigebrachtes Englisch" (was mir allerdings bislang immer gereicht hat!) nicht hemmend wirken würde. Engl. Texte lesen und verstehen ist das eine, selbst welche verfassen das andere.

Vielen Dank für deine Hilfe und Unterstützung!

MfG Peter
 
Zur Zeit - so sieht es für mich aus - lauscht dieser udp Server auf Port 40404 an allen am System verfügbaren IPs, z.B. auch auf localhost:40404.
Wenn du diesen Server so einstellst, dass er nur auf EIN device bzw. eine IP lauscht, dann sollte diese IP auch gezeigt werden.
Probier es aus, zumindest für einen Test, die Konfiguration dieses Servers sollte das anbieten.
Wenn das funktioniert, dann hätte ich eine Lösung.

Gruß
Gräfin Klara
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
Ich sehe, du bist genau so hartnäckig, wie ich ;-)

Vlt. noch einmal zur Definition meiner WG-Server:
- raspi-wgs ist der bei mir stehende WG-Server (WG-Server Sonne <= mein Heimnetz), auf dem auch der RPI-Monitor läuft
- raspi-wgh ist der in Leipzig stehende WG-Server (kommt von "h" wie harley, mein Sohn, der hier auch User ist)
- und ggw. noch einer in DK, der aber für unser Problem keine Rolle spielt bzw. die Ergebnisse einfach übergebügelt bekommt, (falls wir Erfolg haben).

Selbstverständlich lauscht jeder der ggw. 3 Server auf Verbindungen auf udp:40404 und nimmt auch alle Verbindungen an, welche aus dem internen Netz 192.168.42.0/24 (und dem entsprechenden IPv6-Netz) kommen und den passenden Schlüssel haben. Auf dem Server sind dann wieder deren pub-keys, der gemeinsame PSK + die IP des jeweiligen Clients/Servers gespeichert. Das Tripel aus IP, pub/sec-Key und PSK erledigt also die Authentifizierung.
Eine Festlegung auf eine IP ist also kaum möglich. Es würde natürlich gehen, wenn ich je Gegenstelle gezielt nach einer IP suche und diese dann auswerte.
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
Jetzt habe ich dich verstanden - und somit die Aufgabe erkannt, dieses zu realisieren.
Bis jetzt kenne ich nämlich beim WG-Server keinerlei Möglichkeit, dieses irgendwo einzustellen. Das ganze WG-VPN wird mit einer einzigen globalen .conf je Endpunkt konfiguriert. Muss jetzt mal sehen, ob ich da irgend eine Beschränkung rein bekommen.
 
OP
/dev/null

/dev/null

Moderator
Teammitglied
Problem gelöst!

Um über das WG-VPN telefonieren zu können, habe ich eine statische Route auf das interne udp-Netz eingerichtet.
Und damit erreichte ich den "Nebeneffekt", dass ich die Aktivität (= Erreichbarkeit) der jeweiligen WG-Server und -Clients mit dem schönen Tool "Server-Status" direkt auf dem Desktop monitoren kann.
Warum ist mir das nicht gleich eingefallen? :blush:

Ich wünsche allen Mitlesern und Aktiven hier im Forum ein zufriedenes, erfolgreiches und friedliches (!) Jahr 2020!

MfG Peter
 
Mit meinem Vorschlag hättest du einen "statischen UDP Listener" erreicht, der an einer IP hängt und den du deshalb monitieren kannst
ABER
deine Idee ist gescheiter.

Gratuliere zu 2019 und alles Gute für 2020
Gräfin Klara
 
Oben