So richten Sie ein vollständig vermaschtes Peer-to-Peer-VPN zwischen Servern ein

Wenn Sie mehrere Server auf DigitalOcean oder Vultr bereitgestellt haben, wissen Sie wahrscheinlich, dass jedem Server eine private IP-Adresse zugewiesen werden kann, die dem privaten Netzwerk des Rechenzentrums zugeordnet ist. Dies ist großartig, da damit verteilte Dienste (wie Datenbanken) bereitgestellt werden können, die mit einer Latenz von nahezu Null miteinander kommunizieren.

Das „Problem“ ist, dass das private Netzwerk gemeinsam genutzt wird: Das bedeutet, dass sich im selben Subnetz Hunderte und möglicherweise Tausende anderer Server befinden. Daher sollten Sie irgendwann ein virtuelles privates Netzwerk (VPN) zwischen Ihren Servern einrichten, damit diese über ein verschlüsseltes Netzwerk mit benutzerdefinierten privaten IP-Adressen (z. B. 10.0.1.x) miteinander in Kontakt treten können .

Warum sollten Sie vpncloud.rs verwenden?

Eine der gebräuchlichsten Lösungen zum Einrichten eines VPN ist OpenVPN, aber das werde ich heute nicht behandeln. Bei BotFactory sind mehr als 10 Server auf DigitalOcean gehostet, und wir wollten eine relativ einfache Möglichkeit, den Datenverkehr zwischen unseren Servern zu verschlüsseln, ohne stundenlang das Netzwerk konfigurieren zu müssen. Wir wollten etwas, das neue und entfernte Server automatisch erkennt. Deshalb haben wir uns für vpncloud.rs entschieden. Hier sind einige der Highlights von vpncloud.rs:

  • Sie können das VPN an eine benutzerdefinierte Schnittstelle binden, sodass Sie mit all Ihren Hosts ein Netzwerk wie 10.0.x.x / 16 erstellen können
  • Es wird ein vollständig vermaschtes Peer-to-Peer-VPN-Netzwerk erstellt. Dies bedeutet, dass jeder der Hosts die IP-Adresse eines anderen Servers (innerhalb des VPN) benötigt, um alle Knoten automatisch zu erkennen
  • Der Tunnel ist natürlich verschlüsselt und AES-256 wird unterstützt
  • Automatische Neuverbindung, wenn eine Verbindung unterbrochen wird oder ein Peer vorübergehend nicht verfügbar ist
  • Gute Leistung
  • Ein vorgefertigtes .deb-Paket ist verfügbar
  • Es ist Open Source
  • Die Konfiguration ist denkbar einfach. Sie werden überrascht sein
  • es ist stabil Wir haben vpncloud.rs seit fast einem Jahr auf 10 Servern ausgeführt und hatten nie einen Absturz oder ein Problem. Es funktioniert einfach

Im Folgenden wird erläutert, wie Sie mit vpncloud.rs ein grundlegendes P2P-VPN-Mesh-Netzwerk konfigurieren.

Lass uns gehen

Zunächst müssen Sie vpncloud.rs auf jedem der Server installieren, die Sie in das virtuelle Netzwerk aufnehmen möchten.

Ich gehe davon aus, dass die Server Ubuntu ausführen, aber die folgenden Schritte sollten für alle Debian-basierten Linux-Distributionen gleich sein. Wenn Sie eine andere Linux-Distribution verwenden, befolgen Sie die Schritte in der Readme-Datei zum Kompilieren.

Führen Sie diese Befehle aus:

wget https://github.com/dswd/vpncloud.rs/releases/download/v0.8.1/vpncloud_0.8.1_amd64.deb
sudo dpkg -i vpncloud_0.8.1_amd64.deb

Ein systemd-Dienst wird automatisch zusammen mit einer Beispielkonfigurationsdatei erstellt.

Aufbau

Die Konfigurationsdatei sieht folgendermaßen aus und befindet sich in /etc/vpncloud/example.net.disabled.

Als erstes sollten Sie eine Kopie der Beispieldatei erstellen.

sudo cp /etc/vpncloud/example.net.disabled /etc/vpncloud/myvpn.net
sudo nano /etc/vpncloud/myvpn.net

Schauen wir uns nun den Inhalt der Konfigurationsdatei an. Die hier beschriebenen Änderungen sollten auf allen Servern vorgenommen werden, auf denen Sie das VPN installiert haben.

Wie bereits erwähnt, erstellt vpncloud.rs ein vollständiges Mesh, benötigt dazu jedoch nicht die IP-Adressen aller Server. In meiner Konfiguration habe ich 3 Peers konfiguriert, die die IP-Adressen der 3 Datenbankserver sind (sie sollten niemals gleichzeitig offline sein). Jede VPN-Instanz kann diese Peers verwenden, um Verbindungen mit allen anderen Hosts im virtuellen Netzwerk herzustellen.

Gleichaltrigen

Das Folgende ist eine Beispielkonfiguration für Peers.

Gleichaltrigen:
  - privateip1: 3210
  - privateip2: 3210

Obwohl es möglich ist, die öffentlichen IP-Adressen der Server in die Konfiguration aufzunehmen, wird empfohlen, die internen IP-Adressen des privaten Netzwerks (z. B. von DigitalOcean für eth1 bereitgestellt) zu verwenden, um eine bessere Leistung und geringere Latenz zu erzielen. Sie können auch Hostnamen verwenden oder "falsche" Hostnamen einfügen, die Sie dann den privaten IP-Adressen in der Datei / etc / hosts zuordnen können.

Stellen Sie außerdem sicher, dass der Port 3210 im internen Netzwerk auf allen Servern geöffnet ist. Wenn Sie eine einfache Firewall benötigen, mit der Sie einen Port nur auf einer Schnittstelle öffnen können, werfen Sie einen Blick auf FireHOL. Es ist toll!

Gemeinsamer Schlüssel

Im Folgenden finden Sie ein Konfigurationsbeispiel für die Option "shared_key". Auf allen Servern sollte derselbe Schlüssel festgelegt werden.

shared_key: "nT4gAGSP! S9! 2Rjb9% h * gdVN * 8NszP"

(* Diesen Schlüssel nicht verwenden *)

Dies ist der Schlüssel, der verwendet wird, um den symmetrischen Schlüssel abzuleiten, der mit AES-256 zum Verschlüsseln des VPN-Verkehrs verwendet wird. Der Vorteil der Verwendung eines gemeinsam genutzten Schlüssels besteht darin, dass Sie keine komplexen Schlüssel zwischen Servern übertragen müssen. Es ist wie ein Passwort und sollte eine Zeichenfolge aus ASCII-Zeichen sein. In meinem Fall ist der gemeinsame Schlüssel eine zufällige Zeichenfolge mit 30 ASCII-Zeichen.

Verschlüsselung

Standardmäßig verwendet vpncloud.rs ChaCha20 als Verschlüsselungsalgorithmus. Auf DigitalOcean-Servern wird AES-256 von den CPUs unterstützt, sodass Sie den Verschlüsselungs- / Entschlüsselungsalgorithmus für eine bessere Leistung auf AES-256 einstellen können.

Krypto: aes256

Virtuelle Schnittstelle

Zuletzt sollten Sie die Optionen ifup und ifdown angeben, die die Befehle angeben, die von vpncloud.rs ausgeführt werden sollen, wenn die Netzwerkschnittstelle für das VPN gestartet (und heruntergefahren) wird.

ifup: "ifconfig $ IFNAME 10.0.1.1/8 mtu 1400"
ifdown: "ifconfig $ IFNAME down"

Anhand der IP-Adresse (in CIDR-Notation), die Sie im Befehl ifup angegeben haben, erkennt das Betriebssystem automatisch, dass Sie ein Netzwerk erstellen, dessen Hosts sich in diesem Fall im Subnetz 10.x.x.x befinden.

In meinem Fall habe ich die Server durch Ändern des dritten Oktetts der Adresse „gruppiert“, um eine Konfiguration wie die folgende zu erreichen:

  • 10.0.1.x reserviert für Datenbankserver
  • 10.0.2.x reserviert für Webserver

Lauf Junge, lauf

Nachdem Sie die obige Konfiguration auf allen Servern angewendet haben, können Sie den VPN-Dienst starten.

sudo service vpncloud @ myvpn starten

Dabei sollte myvpn durch den Namen der Konfigurationsdatei ersetzt werden (ohne die Erweiterung .net).

Überprüfen Sie den sudo-Dienst vpncloud @ myvpn auf Fehler und versuchen Sie dann, alle Server zu pingen: Pingen Sie auf jedem Server 10.0.1.1, 10.0.1.2 usw., je nach Konfiguration. Sie sollten alle mit einer Latenz von nahezu Null arbeiten.

Vergessen Sie nicht, den Dienst zu aktivieren, damit er beim Systemstart automatisch ausgeführt wird.

sudo systemctl enable vpncloud @ myvpn

Hosts benennen

Um die Hosts des VPN leichter erkennbar zu machen, können Sie die IP-Adressen Hostnamen zuordnen und der Datei / etc / hosts auf jedem Server die folgenden Zeilen hinzufügen.

10.0.1.1 db1.vpn
10.0.1.2 db2.vpn

War das nicht einfach?

Wenn Sie diesen Artikel nützlich fanden, klatschen Sie bitte und teilen Sie :)

Wenn dir vpncloud.rs so gut gefallen hat wie mir, starte das Repository auf GitHub und wenn du in der Lage bist, einen Fehler zu finden, trage dazu bei, indem du ein Problem erstellst oder eine Pull-Anfrage sendest (du musst ein bisschen Rust verstehen um das zu tun.

Schauen Sie sich auch das vpncloud.rs-Wiki auf GitHub an, wenn Sie andere Aspekte des VPN kennenlernen möchten.