Intro
Die gestiegene Nachfrage nach den Zauberbuchstaben VPN und deren Gründe, weit entfernt von Netzwerktechnologien, ist nicht einmal interessant zu scherzen.
Hallo, bist du gut in Computern? hilf mir über vpn?
Tatsächlich bin ich sogar froh, dass die Leute anfangen, die Grundlagen von Computernetzwerken zu lernen (was ist VPN, was passiert es und warum werden verschiedene Websites damit geöffnet?) Und wenn möglich helfen. Ich versuche, die Prozesse zur Selbstkonfiguration meiner eigenen VPN-Server voranzutreiben, aber ich verstehe, dass nicht jeder ein Systemadministrator ist. Einige Freunde schlagen daher einfach vor, einen Server zu kaufen und ihn mir zur Konfiguration zu geben.
Aber jeder Programmierer sollte faul sein, um das Gleiche nicht wiederholt zu wiederholen. Immer wieder dieselben Aktionen auszuführen, verbessert die Fähigkeiten, tötet jedoch das gesamte Interesse an Entwicklung und Kreativität (und Zeit).
Als ich den dritten VPN-Server einrichtete, wurde mir klar, dass dies alles automatisiert und benutzerfreundlich gestaltet werden musste , damit selbst der gewöhnlichste Benutzer nach einer kurzen Anweisung den ovpn-Schlüssel mit einem Freund oder Verwandten teilen konnte. Und noch besser - um das System zu installieren, könnte der Benutzer unabhängig mit minimalen Fähigkeiten und Kenntnissen.
So entstand das VPNFace-Projekt - eine Reihe von Serverskripten zum Verwalten von Benutzerschlüsseln von OpenVPN-Servern und ein Web-Control-Panel für diese. Und nach ein paar Tagen der Entwicklung dachte ich, dass ungefähr 25% der zu legenden Funktionen niemals von demselben „normalen Benutzer“ beansprucht werden, und das Lite-Präfix wurde dem Namen hinzugefügt, und das Hauptkonzept des Projekts änderte sich von einem Allzweckdesigner zu einem engstirnigen Tool , das gleichzeitig die Entwicklungszeit vor der Veröffentlichung erheblich verkürzte.
Natürlich - nun , so ist es nie passiert - warum ein anderer OpenVPN-Manager? Um ehrlich zu sein - der Gedanke an andere Projekte von VPN-Managern kam mir in den Sinn, als der Hauptkern bereits funktionierte und ich alle möglichen kleinen Dinge sah. Zuerst war ich verärgert, dass ich so dumm war und nicht einmal eine Mindeststudie durchgeführt habe (da ich nicht besonders gerne Fahrräder herstelle), aber nachdem ich die oben genannten Projekte studiert hatte, stellte ich fest, dass meine auch eine eigene Nische hat.
Hauptmerkmale:
- Funktionaler Minimalismus: Ein gewöhnlicher Benutzer benötigt bei der Interaktion mit VPN als Administrator nur wenige Funktionen - Erstellen eines Schlüssels, Sperren und Entsperren. Es ist unwahrscheinlich, dass er daran denkt, einen anderen VPN-Server zu erstellen, wenn er einen funktionierenden hat, oder die Daten des Zertifikatcenters zu ändern. Nur wenige Benutzer benötigen schöne Verkehrsdiagramme und die Funktionalität des Unternehmensservers, um ein Telegramm ruhig verwenden zu können .
- Software-Minimalismus: Das einzige Programm, das der Benutzer benötigt, ist der offizielle OpenVPN-Client, der auf allen Systemen und Geräten verfügbar ist. Das Key Control Panel ist eine Webanwendung, die in einem Browser ausgeführt wird. Die administrative Autorisierung erfolgt über den VPN-Schlüssel.
- Semi-Fixed-Konfiguration: 80 Prozent der Benutzer benötigen dasselbe und es ist ihnen egal, welche IP-Adressen sich in den Netzwerken befinden (sie wissen nicht einmal, dass sie vorhanden sind), weitere 15 Prozent benötigen etwas mehr, aber ähnlich ein und dasselbe Außerdem schreiben die restlichen 5% ähnliche Dinge selbst und implementieren alles so, wie sie es benötigen, sodass Sie sich keine Sorgen machen können. Trotzdem kann das Panel manuell mit den bereits geöffneten VPN-Servern verbunden werden oder die Zertifikatdaten vor der Standardinstallation korrigieren.
- Absolute Distanzierung zu Hosting-Unternehmen oder anderen Diensten von Drittanbietern - es gibt einige defekte Kopien bei Streitigkeiten über das magischste Hosting, dies liegt ganz bei der Wahl des Benutzers. Das Betriebssystem des Servers ist für das Skript wichtiger - es ist unter Ubuntu / Debian-Systemen geschrieben, aber alle Hoster haben sie. Das System wird sowohl im internen als auch im Unternehmensnetzwerk ruhig stehen.
- Der einfachste Installationsprozess auf einem sauberen, frisch gekauften Server: Wenn etwas ohne Beteiligung des Benutzers ausgeführt werden kann, erfolgt dies mithilfe von Hardcode. Weil Lite. Ja, es war nicht möglich, das Installationsprogramm wie Google Outline zu erreichen. Es erfordert eine Benutzerverbindung über ssh, um die Installation zu starten, und einen unabhängigen Kauf des Servers. Es war jedoch möglich, Kenntnisse darüber zu erlangen, wie eine Verbindung über ssh hergestellt werden kann. Dies war eine der schwierigsten der erforderlichen. Mit der "Standardeinstellung" wird der Benutzer ohne Fragen mit einer "Standard" -Konfiguration konfiguriert.
Tastenbedienfeld
Während einer Standardinstallation werden drei VPN-Server erstellt: Administrator, Internet und Dark - es ist nicht schwer, anhand der Namen zu erraten, der erste dient dem Administratorzugriff auf den Server und das Schlüsselbedienfeld (und ggf. ssh), der zweite - gibt Benutzer sofort ins Internet frei, und der dritte leitet den gesamten möglichen Verkehr transparent zum Tor-Netzwerk (UDP-Verkehr mit Ausnahme von DNS geht nirgendwo hin und DNS geht an Tor)

Es wurde beschlossen, das Bedienfeld auf einem neuen sechsten AngularJS zu erstellen ( während der Installation wird eine kompilierte Version des Bedienfelds heruntergeladen, sodass die Winkelbibliotheken für die Arbeit nicht erforderlich sind ). Ich mag das Konzept von Webanwendungen und versuche, wenn möglich, in diese Richtung zu entwickeln. Ich wollte auch lange Zeit eckige Materialien studieren, um Google Admin-Panels in verschiedenen Projekten zu erstellen.
Die Schlüsselverwaltung wird, wie bereits erwähnt, auf ein Minimum vereinfacht:
Neuer Schlüssel:

Tastensperre:

Schlüssel entsperren:

Der Download-Button gibt die fertige ovpn-Datei für die Verbindung an.
Die minimale Benutzerhilfe ist in das Panel integriert:

Die kompilierte Dokumentation ist im Projekt enthalten, das standardmäßig für das administrative Subnetz an Port 81 ansteigt:

Die Bedeutung der Lite-Version beschränkte auch die Sprachunterstützung - im Moment existiert das gesamte Projekt nur auf Russisch, und die Mehrsprachigkeit ist nicht einmal im Kernel festgelegt.
Serverseite
Die Serverseite läuft auf NodeJS und Bash-Skripten. Warum ein Knoten? Ich mag sie und ich habe viele Projekte an ihr. Eine VPN-Manager-Sammlung zu haben, schien mir eine gute Idee zu sein. Das Installationsskript ruft den Knotenversionsmanager auf , installiert den Knoten v10 über ihn und erstellt einen Link zum systemweiten Ordner, damit die unter nodejs geschriebenen Dienste funktionieren.
Die auf dem Knoten installierten Pakete sind auch minimal - für immer, für immer - Dienst zum Starten des Projekts als Systemdienst, Express - für Web-API, Shelljs - zum Ausführen von Konsolenbefehlen, IP-Adresse und Subnetzrechner, Kreidefarbenausgabe an die Konsole. Natürlich kann diese Liste mit dem Perfektionismus des Minimalismus verkürzt werden, aber Akins zweites Gesetz wurde eindeutig aus dem Nichts geboren (dasselbe Gesetz kann auf die Frage „Warum Nodejs?“ Und einige andere angewendet werden) und trotz des Wunsches nach Minimalismus in anderen Fragen hier Ich beschloss, nicht tief zu gehen.
Das Serverskript verwaltet OpenVPN-Server über eine Reihe von Bash-Skripten und erfordert eine bestimmte Stammverzeichnis-Dateistruktur und OpenVPN-Dateikonfiguration. Als Datenbank werden zwei JSON-Dateien verwendet, die Folgendes ermöglichen:
- Beseitigen Sie die Interaktion mit Datenbanken wie Mongo / SQL und den damit verbundenen Abhängigkeiten und Komplikationen
- Bereiten Sie die "Basen" (und die Struktur von Verzeichnissen und Dateien) ohne Probleme manuell oder per Skript vor, wenn Sie sie auf einem konfigurierten Arbeitsserver installieren, wenn das im Kit enthaltene Installationsprogramm sogar schädlich sein kann und der Standardinstallationsprozess vermieden werden muss (die Notwendigkeit der Installation wird genau auf das Vorhandensein und den Inhalt von json überprüft Datenbankdateien)
Ein separater Bonus des Control Panels als unabhängige Webanwendung war die Aufteilung der Serverfunktionalität in einen separaten Satz von http-API-Endpunkten, wodurch Programme von Drittanbietern die Möglichkeit erhalten, Benutzerschlüssel über reguläre http-Anforderungen zu verwalten.
Einfache Installation (Standard)
Es wird davon ausgegangen, dass eine solche Installation auf sauberen neuen Servern ausgeführt wird. Wenn der Server bereits für einige Aufgaben konfiguriert ist, lesen Sie besser die manuelle Installation (um die vorhandene Funktionalität nicht zu beschädigen).
Ich mag die Installation von nvm (Node Version Manager), bei der der Benutzer nur einen Befehl im Terminal ausführen muss, den er vom Projektstandort kopiert, sodass das Standardinstallationsprogramm auf die gleiche Weise funktioniert. Während das Startinstallations-Bash-Skript ausgeführt wird, fordert das Paket iptables-persistent den Benutzer auf, die aktuellen iptables-Regeln zu speichern.

