OpenVPN-Statistics

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hallo Forum,

ubuntulinux und ich haben gemeinsam ein hübsches kleines Script gebastelt. Das Teil dient dazu eine schnelle Übersicht über die verbundenen OpenVPN-Clients an einem Server im Browser zu haben. Man bekommt Infos zu jeder Verbindung und zum Traffic pro Client und Total. Zusätzlich sind einige Durchschnittsberechnungen beim Traffic eingebaut und man kann (wenn man will) die verbundenen Clients auf Google Maps sehen ;-)
Das Ganze ist in PHP geschrieben und sollte einigermassen OOP sein. Es gibt ein Sprachfile, das man problemlos erweitern/anpassen kann. Zum Spass haben wir als Sprache auch ch für Schwizerdütsch eingebaut ;-)

Das Script setzt folgendes voraus:

Entpackt das zip File nach /volume1/web/openvpn (auch dieser Pfad ist nicht fix und kann als Eigenschaft der Klasse lib/php/class/openvpn_class.php entsprechend angepasst werden). Falls ihr das Script nicht in DOC_ROOT/openvpn installiert dann muss noch in lib/php/includes.php der $installation_base_path angepasst werden.
Wenn ihr aber alles nach /volume1/web/openvpn installiert, dann sollten alle Pfade der Klasse stimmen. Stellt auch sicher, dass der Webserver die Dateo geoLiteCity.dat lesen darf.
Im Verzeichnis lib/php/class gibt es ein server.php Dieses Script sollte regelmässig als cronjob ausgeführt werden, damit die Statistikfiles auf dem Server erstellt/aktualisiert werden. Zum testen reicht es jedoch, dass Script einmal auf der Konsole mit
Code:
php /volume1/web/openvpn/lib/php/class/server.php
auszuführen.
Das Script aktualisiert sich per default alle 10 Sekunden via JS-AJAX (kann ebenfalls in der Klasse angepasst werden)
Was noch angepasst werden sollte im File /volume1/web/openvpn/lib/php/class/openvpn_class.php ist die Klasseneigenschaft $auth_user. Das ist ein Array mit Usernamen/Passworten von Usern, die eine OpenVPN-Clientverbindung trennen dürfen. Dabei ist der Schlüssel des Array der Username (hier admin) und der Wert das Passwort (hier london21).
Der Quellcode sollte einigermassen kommentiert sein ;-)

Das zip ist relativ gross, weil wir noch Länderflaggen eingebaut haben, die die Herkunft der einzelnen OpenVPN-clients anzeigen

