NEWS
Linux-Control: Wireguard VPN Clients in VIS anzeigen
-
Hab heute ziemlich dran geknobelt, meine verbundenen Wiredguard Clients in ioBroker zu integrieren und will das Ergebnis mit Euch teilen.
Folgendes wird benötigt:
- Linux-Control Adapter
- funktionierender Wireguard Server
- paket
jqmuss auf dem Wireguard Server installiert werden - in der wg0.conf müssen Namen für die Peers definiert sein. Dazu muss man einfach einen Kommentar direkt unter peer schreiben, wie hier dargestellt:
[Peer] #Laptop PublicKey = XXXXXXXXXXXXXXXX AllowedIPs = 10.100.46.2/32Anzahl der verbundenen Clients ermitteln
Dazu habe ich folgendes kleines bash script geschriebenwireguard_count_clients.sh#!/usr/bin/env bash # lists connected vpn users set -euo pipefail DATE=$(date +%Y-%m-%d\ %H:%M:%S) number=0 onlineTime=120 for connected in $(wg | grep -B1 -A2 endpoint |grep peer |awk '{print $2}') do client=$(grep -B2 $connected /etc/wireguard/wg0.conf|grep -v Peer| grep -v Public) last_handshake=$(wg|grep -A3 $connected|grep latest|awk -F':' '{print $2}' | sed 's/ ago//') convertToTime="$(printf '%s' "$last_handshake" | sed 's/ seconds//'| sed 's/ second//' | sed 's/ minutes,/:/' | sed 's/ minute,/:/'| sed 's/ hours,/:/' | sed 's/ hour,/:/' | sed 's/ //g')" duration=$(echo "$convertToTime" | awk -F\: '{ for(k=NF;k>0;k--) sum+=($k*(60^(NF-k))); print sum }') if (( duration < onlineTime )); then number=$(expr $number + 1) fi done echo "$number"Diese Skript kann man jetzt über den Linux-Control Adapter ausführen -> Adapter Einstellung -> Reiter
Meine Befehle. Dort erstellt muss dann ein Eintrag erstellt werden der das skript ausführt - wichtig der Typ mussZahlsein z.B.:
Verbundenen Clients ermitteln
Mit dem nächsten Skript könnt ihr Infos (Name, IP, Empfangen & Gesendet) zu den Clients ermitteln.wireguard_clients.sh#!/usr/bin/env bash # lists connected vpn users set -euo pipefail DATE=$(date +%Y-%m-%d\ %H:%M:%S) number=0 onlineTime=120 json="" for connected in $(wg | grep -B1 -A2 endpoint |grep peer |awk '{print $2}') do client=$(grep -B2 $connected /etc/wireguard/wg0.conf|grep -v Peer| grep -v Public | sed 's/#//') last_handshake=$(wg|grep -A3 $connected|grep latest|awk -F':' '{print $2}' | sed 's/ ago//') convertToTime="$(printf '%s' "$last_handshake" | sed 's/ seconds//'| sed 's/ second//' | sed 's/ minutes,/:/' | sed 's/ minute,/:/'| sed 's/ hours,/:/' | sed 's/ hour,/:/' | sed 's/ //g')" duration=$(echo "$convertToTime" | awk -F\: '{ for(k=NF;k>0;k--) sum+=($k*(60^(NF-k))); print sum }') ip=$(wg|grep -A3 $connected|grep allowed|awk -F':' '{print $2}' | sed 's/\/32//') received=$(wg show wg0 | grep -A 2 $ip | grep transfer | sed 's/ transfer: //' | sed 's/KiB/KB/' | sed 's/MiB/MB/' | sed 's/GiB/GB/' | awk '{print $1" "$2}') sent=$(wg show wg0 | grep -A 2 $ip | grep transfer | sed 's/ transfer: //' | sed 's/KiB/KB/' | sed 's/MiB/MB/' | sed 's/GiB/GB/' | awk '{print $4" "$5}') if (( duration < onlineTime )); then #echo -e "$client $ip" | sed 's/# //' | sed 's/\/32//' | jq -Rsc json+=$(jq -n "{name:\"$client\", ip:\"$ip\", received:\"$received\", sent:\"$sent\"}") fi done echo -e "$json" | jq -n '[inputs]'Im Linux-Control Adapter legt ihr dann wie oben folgenden Punkt an, Wichtig Typ muss
Zeichenkettesein:
Die Client Infos werden als JSON String im Datenpunkt abgelegt.
Diesen kann man dann z.B. mit dem Table Widget des Material Design Adapters verarbeiten und im VIS anzeigen:
Evtl. kann es ja der ein oder andere gebrauchen oder hat Verbesserungsvorschläge.
-
Hab heute ziemlich dran geknobelt, meine verbundenen Wiredguard Clients in ioBroker zu integrieren und will das Ergebnis mit Euch teilen.
Folgendes wird benötigt:
- Linux-Control Adapter
- funktionierender Wireguard Server
- paket
jqmuss auf dem Wireguard Server installiert werden - in der wg0.conf müssen Namen für die Peers definiert sein. Dazu muss man einfach einen Kommentar direkt unter peer schreiben, wie hier dargestellt:
[Peer] #Laptop PublicKey = XXXXXXXXXXXXXXXX AllowedIPs = 10.100.46.2/32Anzahl der verbundenen Clients ermitteln
Dazu habe ich folgendes kleines bash script geschriebenwireguard_count_clients.sh#!/usr/bin/env bash # lists connected vpn users set -euo pipefail DATE=$(date +%Y-%m-%d\ %H:%M:%S) number=0 onlineTime=120 for connected in $(wg | grep -B1 -A2 endpoint |grep peer |awk '{print $2}') do client=$(grep -B2 $connected /etc/wireguard/wg0.conf|grep -v Peer| grep -v Public) last_handshake=$(wg|grep -A3 $connected|grep latest|awk -F':' '{print $2}' | sed 's/ ago//') convertToTime="$(printf '%s' "$last_handshake" | sed 's/ seconds//'| sed 's/ second//' | sed 's/ minutes,/:/' | sed 's/ minute,/:/'| sed 's/ hours,/:/' | sed 's/ hour,/:/' | sed 's/ //g')" duration=$(echo "$convertToTime" | awk -F\: '{ for(k=NF;k>0;k--) sum+=($k*(60^(NF-k))); print sum }') if (( duration < onlineTime )); then number=$(expr $number + 1) fi done echo "$number"Diese Skript kann man jetzt über den Linux-Control Adapter ausführen -> Adapter Einstellung -> Reiter
Meine Befehle. Dort erstellt muss dann ein Eintrag erstellt werden der das skript ausführt - wichtig der Typ mussZahlsein z.B.:
Verbundenen Clients ermitteln
Mit dem nächsten Skript könnt ihr Infos (Name, IP, Empfangen & Gesendet) zu den Clients ermitteln.wireguard_clients.sh#!/usr/bin/env bash # lists connected vpn users set -euo pipefail DATE=$(date +%Y-%m-%d\ %H:%M:%S) number=0 onlineTime=120 json="" for connected in $(wg | grep -B1 -A2 endpoint |grep peer |awk '{print $2}') do client=$(grep -B2 $connected /etc/wireguard/wg0.conf|grep -v Peer| grep -v Public | sed 's/#//') last_handshake=$(wg|grep -A3 $connected|grep latest|awk -F':' '{print $2}' | sed 's/ ago//') convertToTime="$(printf '%s' "$last_handshake" | sed 's/ seconds//'| sed 's/ second//' | sed 's/ minutes,/:/' | sed 's/ minute,/:/'| sed 's/ hours,/:/' | sed 's/ hour,/:/' | sed 's/ //g')" duration=$(echo "$convertToTime" | awk -F\: '{ for(k=NF;k>0;k--) sum+=($k*(60^(NF-k))); print sum }') ip=$(wg|grep -A3 $connected|grep allowed|awk -F':' '{print $2}' | sed 's/\/32//') received=$(wg show wg0 | grep -A 2 $ip | grep transfer | sed 's/ transfer: //' | sed 's/KiB/KB/' | sed 's/MiB/MB/' | sed 's/GiB/GB/' | awk '{print $1" "$2}') sent=$(wg show wg0 | grep -A 2 $ip | grep transfer | sed 's/ transfer: //' | sed 's/KiB/KB/' | sed 's/MiB/MB/' | sed 's/GiB/GB/' | awk '{print $4" "$5}') if (( duration < onlineTime )); then #echo -e "$client $ip" | sed 's/# //' | sed 's/\/32//' | jq -Rsc json+=$(jq -n "{name:\"$client\", ip:\"$ip\", received:\"$received\", sent:\"$sent\"}") fi done echo -e "$json" | jq -n '[inputs]'Im Linux-Control Adapter legt ihr dann wie oben folgenden Punkt an, Wichtig Typ muss
Zeichenkettesein:
Die Client Infos werden als JSON String im Datenpunkt abgelegt.
Diesen kann man dann z.B. mit dem Table Widget des Material Design Adapters verarbeiten und im VIS anzeigen:
Evtl. kann es ja der ein oder andere gebrauchen oder hat Verbesserungsvorschläge.
Guten Morgen @scrounger,
ich bekomme mit
wg | grep -B1 -A2 endpoint |grep peernichts gegrept - 'peer' gibt es nicht in meiner wg-Ausgaben:
┬[09:43:17] [ssh:root@pve-ct-wireguard(10.7.0.1): /etc/wireguard (700)] ╰─> # wg | grep -B1 -A2 endpoint |grep peer ┬[10:43:12] [ssh:root@pve-ct-wireguard(10.7.0.1): /etc/wireguard (700)] ╰─> # wg | grep -B1 -A2 endpoint preshared key: (hidden) endpoint: x.x.x.x:28878 allowed ips: 10.7.0.2/32 latest handshake: 26 seconds ago ┬[10:43:15] [ssh:root@pve-ct-wireguard(10.7.0.1): /etc/wireguard (700)] ╰─> # wg -v wireguard-tools v1.0.20210223 - https://git.zx2c4.com/wireguard-tools/Kannst du mal schauen wie das bei dir Ausschaut? Hast du ggf. eine andere Wireguard-Tools Version?
wg0.conf
[Interface] Address = 10.7.0.1/24 PrivateKey = xxx ListenPort = 51820 [Peer] #handy1 PublicKey = xxx PresharedKey = xxx AllowedIPs = 10.7.0.2/32 [Peer] #handy2 PublicKey = xxx PresharedKey = xxx AllowedIPs = 10.7.0.3/32 -
Guten Morgen @scrounger,
ich bekomme mit
wg | grep -B1 -A2 endpoint |grep peernichts gegrept - 'peer' gibt es nicht in meiner wg-Ausgaben:
┬[09:43:17] [ssh:root@pve-ct-wireguard(10.7.0.1): /etc/wireguard (700)] ╰─> # wg | grep -B1 -A2 endpoint |grep peer ┬[10:43:12] [ssh:root@pve-ct-wireguard(10.7.0.1): /etc/wireguard (700)] ╰─> # wg | grep -B1 -A2 endpoint preshared key: (hidden) endpoint: x.x.x.x:28878 allowed ips: 10.7.0.2/32 latest handshake: 26 seconds ago ┬[10:43:15] [ssh:root@pve-ct-wireguard(10.7.0.1): /etc/wireguard (700)] ╰─> # wg -v wireguard-tools v1.0.20210223 - https://git.zx2c4.com/wireguard-tools/Kannst du mal schauen wie das bei dir Ausschaut? Hast du ggf. eine andere Wireguard-Tools Version?
wg0.conf
[Interface] Address = 10.7.0.1/24 PrivateKey = xxx ListenPort = 51820 [Peer] #handy1 PublicKey = xxx PresharedKey = xxx AllowedIPs = 10.7.0.2/32 [Peer] #handy2 PublicKey = xxx PresharedKey = xxx AllowedIPs = 10.7.0.3/32 -
@darkiop
Und du musst auch grep auf wg0.conf ausführen. Schau dir bitte das Skript genau an.weiter mussen die berechtihungen passen und immer den vollstandigem pfad nehmen
@scrounger Guten Morgen,
das hatte ich.
Das aus der for-Schleife herausgezogene
wg | grep -B1 -A2 endpoint |grep peer |awk '{print $2}'wurde zum Testen ausgeführt, da mir das Skript nicht das erwartete Ergebnis brachte.
Aktuell ist ein Client verbunden:
┬[08:42:56] [ssh:darkiop@pve-ct-wireguard(10.7.0.1): ~ (755)] [sudo] ╰─> $ wg interface: wg0 public key: xxxxx= private key: (hidden) listening port: 51820 peer: xxxxx= preshared key: (hidden) endpoint: x.x.x.x:30835 allowed ips: 10.7.0.2/32 latest handshake: 8 seconds ago transfer: 377.86 KiB received, 778.34 KiB sent peer: xxxxx= preshared key: (hidden) allowed ips: 10.7.0.3/32 ┬[08:42:58] [ssh:darkiop@pve-ct-wireguard(10.7.0.1): ~ (755)] [sudo] ╰─> $ sudo ./wg_clients.sh 0Das Skript gibt aber 0 aus.
-
@scrounger Guten Morgen,
das hatte ich.
Das aus der for-Schleife herausgezogene
wg | grep -B1 -A2 endpoint |grep peer |awk '{print $2}'wurde zum Testen ausgeführt, da mir das Skript nicht das erwartete Ergebnis brachte.
Aktuell ist ein Client verbunden:
┬[08:42:56] [ssh:darkiop@pve-ct-wireguard(10.7.0.1): ~ (755)] [sudo] ╰─> $ wg interface: wg0 public key: xxxxx= private key: (hidden) listening port: 51820 peer: xxxxx= preshared key: (hidden) endpoint: x.x.x.x:30835 allowed ips: 10.7.0.2/32 latest handshake: 8 seconds ago transfer: 377.86 KiB received, 778.34 KiB sent peer: xxxxx= preshared key: (hidden) allowed ips: 10.7.0.3/32 ┬[08:42:58] [ssh:darkiop@pve-ct-wireguard(10.7.0.1): ~ (755)] [sudo] ╰─> $ sudo ./wg_clients.sh 0Das Skript gibt aber 0 aus.
-
@scrounger Guten Morgen,
das hatte ich.
Das aus der for-Schleife herausgezogene
wg | grep -B1 -A2 endpoint |grep peer |awk '{print $2}'wurde zum Testen ausgeführt, da mir das Skript nicht das erwartete Ergebnis brachte.
Aktuell ist ein Client verbunden:
┬[08:42:56] [ssh:darkiop@pve-ct-wireguard(10.7.0.1): ~ (755)] [sudo] ╰─> $ wg interface: wg0 public key: xxxxx= private key: (hidden) listening port: 51820 peer: xxxxx= preshared key: (hidden) endpoint: x.x.x.x:30835 allowed ips: 10.7.0.2/32 latest handshake: 8 seconds ago transfer: 377.86 KiB received, 778.34 KiB sent peer: xxxxx= preshared key: (hidden) allowed ips: 10.7.0.3/32 ┬[08:42:58] [ssh:darkiop@pve-ct-wireguard(10.7.0.1): ~ (755)] [sudo] ╰─> $ sudo ./wg_clients.sh 0Das Skript gibt aber 0 aus.
-
Hallo zusammen,
bei mir funktioniert es leider auch nicht.
Hat es jemand in der Zwischenzeit hinbekommen?
@joerg1979 @darkiop @donut99 @Scrounger
Die beiden Scripte laufen leider mit der aktuellen Wireguard Version nicht mehr, da die Namen in der wg0.conf nicht mehr ausgegeben werden und auch die Ausgabe selbst geaendert wurde.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden