GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

VPN mit Tinc auf Ubuntu 16.04 LTS installieren

Ein Virtual Private Network (VPN) ist ein sicheres privates Netzwerk, das über ein größeres öffentliches Netzwerk wie das Internet betrieben wird. VPNs sind in den letzten Jahren immer beliebter geworden, vor allem, weil sie mehr Sicherheit und Privatsphäre bieten, ohne dass teure und komplexe neue Hardware eingerichtet werden muss. Sie bieten auch mehrere andere Vorteile, einschließlich reduzierter Netzwerk- und Supportkosten.

VPNs funktionieren, indem sie einen verschlüsselten Tunnel durch ein öffentliches Netzwerk erstellen und diesen verwenden, um Daten sicher zwischen Servern und Terminals zu senden. Diese Verbindungen können auf verschiedene Weise verschlüsselt werden, und es gibt viele verschiedene VPN-Clients und -Daemons, die zu Ihrer Architektur, Ihrem Budget und Ihrer Erfahrung passen.

Tinc ist eine solche Lösung (1). Als Open-Source-VPN-Daemon ist er jetzt für eine Vielzahl von Plattformen verfügbar und hat mehrere Vorteile gegenüber ähnlichen VPN-Clients. Es bietet eine sichere und zuverlässige Verschlüsselung, optionale Komprimierung und ist leicht erweiterbar, wenn Ihr Netzwerk wächst. Das automatische Full-Mesh-Routing bedeutet, dass der VPN-Verkehr immer (wenn möglich) direkt an den Zielcomputer gesendet wird, ohne zwischenzeitliche Übertragungen zu durchlaufen, und dies verbessert die Sicherheit erheblich, indem die Möglichkeit des Datendiebstahls eingeschränkt wird (3). Da das Tinc VPN für den Netzwerkcode auf IP-Ebene wie ein normales Netzwerkgerät erscheint, besteht nach dem Einrichten eines Tinc VPN keine Notwendigkeit, vorhandene Software anzupassen. Dadurch ist das Tinc VPN von Natur aus skalierbar.

Das einzige kleine Problem mit Tinc ist, dass einige Leute es als etwas schwierig empfunden haben, es einzurichten. Wenn das nach Ihnen klingt, keine Sorge – heute zeige ich Ihnen eine (mehr oder weniger) problemlose Möglichkeit, ein Tinc-VPN auf Ihren Servern zum Laufen zu bringen.

Voraussetzungen

Um diesem Tutorial vollständig zu folgen, benötigen Sie mindestens drei Ubuntu 16.04-Server und Root-Zugriff auf jedem Computer. Wenn Sie dies nicht haben oder sich nicht sicher sind, was das bedeutet, ist dieses Tutorial nichts für Sie – Sie sollten sich zuerst ansehen, wie Sie einen Server mit Ubuntu (2) einrichten.

Wenn Sie ein Serversystem von Grund auf neu aufbauen, müssen Sie zuerst darüber nachdenken, wie Ihre Maschinen miteinander kommunizieren werden. In diesem Tutorial werde ich die Variablennamen verwenden, die meiner Meinung nach die meisten Leute wählen würden, aber seien Sie sich bewusst, dass Sie möglicherweise einige der Variablennamen an Ihre eigene Einrichtung anpassen müssen.

Wenn Sie diesem Tutorial genau folgen möchten, müssen Sie zuerst zwei VPS im selben Rechenzentrum einrichten und dann einen dritten VPS in einem zweiten Rechenzentrum erstellen. Meine Rechenzentren heißen NYC2, das die beiden VPS hat, und AMS2, das das dritte hat. Diese VPS heißen wie folgt:

externalnyc – Alle unsere VPN-Knoten werden sich mit diesem Server verbinden, was bedeutet, dass er verbunden und verfügbar bleiben muss, um sicherzustellen, dass das Netzwerk ordnungsgemäß funktioniert. Wenn Sie Ihrer Einrichtung eventuell zusätzliche Server hinzufügen möchten, müssen diese auf die gleiche Weise wie externalnyc eingerichtet werden.

internalnyc – Dieser VPS verbindet sich über eine private Netzwerkschnittstelle mit dem VPN-Knoten von externalnyc.

ams1 – Dies ist unsere öffentliche VPN-Verbindung. Es stellt über das öffentliche Internet eine Verbindung zu externalnyc her.

Ziel

Folgendes wollen wir erreichen:

Unser privates Netzwerk wird durch die grüne Linie dargestellt und verbindet alle drei Server. Das Orange ist unser privates Netzwerk, das die beiden NYC2-Server miteinander verbindet. Alle drei Server können sich über das VPN verbinden, obwohl das private Netzwerk für AMS1 nicht zugänglich ist.

Gehen Sie dazu folgendermaßen vor:

Installieren Sie Tinc

Zuerst müssen wir Tinc installieren. Stellen Sie wie immer sicher, dass alle Ihre apt-Repositories auf dem neuesten Stand sind, indem Sie Folgendes ausführen:

sudo apt-get update

Installieren Sie dann Tinc auf die übliche Weise über apt:

sudo apt-get install tinc

Und das ist es! Ihr Computer lädt nun Tinc und alle erforderlichen Voraussetzungen herunter. Nun müssen wir uns die Konfiguration ansehen.

Konfiguration

Die Konfiguration von Tinc unterscheidet sich möglicherweise ein wenig von anderen VPNs, an die Sie gewöhnt sind. Es verwendet einen „Netznamen“, um ein VPN von einem anderen zu unterscheiden. Dies ist sehr nützlich, wenn mehrere VPNs über Tinc laufen, ist aber zunächst etwas kontraintuitiv. Da dies unser erstes Tinc-Netzwerk ist, halten wir es einfach und nennen unser VPN „Netzname“.

Jetzt für jeden unserer Server. Jeder benötigt drei Konfigurationskomponenten:

Die Konfigurationsdateien:tinc.conf, tinc-up, tinc-down und eine optionale Anzahl anderer Dateien.

Öffentliche und private Schlüsselpaare:Diese dienen der Verschlüsselung und Authentifizierung.

Host-Konfigurationsdateien:Diese enthalten öffentliche Schlüssel und andere VPN-Konfigurationselemente.

Lassen Sie uns nun jeden unserer Server der Reihe nach konfigurieren. Als erstes, externalnyc.

Externalnyc konfigurieren

OK, jetzt zu den Schrauben und Muttern. Beginnen Sie auf externalnyc damit, die Konfigurationsverzeichnisstruktur für den VPN-Netznamen zu erstellen. Ausführen:

sudo mkdir -p /etc/tinc/netname/hosts

Öffnen Sie nun die tinc.conf in Ihrem ausgewählten Texteditor:

sudo vi /etc/tinc/netname/tinc.conf

Sobald Sie die Datei vor sich haben, fügen Sie am Ende der Datei Folgendes hinzu:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Alles, was Sie hier tun, ist, einen Knoten namens externalnyc zu konfigurieren und dem Server mitzuteilen, dass seine Netzwerkschnittstelle IPv4 verwenden und „tun0“ heißen wird. Speichern Sie die Datei und schließen Sie sie.

Als nächstes müssen wir eine Host-Konfigurationsdatei für externalnyc erstellen. Öffnen Sie dazu die Hosts-Konfigurationsdatei in einem Texteditor:

 sudo vi /etc/tinc/netname/hosts/externalnyc

Fügen Sie wieder einige Zeilen am Ende dieser Datei hinzu und ersetzen Sie die öffentliche IP-Adresse Ihres VPS in der ersten Zeile:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Dies ist die Datei, die andere Server verwenden, um sich mit externalnyc zu verbinden. Die Adresse teilt anderen Knoten mit, wie und wo sie sich mit diesem Server verbinden sollen, und die Subnetzadresse ist das Subnetz, in dem dieser Daemon operiert. Speichern Sie erneut Ihre Änderungen an dieser Datei und schließen Sie sie.

Jetzt müssen wir das öffentliche/private Schlüsselpaar für diesen Host generieren. Das ist ganz einfach, führen Sie einfach Folgendes aus:

 sudo tincd -n netname -K4096

Dadurch wird ein privater RSA-Schlüssel erstellt und ein öffentliches Schlüsselpaar am Ende der gerade erstellten Konfigurationsdatei hinzugefügt. Sie können es erneut öffnen, um zu sehen, ob dies geschehen ist, wenn Sie möchten.

Jetzt müssen wir tinc-up erstellen, ein kleines Skript, das ausgeführt wird, wenn unser VPN gestartet wird. Öffnen Sie die folgende Datei zum Bearbeiten:

 sudo vi /etc/tinc/netname/tinc-up

Und fügen Sie hinzu:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

Immer wenn der VPN-Netzname gestartet wird, wird dieses Skript ausgeführt. Es wird eine Netzwerkschnittstelle erstellt, die von unserem VPN verwendet wird, und auf diesem VPN hat externalnyc eine IP von 10.0.0.1.

Aber wenn das VPN gestoppt wird, möchten wir, dass diese Netzwerkschnittstelle verschwindet, also brauchen wir ein weiteres Skript. Dies sollte an tinc-down angehängt werden. Öffnen:

 sudo vi /etc/tinc/netname/tinc-down

Und dann fügen Sie hinzu:

#!/bin/sh
ifconfig $INTERFACE down

Und wieder speichern und beenden. Wir haben jetzt unsere Skripte, aber damit sie funktionieren, müssen sie als ausführbar markiert werden. Das geht ganz einfach über die Kommandozeile:

sudo chmod 755 /etc/tinc/netname/tinc-*

Speichern und beenden Sie, und Sie sind mit der Konfiguration dieses Servers fertig. Als nächstes internalnyc und ams1.

internalnyc und ams1 konfigurieren

Um die beiden verbleibenden Server zu konfigurieren, müssen Sie auf jedem Computer dieselben Befehle ausführen. Es gibt ein paar geringfügige Abweichungen, auf die ich hinweisen werde, aber der Prozess ist im Grunde derselbe.

Wie wir es oben mit externalnyc getan haben, müssen wir zuerst die Verzeichnisstruktur für unsere Konfigurationsdateien erstellen. Führen Sie auf jedem Server Folgendes aus und öffnen Sie dann die Tinc-Konfigurationsdatei zum Bearbeiten:

 sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.conf

Fügen Sie dann ein paar Zeilen am Ende dieser Datei hinzu und ersetzen Sie „node_name“ durch den Namen jedes Knotens:

Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc

Sie können sehen, dass unsere beiden Server jetzt so konfiguriert sind, dass sie versuchen, eine Verbindung zu externalnyc herzustellen. Speichern Sie diese Datei und schließen Sie sie.

Jetzt müssen wir die Hosts-Konfigurationsdatei erstellen. Ausführen:

 sudo vi /etc/tinc/netname/hosts/node_name

Fügen Sie dann für internalnyc diese Zeile hinzu:

Subnet = 10.0.0.2/32

Und für ams1 fügen Sie diese Zeile hinzu:

Subnet = 10.0.0.3/32

Der einzige Unterschied besteht hier darin, dass sich die Adressen unterscheiden, sodass wir unsere Server voneinander unterscheiden können. Speichern Sie diese Datei und schließen Sie sie.

Jetzt müssen wir wie zuvor unsere öffentlichen/privaten Schlüsselpaare generieren und das Startskript für die Netzwerkschnittstelle erstellen. Führen Sie auf jedem Server Folgendes aus:

 sudo tincd -n netname -K4096

Und dann:

 sudo vi /etc/tinc/netname/tinc-up

Jetzt. Für jeden Server müssen wir die zuvor angegebenen Adressen verwenden. Wenn Sie mir genau folgen, müssen Sie für internalnyc hinzufügen:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

Und für ams1:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

Aber wenn Sie oben andere Adressen angegeben haben, ändern Sie diese auch hier. Speichern Sie diese Dateien und beenden Sie. Wir haben es fast geschafft.

Wir müssen nur das Netzwerkschnittstellen-Stopp-Skript erstellen, genau wie zuvor:

 sudo vi /etc/tinc/netname/tinc-down

Und fügen Sie dann diese Zeile auf beiden Servern hinzu:

ifconfig $INTERFACE down

Und der allerletzte Konfigurationsschritt besteht darin, unsere neuen Skripte ausführbar zu machen:

 sudo chmod 755 /etc/tinc/netname/tinc-*

Speichern und Beenden. Puh. Wenn alles geklappt hat, sind jetzt alle drei Server konfiguriert. Nun zur Implementierung der Kryptografie.

Schlüssel verteilen

Wenn Sie bereits ein Konfigurationsverwaltungssystem verwenden, haben Sie Glück. In einer idealen Welt muss jeder Knoten, den wir jetzt erstellt haben, in der Lage sein, direkt mit einem anderen Knoten über eine Schnittstelle mit öffentlichem / privatem Schlüssel zu sprechen. Wie wir oben gesehen haben, befinden sich die Schlüssel jetzt in den Hosts-Konfigurationsdateien für jeden Server. In dem einfachen Netzwerk, das wir hier aufbauen, muss eigentlich nur externalnyc Schlüssel mit den anderen Knoten austauschen.

Der einfachste Weg, dies zu tun, besteht darin, einfach jeden öffentlichen Schlüssel auf alle Mitglieder der verschiedenen Knoten zu kopieren. Das ist eigentlich ziemlich einfach, achten Sie nur darauf, den „address“-Wert in der Konfigurationsdatei von externalnyc beim Kopieren auf seine eigene private IP-Adresse zu ändern. Auf diese Weise wird die Verbindung über das private Netzwerk hergestellt.