Über Rückmeldungen würden wir uns freuen, auch über Schelte ;-)
Viel Spass damit. Anschauen kann man sich es vorab hier (https://brain-force.ch/openvpn/) Login gast Kein Passwort (allerdings kann Gast keine Verbindungen beenden, das darf nur der admin)

Unter http://svn.brain-force.ch/listing.php?repname=Repos&path=%2Fdiskstation%2FOpenVPNStats%2F gibt es den aktuellsten Code (inkl aller Icons) im SVN
 

Anhänge

  • openvpn.zip
    248,8 KB · Aufrufe: 69
Zuletzt bearbeitet:

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
Ich hab den ersten Bug^^
In eurer hübschen Demo sieht man es sehr gut: Die HTML- und CSS-Checks nutzen nicht die korrekten Links ...

MfG Matthieu
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ist kein Bug ist ein Feature. Mein OpenVPN-Stat ist ohne SSL nicht zu erreichen resp mein Server leitet nicht https Zugriffe automatisch auf SSL um. Der Zugriff vom w3c ist aber via http. Bei SSL wird beim Domainwechsel der Referer aber vom Client nicht übermittelt. also kann referer nicht aufgelöst werden und kommt als String beim w3c an.
So gehts http://validator.w3.org/check?uri=https://brain-force.ch/openvpn
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Habe den Pfad mal noch so angepasst, dass auf referer verzichtet wird. Der Pfad wird nun aus der Klasse abgeleitet. sollte jetzt also auch mit dem check passen.
In lib/php/class/openvpn_class.php die Methode writeFooter() folgendermassen ersetzen.
PHP:
public function writeFooter() {
        $string = '
        <h3>Details</h3>
        <span style="display:block;float:left;color:gray;font-size:0.8em">
        IP-Adresse: ' . $_SERVER ['REMOTE_ADDR'] . ':' . $_SERVER ['REMOTE_PORT'] . '<br />
        Browser: ' . $_SERVER ['HTTP_USER_AGENT'] . '
        </span>
        <div style="float:right;margin-top:-5px;margin-right:10px;">
        <a href="http://validator.w3.org/check?uri='.$this->proto.urlencode('://'.$GLOBALS['baseURL']).'" target="fenster"><img
        border="0" src="' . $this->proto . '://www.w3.org/Icons/valid-xhtml10"
        alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
<a href="http://jigsaw.w3.org/css-validator/validator?uri='.$this->proto.urlencode('://'.$GLOBALS['baseURL']).'&profile=css3&usermedium=all&warning=1&lang=de" target="fenster">
    <img style="border:0;width:88px;height:31px"
        src="'.$this->proto.'://jigsaw.w3.org/css-validator/images/vcss-blue"
        alt="CSS ist valide!" />
</a>
</div>
    </div></div></body></html>';
        return $string;
    }
Gruss

tobi
 
Zuletzt bearbeitet:

laserdesign

Benutzer
Mitglied seit
11. Jan 2011
Beiträge
2.532
Punkte für Reaktionen
38
Punkte
94
Hallo,

bekomme es nicht zum laufen.
Fehlermeldung im Firefox:
Rich (BBCode):
Konnte keine Verbindung zum Management-Interface von OpenVPN aufbauen.

Der Pfad zur server.php den du angegeben hast:
php /volume1/web/lib/class/server.php

funktioniert bei mir auch nicht.

Bei mir liegt die server.php in
/volume1/web/openvpn/lib/php/class/

oder verstehe ich etwas falsch?

Ciao Fred ....
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Nö du siehst das richtig und ich falsch ;-)
Hatte im Beitrag das "Zwischenverzeichnis" openvpn schlicht vergessen. Sorry Das gehört natürlich dazu. Im Code selber aber stimmen die Pfadangaben ;-)
habe gerade meinen eingangspost korrigiert. danke für die Rückmeldung
 

laserdesign

Benutzer
Mitglied seit
11. Jan 2011
Beiträge
2.532
Punkte für Reaktionen
38
Punkte
94
das kann ja schonmal passieren.
Aber wie bekomme ich die Meldung im Firefox gelöst??
Ich bin nicht so der PHP Experte.
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
Ist in der Config management localhost 7505 drin? OpenVPN neu gestartet?

(/opt/etc/init.d/S**openvpn restart... ev. musst Du OpenVPN killen mit killall openvpn und dann starten mit /opt/etc/init.d/S**openvpn start)
 

laserdesign

Benutzer
Mitglied seit
11. Jan 2011
Beiträge
2.532
Punkte für Reaktionen
38
Punkte
94
Hallo.
nach einem killall openvpn und neustart von openvpn
bekomme ich nach dem Aufruf von
php /volume1/web/openvpn/lib/class/server.php

diese Fehlermeldung in der Konsole:

Rich (BBCode):
PHP Warning:  Invalid argument supplied for foreach() in /volume1/web/openvpn/lib/php/class/server.php on line 38

Was ist denn nun zu machen. Bin völlig hilflos.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Kommt diese Meldung nochmals wenn du das Script ein zweites Mal aufrufst? Beim ersten Mal existieren die Files ja noch nicht. Guck zu Sicherheit auch mal ob /volume1/web/openvpn/lib/php/stat_clients.txt und stat_server.txt existieren
 

laserdesign

Benutzer
Mitglied seit
11. Jan 2011
Beiträge
2.532
Punkte für Reaktionen
38
Punkte
94
Die beiden Dateien existieren und ja, die Fehlermeldung kommt auch beim zweiten mal wenn ich das Script aufrufe.

Achja, die Pfadangabe oben, stimmt immer noch nicht.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Die beiden Dateien existieren und ja, die Fehlermeldung kommt auch beim zweiten mal wenn ich das Script aufrufe.

Achja, die Pfadangabe oben, stimmt immer noch nicht.
Dann ruf mal http://deineDomain.tld/openvpn auf. Dann sollte dir der Status angezeigt werden.
Ich dachte eigentlich ich hätte alle Pfade in meinem ersten Post erwischt. bin der Meinung die müssten stimmen ;-) welchen meinst du denn konkret?
 

laserdesign

Benutzer
Mitglied seit
11. Jan 2011
Beiträge
2.532
Punkte für Reaktionen
38
Punkte
94
wenn ich http://deineDomain.tld/openvpn im firefox eingebe, bekomme ich die "Verbindung Fehlgeschlagen" .

Ich meinte diesen Pfad in deinem ersten Beitrag
php /volume1/web/openvpn/lib/class/server.php

sollte doch so aussehen:
php /volume1/web/openvpn/lib/php/class/server.php
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
du hast deineDomain.tld schon so angepasst, dass es auf deinen Server mit dem OpenVPN Script passt? ;-)
Den Pfad habe ich voll übersehen. Ich hab nur nach openvpn gesucht und immer gefunden :) wird gleich angepasst.
Du kannst anstelle von deineDomain.tld auch die LAN IP deiner DS verwenden
 

laserdesign

Benutzer
Mitglied seit
11. Jan 2011
Beiträge
2.532
Punkte für Reaktionen
38
Punkte
94
es läuft, hab es hinbekommen, HTTPS war notwendig.
Danke für Deine Mühe.

Super Forum und Moderatoren!!!

Ciao Fred ....
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
es läuft, hab es hinbekommen, HTTPS war notwendig.
Danke für den Hinweis, daran habe ich gar nicht mehr gedacht. Das Script geht per default via https. Man kann aber im Klassenfile openvpn_class.php die Eigenschaft proto auf 'http' stellen, dann klappts auch wenn https nicht aktiviert ist.
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
stimmt, du musst noch anpassen glaubs in der includes (habs grad nicht hier). Kannst auch auf http:// umstellen.

Und, wie findest Du das Script?
 

laserdesign

Benutzer
Mitglied seit
11. Jan 2011
Beiträge
2.532
Punkte für Reaktionen
38
Punkte
94
Und, wie findest Du das Script?

Also, ich find es super, endlich habe ich einen Überblick, wär alles gerade auf meiner DS unterwegs ist
und brauche nicht mehr zusammen zucken wenn die DS anfängt zu rattern.
Was ich mir noch wünschen würde, ist eine Benutzer und Passwort abfrage wenn ich die Seite aufrufe.
Vieleicht könnt Ihr ja sowas noch einbauen???
Ich werde jetzt mal weiter testen.

Ciao Fred ....
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
ja, hatte die Idee auch aber jahlives ist leider nicht in skype online ;) Ich würde ein PHP Login gut finden im Design wie das Statusscript selber und das Formular mit Tabellen. Im Moment hab ich leider nicht so viel Zeit (Netzwerk umrüsten, Schule und bis ich das alles hab 3 Wochen Ferien (weg)), sonst würde ich da mal was basteln ;)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Nur das Killen einer Clientverbindung ist durch einen Benutzernamen und ein PW abgesichert. Das reine "Anschauen" der Seite hingegen nicht. du kannst aber schnell eine htaccess Datei anlegen und darin eine Benutzerauthentifizierung für das openvpn Verzeichnis festlegen. Schau mal hier https://www.phpbb.de/kb/htaccess Da das Kommando htpasswd auf der DS nicht vorhanden ist, kannst du diverse htpasswd Generatoren im Web verwenden, um die verschlüsselten Passworte zu erstellen
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat