Installieren von Tinc und Einrichten eines Basis-VPN unter Ubuntu 14.04

Einführung

In diesem Tutorial erfahren Sie, wie Sie mit Tinc, einem Open-Source-VPN-Daemon (Virtual Private Network), ein sicheres VPN erstellen, über das Ihre Server wie über ein lokales Netzwerk kommunizieren können. Wir werden auch zeigen, wie Sie mit Tinc einen sicheren Tunnel in ein privates Netzwerk einrichten. Wir werden Ubuntu 14.04-Server verwenden, aber die Konfigurationen können für die Verwendung mit jedem anderen Betriebssystem angepasst werden.

Zu den nützlichen Funktionen von Tinc gehören Verschlüsselung, optionale Komprimierung, automatisches Mesh-Routing (VPN-Verkehr wird, wenn möglich, direkt zwischen den kommunizierenden Servern geleitet) und einfache Erweiterung. Diese Funktionen unterscheiden Tinc von anderen VPN-Lösungen wie OpenVPN und machen es zu einer guten Lösung für die Erstellung eines VPN aus vielen kleinen Netzwerken, die geografisch verteilt sind. Tinc wird auf vielen Betriebssystemen unterstützt, einschließlich Linux, Windows und Mac OS X.

[.note] #Note: Wenn Sie schnell und einfach ein Tinc-Mesh-VPN einrichten möchten, lesen Sie dieses Tutorial:How To Use Ansible and Tinc VPN to Secure Your Server Infrastructure.
#

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie Root-Zugriff auf mindestens drei Ubuntu 14.04-Servern. Anweisungen zum Einrichten des Root-Zugriffs finden Sie hier (Schritte 3 und 4):Initial Server Setup with Ubuntu 14.04.

Wenn Sie dies in Ihrer eigenen Umgebung verwenden möchten, müssen Sie planen, wie Ihre Server auf einander zugreifen müssen, und die in diesem Lernprogramm vorgestellten Beispiele an Ihre eigenen Anforderungen anpassen. Wenn Sie dies an Ihr eigenes Setup anpassen, müssen Sie die hervorgehobenen Werte in den Beispielen durch Ihre eigenen Werte ersetzen.

Wenn Sie dieses Lernprogramm genau befolgen möchten, erstellen Sie zwei VPS im selben Rechenzentrum mit privatem Netzwerk und einen weiteren VPS in einem separaten Rechenzentrum. Wir werden zwei VPSs im NYC2-Datencenter und eine im AMS2-Datencenter mit den folgenden Namen erstellen:

  • externalnyc: Alle VPN-Knoten stellen eine Verbindung zu diesem Server her, und die Verbindung muss für eine ordnungsgemäße VPN-Funktionalität aufrechterhalten werden. Zusätzliche Server können auf ähnliche Weise wie dieser konfiguriert werden, um bei Bedarf Redundanz bereitzustellen.

  • internalnyc: Stellt über die Netzwerkschnittstelle vonprivateeine Verbindung zum VPN-Knoten vonexternalnycher

  • ams1: Stellt über das öffentliche Internet eine Verbindung zumexternalnyc VPN-Knoten her

Unser Ziel

Hier ist ein Diagramm des VPNs, das eingerichtet werden soll (beschrieben in Voraussetzungen):

Tinc VPN Setup

Das Grün steht für unser VPN, das Grau für das öffentliche Internet und das Orange für das private Netzwerk. Alle drei Server können über das VPN kommunizieren, obwohl ams1 nicht auf das private Netzwerk zugreifen kann.

Beginnen wir mit der Installation von Tinc!

Installieren Sie Tinc

Installieren Sie auf jedem VPS, dem Sie das private Netzwerk beitreten möchten, Tinc. Beginnen wir mit der Aktualisierung von apt:

sudo apt-get update

Dann installiere Tinc über apt:

sudo apt-get install tinc