Wenn Sie mir gefolgt sind und Ihr VPN „Netzname“ genannt haben, finden Sie die Konfigurationsdateien des Hosts hier:/etc/tinc/netname/hosts

Schlüssel zwischen externalnyc und internalnyc austauschen

Das ist einfach. Suchen Sie auf internalnyc die Hosts-Konfigurationsdatei und kopieren Sie sie nach externalnyc:

 scp /etc/tinc/netname/hosts/internalnyc [email protected]_private_IP:/tmp

Kopieren Sie dann auf externalnyc dieselbe Datei an den richtigen Ort:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc .

Jetzt machen wir das umgekehrte Verfahren. Kopieren Sie auf externalnyc die Konfigurationsdatei des Hosts nach internalnyc:

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_private_IP:/tmp

Und dann auf internalnyc die Datei kopieren, damit sie an der richtigen Stelle ist:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

Jetzt müssen wir die Hosts-Konfigurationsdatei von externalnyc auf internalnyc bearbeiten, damit die Adresse korrekt ist. Auf diese Weise verbinden sich die Knoten über das private Netzwerk mit dem VPN. Öffnen Sie also auf internalnyc die Hosts-Konfigurationsdatei für externalnyc:

 sudo vi /etc/tinc/netname/hosts/externalnyc

Und ändern Sie den Adresswert wie folgt in die private IP-Adresse von externalnyc:

Address = externalnyc_private_IP

Speichern Sie die Datei und beenden Sie sie. Das sind diese beiden Schlüssel. Jetzt müssen wir nur noch Schlüssel mit unserem einen verbleibenden Knoten austauschen.

Schlüssel zwischen externalnyc und ams1 austauschen

Der Prozess hier ist ziemlich ähnlich. Kopieren Sie mit ams1 die Hosts-Konfigurationsdatei nach externalnyc:

 scp /etc/tinc/netname/hosts/ams1 [email protected]_public_IP:/tmp

Und dann wieder an die richtige Stelle kopieren, mit externalnyc:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .

Bleiben Sie auf externalnyc und kopieren Sie die Datei in die andere Richtung nach ams1:

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_public_IP:/tmp

Und noch einmal, auf ams1, kopieren Sie diese Datei, damit sie an der richtigen Stelle ist:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

Und Sie sind mit dem Schlüsselaustausch fertig. Theoretisch haben Sie jetzt ein funktionierendes, verschlüsseltes VPN durch Tinc. Wenn Sie dieses Tutorial genau befolgt haben, können Sie mit dem Testen Ihrer Einrichtung fortfahren. Wenn Sie jedoch auch die Gelegenheit genutzt haben, zusätzliche Knoten hinzuzufügen, ist jetzt ein guter Zeitpunkt, um alle benötigten Schlüssel auszutauschen.

Denken Sie daran, dass Sie, wenn Sie einen zentralen Knoten verwenden, wie ich es hier tue, nicht alle Schlüssel auf alle Server kopieren müssen. Wenn Sie jedoch möchten, dass Knoten direkt miteinander kommunizieren können, müssen sie Schlüssel austauschen. Der Prozess dafür ist derselbe wie oben beschrieben – führen Sie einfach so viele Iterationen durch, wie Sie benötigen, um die gewünschte Konnektivität zu erreichen.

Testen

Sie sollten jetzt zum Testen bereit sein. Dazu ist es eine gute Idee, Tinc im Debug-Modus zu starten, damit wir alle Fehler abfangen und weitere Informationen erhalten können, wenn etwas schief geht. Denken Sie daran, dass ein schlecht konfiguriertes VPN tatsächlich ein Sicherheitsrisiko darstellen kann, also stellen Sie sicher, dass alles richtig funktioniert, bevor Sie Ihr VPN für wichtige Dinge verwenden.

Um Tinc im Debug-Modus zu starten, führen Sie auf jedem Knoten, beginnend mit externalnyc, Folgendes aus:

 sudo tincd -n netname -D -d3

Wenn Sie Ihr VPN anders genannt haben, ändern Sie natürlich die Variable „netname“ in den entsprechenden Namen.

Nachdem der Daemon auf jedem Knoten gestartet wurde, sollte er eine Ausgabe zurückgeben, die Ihnen den Namen jedes Knotens gibt, wenn sie sich verbinden. Wenn dies nicht geschieht, haben Sie irgendwo einen Fehler gemacht.