Die Auswahl des Benutzers spielt keine Rolle, da nach Abschluss der Installation die Firewall durch die letzte Aktion neu konfiguriert wird und der neue Regelsatz die aktuelle Auswahl überschreibt. Am Ende der Arbeit werden Sie vom Skript aufgefordert, die Installation über die Weboberfläche abzuschließen.

Die Webinstallation beginnt mit der Bestätigung der öffentlichen IP-Adresse des Servers. Standardmäßig übernimmt das Web-Skript Daten aus der URL der Browser-Zeichenfolge. Der Servercode konzentriert sich auf diese IP und sucht nach der Netzwerkadressschnittstelle für die zukünftige Konfiguration der Firewall- und OpenVPN-Server.

Nach dem Empfang der Netzwerkdaten erstellt das Installationsprogramm einen Administrator-VPN-Server. Die Generierung kryptografischer Schlüssel während der Einrichtung des Stammverzeichnisses dauert einige Zeit, und während der Entwicklung auf demselben Computer variierte diese Zeit zwischen 1 und 15 Minuten.
Wenn der Server erstellt und gestartet wird, fährt das Installationsprogramm mit dem zweiten Schritt fort, in dem der Benutzer aufgefordert wird, einen Administratorschlüssel zu erstellen.

Anschließend wird der Standby-Modus zum Verbinden des Administrator-VPN aktiviert. Es wird erwartet, dass VPN auf demselben Gerät angeschlossen wird, von dem aus die Installation durchgeführt wird.

Wenn ein Benutzer eine Verbindung zum VPN-Server des Administrators herstellt, wird diese unter der Adresse 10.1.0.1 verfügbar, und eine JSONP-Anforderung von der Installationsseite wird dort erfolgreich weitergeleitet. Dies ist ein Signal, die Seite an die interne Adresse umzuleiten und die Installation abzuschließen.

In der letzten Phase der Installation werden die verbleibenden zwei VPN-Server erstellt und konfiguriert (Zeit zum Generieren der Kryptografie * 2), tor, nginx und iptalbles. Nach Erhalt eines Signals zum Abschluss der Installation der Serverseite leitet das Skript die Seite an das Hauptbedienfeld weiter.
Manuelle Installation
Die manuelle Installation des Control Panels in der Arbeitsstruktur von OpenVPN-Servern erfordert mehrere Schritte und ist für den Linux-Administrator technisch machbar (und ich glaube nicht, dass eine andere Person als sie möglicherweise eine manuelle Installation benötigt):
- Vorbereitung der NodeJS-Umgebung gemäß den Anforderungen der aktuellen Serversicherheit und Organisation des Skripts in der erforderlichen Form (Service, Handbuch usw.)
- Vorbereiten der Dateistruktur von Daten- und Serververzeichnissen, Erstellen von JSON- "Datenbanken"
- Einrichten des Nginx-Proxys auf dem Bedienfeld und ggf. Dokumentation
Details und technische Details finden Sie in der Online-Dokumentation .
Abschließend
Ich hoffe, das Projekt ist für jemanden nützlich.
Projekt-Repository
Angular Web Panel Quellcode-Repository
Das Projekt wird unter der MIT-Lizenz vertrieben und zur Unterstützung der DIGITAL RESITANCE-Bewegung veröffentlicht.
PS-Entwicklungsideen über dem Dach - und die Mehrsprachigkeit verbessern, fest codierte Momente im Code beseitigen und Funktionen zum Erstellen von Servern, Verwalten von Routing und Firewall, Verwandeln des Systems in einen universellen Designer usw. hinzufügen. etc., aber wie und wann wird das alles umgesetzt? Ohne eine Ahnung wird sich die Zukunft zeigen.