Nachdem Tinc installiert ist, schauen wir uns die Tinc-Konfiguration an.

Tinc-Konfiguration

Tinc verwendet einen "Netznamen", um ein Tinc-VPN von einem anderen zu unterscheiden (bei mehreren VPNs). Es wird empfohlen, einen Netznamen zu verwenden, auch wenn Sie nur die Konfiguration eines VPNs planen. Der Einfachheit halber werden wir unser VPN "netname" nennen.

Jeder Server, der Teil unseres VPN sein wird, benötigt die folgenden drei Konfigurationskomponenten:

  • Konfigurationsdateien: z. B. tinc.conf, tinc-up und tinc-down

  • Public/private key pairs: For encryption and node authentication

  • Host-Konfigurationsdateien: Diese enthalten öffentliche Schlüssel und andere VPN-Konfigurationen

Beginnen wir mit der Konfiguration unseresexternalnyc-Knotens.

Konfigurieren Sie externalnyc

Erstellen Sie unterexternalnyc die Konfigurationsverzeichnisstruktur für unser VPN mit dem Namen "netname":

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

Öffnen Sie nun die tinc.conf zum Bearbeiten:

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

Fügen Sie nun die folgenden Zeilen hinzu:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Dadurch wird einfach ein Knoten namensexternalnyc mit einer Netzwerkschnittstelle konfiguriert, die IPv4 mit dem Namen "tun0" verwendet. Speichern und Beenden.

Als Nächstes erstellen wir eine Hostkonfigurationsdatei fürexternalnyc:

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

Fügen Sie die folgenden Zeilen hinzu (ersetzen Sie die öffentliche IP-Adresse Ihres VPS hier):

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Letztendlich wird diese Datei auf anderen Servern verwendet, um mit diesem Server zu kommunizieren. Die Adresse gibt an, wie andere Knoten eine Verbindung zu diesem Server herstellen, und das Subnetz gibt an, welchem ​​Subnetz dieser Dämon dient. Speichern und Beenden.

Generieren Sie nun das öffentliche / private Schlüsselpaar für diesen Host mit dem folgenden Befehl:

sudo tincd -n netname -K4096

Dadurch wird der private Schlüssel (/etc/tinc/netname/rsa_key.priv) erstellt und der öffentliche Schlüssel an die Host-Konfigurationsdatei vonexternalnycangehängt, die wir kürzlich erstellt haben (/ etc / tinc / netname / hosts /) externalnyc).

Jetzt müssen wirtinc-up erstellen, das Skript, das ausgeführt wird, wenn unsernetname VPN gestartet wird. Öffnen Sie die Datei jetzt zum Bearbeiten:

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

Fügen Sie die folgenden Zeilen hinzu:

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

Wenn wir unser VPN starten, wird dieses Skript ausgeführt, um die Netzwerkschnittstelle zu erstellen, die unser VPN verwendet. Auf dem VPN hat dieser Server eine IP-Adresse von 10.0.0.1.

Erstellen wir auch ein Skript zum Entfernen der Netzwerkschnittstelle, wenn unser VPN gestoppt ist:

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

Fügen Sie die folgenden Zeilen hinzu:

#!/bin/sh
ifconfig $INTERFACE down

Speichern und Beenden.

Zuletzt machen Sie Tinc-Netzwerkskripte ausführbar:

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

Speichern und Beenden.

Fahren wir mit unseren anderen Knoten fort.

Konfigurieren Sie internalnyc und ams1

Diese Schritte sind sowohl fürinternalnyc als auch fürams1 erforderlich, wobei geringfügige Abweichungen festgestellt werden.

Erstellen Sie unterinternalnyc undams1 die Konfigurationsverzeichnisstruktur für unser VPN mit dem Namen "netname" und bearbeiten Sie die Tinc-Konfigurationsdatei:

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