Jetzt können wir das VPN testen. Pingen Sie in einem neuen Fenster auf ams1 internalnyc mit seiner IP-Adresse. Wir haben dies früher 10.0.0.2 zugewiesen, also geben Sie ein:

 ping 10.0.0.2

Hoffentlich funktioniert dein Ping. Sie sollten auch einige Debugging-Ausgaben in den anderen Fenstern sehen, die die gerade hergestellten Verbindungen beschreiben. Ams1 ist jetzt über Ihr neues VPN mit externalnyc verbunden und kann sich darüber mit internalnyc verbinden. Drücken Sie STRG-C und der Ping wird beendet.

Jetzt haben Sie eine sichere VPN-Verbindung, die Sie für jede andere Art der Netzwerkkommunikation verwenden können – Anwendungsverbindungen, Kopieren von Dateien, SSH oder alles andere, was Sie möchten.

Wenn Ihr Ping nicht funktioniert hat, Sie aber glauben, alles richtig gemacht zu haben, könnte es sein, dass eine Firewall im Weg war. Überprüfen Sie Ihre Firewall-Einstellungen und versuchen Sie es erneut.

Tinc beim Booten

Nur noch eine letzte Sache. Wenn Sie Ihr Tinc-VPN jetzt für Ihr gesamtes Netzwerk verwenden, möchten Sie es möglicherweise so einstellen, dass es beim Booten gestartet wird. Sie müssen dies auf jedem Knoten tun, indem Sie die Konfigurationsdatei nets.boot bearbeiten. Öffnen Sie die Datei mit:

 sudo vi /etc/tinc/nets.boot

Fügen Sie dieser Datei dann den Namen Ihres neuen VPN hinzu. Wenn Sie wie ich „netname“ gewählt haben, sieht dies wie folgt aus:

# This file contains all names of the networks to be started on system 	startup.
netname

Speichern und beenden, fertig. Tinc funktioniert jetzt und startet beim Booten. Gut gemacht.

Wenn Sie Tinc steuern müssen, können Sie jetzt den Befehl „service“ dazu ausführen. Führen Sie auf jedem Knoten einfach Folgendes aus:

 sudo service tinc start

Und spielen Sie herum. Die meisten grundlegenden Steuerungen können über diesen Befehl erreicht werden.

Schlussfolgerung

Sie sollten jetzt auf allen Ihren Computern eine sichere VPN-Verbindung haben, die über Tinc läuft. Dieses VPN kann als Basis verwendet werden, um weitere Netzwerkfunktionen aufzubauen.

Wenn Sie in Zukunft weitere Knoten hinzufügen oder Tinc mit anderen VPNs kombinieren möchten, können Sie dies mit Tinc tun. Der Prozess für jeden zusätzlichen Knoten ist der gleiche wie oben beschrieben, und Sie sollten leicht erkennen können, welche Variablen und Adressen geändert werden müssen. Denken Sie daran, dass Sie Schlüssel direkt zwischen ihnen austauschen müssen, wenn Sie möchten, dass sich Knoten direkt miteinander verbinden können. Auf diese Weise arbeitet Tinc als Mesh-VPN, was etwas sicherer ist als mein Ansatz. Andernfalls können Sie Ihr Netzwerk einfach so einrichten, wie ich es getan habe, und alles über einen zentralen Knoten laufen lassen.

In jedem Fall können Sie jetzt frei herumspielen. Viel Glück!

Ressourcen

(1) https://www.tinc-vpn.org/

(2) https://www.howtoforge.com/tutorial/ubuntu-lts-minimal-server/


Ubuntu
  1. Installieren von mod_pagespeed mit Apache auf Ubuntu/CentOS

  2. Dinge, die nach der Installation von Ubuntu 16.04 LTS zu tun sind

  3. Stellen Sie Modsecurity mit Nginx auf Ubuntu 20.04 LTS bereit

  4. Ms Office 2013 auf Ubuntu 12.04 Lts installieren?

  5. Ich kann die Sstp-Vpn-Pakete mit Ubuntu 16.04 Lts nicht finden?

So installieren Sie GitLab mit Docker unter Ubuntu 20.04 LTS

Installieren von Nginx mit PHP5 (und PHP-FPM) und MySQL-Unterstützung (LEMP) unter Ubuntu 12.04 LTS

Postfix-Überwachung mit Mailgraph auf Ubuntu 14.04 LTS

Installation von Ubuntu 18.04 LTS [Desktop und Server]

wc-Befehl:Erklärt mit 5 Beispielen in Ubuntu 20.04 LTS

So installieren Sie FortiClient VPN auf Ubuntu 20.04 LTS