Fügen Sie die folgenden Zeilen hinzu (ersetzen Sie den Namen durch den Knotennamen):

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

Diese Knoten sind so konfiguriert, dass versucht wird, eine Verbindung zu „externalnyc“ (dem zuvor erstellten Knoten) herzustellen. Speichern und Beenden.

Als nächstes erstellen wir die Hosts-Konfigurationsdatei:

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

Fügen Sie fürinternalnyc diese Zeile hinzu:

Subnet = 10.0.0.2/32

Fügen Sie fürams1 diese Zeile hinzu:

Subnet = 10.0.0.3/32

Beachten Sie, dass sich die Nummern unterscheiden. Speichern und Beenden.

Generieren Sie als Nächstes die Schlüsselpaare:

sudo tincd -n netname -K4096

Erstellen Sie das Startskript für die Netzwerkschnittstelle:

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

Fügen Sie fürinternalnyc diese Zeile hinzu:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

Fügen Sie fürams1 diese Zeile hinzu:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

Mit diesen IP-Adressen wird auf diese Knoten im VPN zugegriffen. Speichern und Beenden.

Erstellen Sie nun das Netzwerkschnittstellen-Stoppskript:

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

Und füge diese Zeile hinzu:

ifconfig $INTERFACE down

Speichern und Beenden.

Zuletzt machen Sie Tinc-Netzwerkskripte ausführbar:

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

Speichern und Beenden.

Jetzt müssen wir die Konfigurationsdateien des Hosts auf jeden Knoten verteilen.

Verteilen Sie die Schlüssel

Wenn Sie zufällig ein Konfigurationsmanagementsystem verwenden, finden Sie hier eine gute Anwendung. Zumindest muss jeder Knoten, der direkt mit einem anderen Knoten kommunizieren möchte, öffentliche Schlüssel ausgetauscht haben, die sich in den Konfigurationsdateien des Hosts befinden. In unserem Fall müssen beispielsweise nurexternalnyc öffentliche Schlüssel mit den anderen Knoten austauschen. Die Verwaltung ist einfacher, wenn Sie einfach jeden öffentlichen Schlüssel auf alle Mitglieder des Knotens kopieren. Beachten Sie, dass Sie den Wert "Adresse" in der Host-Konfigurationsdatei vonexternalnyc in seine private IP-Adresse ändern möchten, wenn diese ininternalnyc kopiert wird, damit die Verbindung über das private Netzwerk hergestellt wird.

Da unser VPN als "Netzname" bezeichnet wird, befindet sich hier der Speicherort der Host-Konfigurationsdateien:/etc/tinc/netname/hosts

Schlüssel zwischen externalnyc und internalnyc austauschen

Kopieren Sie unterinternalnyc die Konfigurationsdatei des Hosts nachexternalnyc:

scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmp

Kopieren Sie dann aufexternalnyc die Datei voninternalnyc an den entsprechenden Speicherort:

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

Kopieren Sie dann aufexternalnyc erneut die Host-Konfigurationsdatei nachinternalnyc:

scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmp

Kopieren Sie aufinternalnyc die Datei vonexternalnyc an den entsprechenden Speicherort:

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

Bearbeiten Sie unterinternalnyc die Host-Konfigurationsdatei vonexternalnyc, sodass das Feld "Adresse" auf die private IP-Adresse vonexternalnyc gesetzt ist (damit internalnyc über das private Netzwerk eine Verbindung zum VPN herstellt). Bearbeiten Sie die Host-Konfigurationsdatei vonexternalnyc:

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

Ändern Sie den Wert "Adresse" in die private IP-Adresse vonexternalnyc:

Address = externalnyc_private_IP

Speichern und Beenden. Kommen wir nun zu unserem verbleibenden Knoten, ams1.

Schlüssel zwischen externalnyc und ams1 austauschen

Kopieren Sie unterams1 die Konfigurationsdatei des Hosts nachexternalnyc:

scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp

Kopieren Sie dann aufexternalnyc die Datei vonams1 an den entsprechenden Speicherort:

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

Kopieren Sie dann aufexternalnyc erneut die Host-Konfigurationsdatei nachams1:

scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmp

Kopieren Sie aufams1 die Datei vonexternalnyc an den entsprechenden Speicherort:

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

Schlüssel zwischen zusätzlichen Knoten austauschen

Wenn Sie ein größeres VPN erstellen, ist jetzt ein guter Zeitpunkt, um die Schlüssel zwischen diesen anderen Knoten auszutauschen. Denken Sie daran, dass zwei Knoten, die direkt miteinander kommunizieren sollen (ohne einen Weiterleitungsserver dazwischen), ihre Schlüssel- / Hostkonfigurationsdateien ausgetauscht haben müssen und auf die realen Netzwerkschnittstellen des anderen zugreifen können müssen. Es ist auch in Ordnung, einfach jede Hostkonfiguration auf jeden Knoten im VPN zu kopieren.

Testen Sie unsere Konfiguration

Starten Sie aufeach Knoten, beginnend mitexternalnyc, Tinc wie folgt im Debug-Modus (Netzname ist der Name unseres VPN):

sudo tincd -n netname -D -d3

Nachdem Sie den Daemon auf jedem Knoten gestartet haben, sollten Sie die Ausgabe mit den Namen der einzelnen Knoten sehen, wenn diese eine Verbindung zu externalnyc herstellen. Testen wir nun die Verbindung über das VPN.

Pingen Sie inams1 in einem separaten Fenster die VPN-IP-Adresse von internalnyc (die wir zuvor 10.0.0.2 zugewiesen haben) an:

ping 10.0.0.2

Der Ping sollte einwandfrei funktionieren, und in den anderen Fenstern sollte eine Debug-Ausgabe über die Verbindung im VPN angezeigt werden. Dies zeigt an, dass ams1 über das VPN über externalnyc mit internalnyc kommunizieren kann. Drücken Sie STRG-C, um das Pingen zu beenden.

Sie können die VPN-Schnittstellen auch für andere Netzwerkkommunikationen wie Anwendungsverbindungen, Kopieren von Dateien und SSH verwenden.

Beenden Sie in jedem Tinc-Daemon-Debug-Fenster den Daemon, indem Sie STRG- drücken.

Note: Wenn die Verbindungen nicht funktionieren, stellen Sie sicher, dass Ihre Firewall die Verbindungen nicht blockiert oder weiterleitet.

Konfigurieren Sie Tinc für den Start beim Booten

Bevor das Tinc-Init-Skript ordnungsgemäß funktioniert, müssen wir den Namen unseres VPN in die Konfigurationsdatei vonnets.booteinfügen.

Bearbeiten Sie aufeach node nets.boot:

sudo vi /etc/tinc/nets.boot

Fügen Sie den Namen Ihres VPNs in diese Datei ein. Unser Name ist "Netzname":

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

Speichern und Beenden. Tinc ist jetzt so konfiguriert, dass es beim Booten startet, und kann über den Befehlservice gesteuert werden. Wenn Sie es jetzt starten möchten, führen Sie auf jedem Ihrer Knoten den folgenden Befehl aus:

sudo service tinc start

Glückwunsch! Ihr Tinc VPN ist eingerichtet.

Fazit

Nachdem Sie dieses Tutorial durchgearbeitet haben, sollten Sie eine gute Grundlage haben, um Ihr VPN so aufzubauen, dass es Ihren Anforderungen entspricht. Tinc ist sehr flexibel und jeder Knoten kann so konfiguriert werden, dass er eine Verbindung zu einem anderen Knoten herstellt (auf den er über das Netzwerk zugreifen kann), sodass er als Mesh-VPN fungiert und nicht auf einen einzelnen Knoten angewiesen ist.

Viel Glück!