So erstellen Sie ein VPN auf Ubuntu 20.04 Verwenden von Drahtguard

So erstellen Sie ein VPN auf Ubuntu 20.04 Verwenden von Drahtguard

WireGuard ist ein modernes und sehr einfaches Einrichten von VPN, das auf mehreren Betriebssystemen erhältlich ist. Die Anwendung ist im Ubuntu 20 verfügbar.04 offizielle Repositorys, daher ist es auch sehr einfach zu installieren. Im Gegensatz zu anderen Software wie OpenVPN, die auf der Verwendung von SSL-Zertifikaten basiert, basiert WireGuard auf der Verwendung von Schlüsselpaaren. In diesem Tutorial sehen wir, wie man in wenigen einfachen Schritten einen VPN -Server und einen Client -Peer auf der neuesten stabilen Version von Ubuntu konfiguriert.

In diesem Tutorial lernen Sie:

  • So installieren Sie Drahtguard auf Ubuntu 20.04 FOSSA FOSSA
  • So erstellen Sie öffentliches und privates Schlüsselpaar
  • So konfigurieren Sie den Server und einen Client -Peer
  • Wie man den gesamten eingehenden Verkehr zum VPN umleitet
Wireguard VPN auf Ubuntu 20.04

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Ubuntu 20.04 FOSSA FOSSA
Software Wireguard
Andere Wurzelprivilegien
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Installation

WireGuard ist offiziell im Repository von Ubuntu 20 im „Universum“ erhältlich.04, deshalb können wir es über installieren geeignet. Die verfügbare Version ist im Moment des Schreibens 1.0.20200319-1ubuntu1:

$ sudo apt installieren Sie Wireguard 

Das System wird uns auffordern, zu bestätigen, dass wir das Programm und seine Abhängigkeiten installieren möchten, und den Betrieb in Sekundenschnelle abschließen.

Schlüssel erzeugen

Wir müssen eine Öffentlichkeit und einen privaten Schlüssel für jede Maschine generieren, die wir in unserem VPN verwenden möchten. Der private Schlüssel sollte auf der Maschine geheim gehalten werden. Der öffentliche wird verwendet, um von den anderen Kollegen auf die Maschine zuzugreifen.

Um die Schlüssel zu generieren, können wir die verwenden wg Dienstprogramm. In der Drahtguard -Konfigurationsdatei müssen wir auf den privaten Schlüssel der Maschine verweisen, während der öffentliche für die anderen Kollegen verwendet wird. Beachten Sie, dass wir die Schlüssel direkt verweisen, sodass wir sie theoretisch nicht in Dateien speichern müssen. Wir werden es jedoch trotzdem tun, nur aus Bequemlichkeit.

Um den privaten Schlüssel für unseren Server zu generieren, müssen wir die verwenden Genkey Unterbefehl von wg. Der Befehl gibt den erstellten Taste an aus Stdout; Um den Schlüssel zu einer Datei zu schreiben, können wir die Leistung von Shell -Umleitungen verwenden:

$ wg genekey> server_private_key 

Der Befehl generiert den Schlüssel und speichert es auf die server_private_key Datei, aber die folgende Warnung erheben:

Warnung: Schreiben in die weltweit zugängliche Datei. Erwägen Sie die Ummask auf 077 und versuchen Sie es erneut. 

Dies liegt daran, dass mit dem Standardbenutzer Ummask (002) Die Dateien werden im Modus erstellt 664, So sind weltlesbar, was nicht empfohlen wird. Um dieses Problem zu lösen, können wir entweder die in der aktuelle Shell -Sitzung verwendete Ummask ändern, bevor wir die Dateien erstellen:

$ ummask 077 

Oder ändern Sie die Dateienberechtigungen auf 600 Nach der Schöpfung. Hier werden wir uns für die letztere Lösung entscheiden.

Sobald unser privater Schlüssel fertig ist, können wir die generieren öffentlich Eine, die darauf basiert. Um die Aufgabe zu erfüllen, verwenden wir die Pubkey Unterbefehl von wg. Genauso wie zuvor verwenden wir Shell -Umleitungen: Erstens, um den Inhalt der zu bestehen server_private_key Datei an der Stdin des Befehls und dann und um den generierten Schlüssel zum Umbau zu server_public_key Datei:

$ wg pubrkey server_public_key 

Um etwas zu tippen, können wir beide Schlüssel mit nur einem Befehl erzeugen | (Rohr-) Bediener und der Tee Befehl:

$ WG Genkey | tee server_private_key | WG Pubkey> server_public_key 

Die Ausgabe des Befehls auf der linken Seite des Rohroperators (|) wird an die Standardeingabe des Programms auf der rechten Seite übergeben. Der Tee Befehl, ermöglichen wir uns stattdessen, die Ausgabe eines Befehls sowohl in eine Datei als auch in die Standardausgabe umzuleiten (mehr über Shell -Umleitungen hier).

Sobald unsere Schlüssel fertig sind, können wir die Serverkonfigurationsdatei erstellen.

Serverkonfigurationsdatei

Um unsere Drahtguard -Installation zu konfigurieren, können wir eine Konfigurationsdatei erstellen, die aufgerufen wurde wg0.Conf mit dem folgenden Inhalt:

[Schnittstelle] privateKey = Adresse = 10.0.0.1/24 Hörport = 51820 

Beachten Sie, dass der Name der Datei willkürlich ist, aber auf dem Namen basieren sollte, den wir für unsere Schnittstelle verwenden werden, wg0 in diesem Fall. Dieser Name wird beim Starten des Dienstes verwiesen, wie wir unten sehen werden.

In unserem Beispiel. Die [Schnittstelle] Der Abschnitt der Konfigurationsdatei enthält die folgenden Felder:

  • Privat Schlüssel
  • Adresse
  • Hören

Der Privat Schlüssel Der Feldwert ist nichts anderes als der private Schlüssel, den wir zuvor generiert haben.

Im Adresse Feld Wir haben die Adresse angegeben, die der Schnittstelle im VPN zusammen mit der Subnetzmaske mit der Subnetzmaske zugewiesen wurde CIDR Notation. In diesem Fall haben wir verwendet 10.0.0.1/24, Unsere WireGuard "Server" -Ade innerhalb des VPN ist also 10.0.0.1, Welches ist in der verfügbaren Adressen, die von Adressen stammen 10.0.0.1 Zu 10.0.0.254.

Schließlich in der Hören Feld haben wir angegeben, was Port WireGuard für eingehenden Verkehr anhören wird. Die Regel, die den Datenverkehr zuzulassen, muss auch unserer Firewall hinzugefügt werden. Wir werden dies im nächsten Abschnitt tun.

Wir können jetzt die Berechtigungen der Dateien ändern und sie in die verschieben /etc/Wireguard Verzeichnis:

$ chmod 600 server_public_key server_private_key wg0.conf $ sudo mv server_private_key server_public_key wg0.conf /etc /Wireguard 

Wir können jetzt mit dem beginnen WG-Quick Service, in dem der Name der Drahtguard -Schnittstelle nachher angibt @ im Einheitsnamen. Was ist diese Notation?? Es ist eine Funktion von Systemd: damit können wir mehrere Einheitendateien auf der Basis einer „Vorlage“ generieren und den Wert übergeben, der in der Vorlage nach dem ersetzt wird @ Symbol im Namen der Einheit. Dies ist der Inhalt der [email protected] Einheit:

[Einheit] Beschreibung = Wireguard über WG-Quick (8) für %i AFTER = NETWORK-ONLINE.Ziel NSSS-Lookup.Target wants = network-online.Ziel NSSS-Lookup.Zieldokumentation = MAN: WG-Quick (8) Dokumentation = MAN: WG (8) Dokumentation = https: // www.Wireguard.com/documentation = https: // www.Wireguard.com/QuickStart/documentation = https: // git.ZX2C4.com/Wireguard-Tools/über/Src/Man/WG-Quick.8 Dokumentation = https: // git.ZX2C4.com/Wireguard-Tools/über/src/mAN/wg.8 [Service] type = OneShot remaFterExit = yes execstart =/usr/bin/wg-quick %i execStop =/usr/bin/wg-quick %ICOMEL ICEMOLE = WG_ENDPOPT_RESOLUTION_RETRIES = Infinity [Install] Wantedby = Multi-Benutzer.Ziel 

Der Wert, den wir nach dem angeben werden @ im Einheitsnamen beim Starten oder Anhalten ersetzen Sie es %ich im ExecStart Und ExecStop Linien. In diesem Fall werden wir verwenden wg0:

$ sudo systemctl aktivieren-jetzt wg-quick@wg0 

Mit dem obigen Befehl haben wir den Dienst gestartet und machen auch so, dass automatisch beim Boot gestartet wird. Um zu überprüfen, ob unsere Konfiguration angewendet wurde, können wir die ausführen wg Befehl. Die erzeugte Ausgabe sollte Informationen über die anzeigen wg0 Schnittstelle:

$ sudo WG Schnittstelle: WG0 PUBLIC KEY: NNX3ZPCV9D2DTGHDSOYGBNR64ZG5JTJ4Z4T2SE759V4 = Privatschlüssel: (Hidden) Höranschluss: 51820 

Machen wir nun fort.

Firewall- und Netzwerk -Setup

In diesem Tutorial werde ich die Verwendung von annehmen UFW. Wie bereits erwähnt, müssen wir eine Regel hinzufügen, um eingehenden Verkehr über den in der Konfigurationsdatei angegebenen Port zuzulassen, 51820. Wir tun es, indem wir einen sehr einfachen Befehl ausführen:

$ sudo ufw erlauben 51820/UDP 

Wir müssen auch die Paketweiterleitung auf unserem System zulassen. Um die Aufgabe zu erfüllen, entfernen wir den Kommentar aus der Zeile 28 des /etc/sysctl.Conf Datei, damit es so aussieht:

# Überzeugen Sie die nächste Zeile, um die Paketweiterleitung für IPv4 -Netz zu aktivieren.IPv4.ip_forward = 1 

Um die Änderungen effektiv zu gestalten, ohne das System neu zu starten, müssen wir den folgenden Befehl ausführen:

$ sudo sysctl -p 

Im nächsten Schritt konfigurieren wir den Client.

Client -Schlüsselgeneration

Lassen Sie uns nun das System, das wir als Client verwenden möchten. Wir müssen Drahtguard darauf installieren. Sobald wir fertig sind, können wir genauso wie auf dem Server ein Schlüsselpaar generieren:

$ WG Genkey | tee client_private_key | WG Pubkey> client_public_key 

Genau wie wir die serverseitig erstellen, erstellen wir die wg0.Conf Konfigurationsdatei. Diesmal mit diesem Inhalt:

[Schnittstelle] privateKey = Adresse = 10.0.0.2/24 [Peer] publicKey = Endpoint =: 51820 erlaubt = 0.0.0.0/0 

Wir haben bereits die Bedeutung der in der enthaltenen Felder gesehen Schnittstelle Abschnitt, wenn wir die Serverkonfiguration generiert haben. Hier haben wir die Werte gerade an unseren Kunden angepasst (es wird die haben 10.0.0.2 Adresse im VPN).

In dieser Konfiguration haben wir einen neuen Abschnitt verwendet, [Peer]. Darin können wir die Informationen relativ zu einem Peer angeben, in diesem Fall die, die wir als „Server“ verwenden, verwenden. Die Felder, die wir verwendet haben, sind:

  • Öffentlicher Schlüssel
  • Endpunkt
  • Erlaubt

Im Öffentlicher Schlüssel Feld geben wir die an öffentlich Schlüssel des Peer, in diesem Fall der öffentliche Schlüssel, den wir auf dem Server generiert haben.

Der Endpunkt ist die öffentliche IP -Adresse oder das Hostname des Peer, gefolgt von einem Dickdarm und der Hafennummer, auf die der Peer hört (in unserem Fall 51820).

Schließlich der Wert, der an die überging Erlaubt Feld ist eine von Kommas getrennte Liste von IP-Adressen und Subnetzmaske mit CIDR-Notation. Nur der an den Peer gerichtete Verkehr, der aus den angegebenen Adressen stammt. In diesem Fall haben wir verwendet 0.0.0.0/0 Als Wert: Es funktioniert als "Catch-All" -Werte, sodass der gesamte Datenverkehr an den VPN-Peer (den Server) gesendet wird.

Genau wie wir serverseitig, setzen wir die entsprechenden Berechtigungen und verschieben die Schlüssel und die Konfigurationsdatei in die /etc/Wireguard Verzeichnis:

$ chmod 600 client_public_key client_private_key wg0.conf $ sudo mv client_public_key client_private_key wg0.conf /etc /Wireguard 

Mit der Konfigurationsdatei können wir den Dienst starten:

$ sudo systemctl aktivieren-jetzt wg-quick@wg0 

Endlich, das [Peer] Abschnitt zu unserem Client muss zu der zuvor erstellten Konfigurationsdatei hinzugefügt werden Server. Wir anhängen Der folgende Inhalt dazu:

[Peer] publicKey = erlaubte und 10.0.0.2/32 

Zu diesem Zeitpunkt starten wir den Service neu:

$ sudo systemCTL Neustart WG-Quick@WG0 

Die Informationen über den zugehörigen Peer sollten nun in der Ausgabe der Ausgabe gemeldet werden wg Befehl:

$ sudo wg interface: wg0 public key: nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4= private key: (hidden) listening port: 51820 peer: t5pKKg5/9fJKiU0lrNTahv6gvABcmCjQq5gF3BxwiDQ= allowed ips: 10.0.0.2/32 

Zu diesem Zeitpunkt sollten wir aus dem "Client" -System in der Lage sein, den Server auf dem zu pingen 10.0.0.1 Adresse:

$ ping -c 3 10.0.0.1 Ping 10.0.0.1 (10.0.0.1) 56 (84) Daten Bytes. 64 Bytes von 10.0.0.1: ICMP_SEQ = 1 TTL = 64 Time = 2.82 ms 64 Bytes von 10.0.0.1: ICMP_SEQ = 2 TTL = 64 Time = 38.0 ms 64 Bytes von 10.0.0.1: ICMP_SEQ = 3 TTL = 64 Time = 3.02 ms --- 10.0.0.1 Ping-Statistik --- 3 Pakete übertragen, 3 empfangen, 0% Paketverlust, Zeit 2003ms RTT min/avg/max/mdev = 2.819/14.613/37.999/16.536 ms 

Schlussfolgerungen

In diesem Tutorial haben wir gesehen.04 FOSSA FOSSA. Die Software ist wirklich einfach zu installieren und zu konfigurieren, insbesondere im Vergleich zu anderen Lösungen, wie zum Beispiel OpenVPN.

Wir haben gesehen, wie die öffentlichen und privaten Schlüssel für unser Setup generiert werden und wie Sie sowohl den Server als auch einen Client konfigurieren, damit der gesamte Datenverkehr in das VPN weitergeleitet wird. Nach der angegebenen Anweisung haben Sie ein funktionierendes Setup. Weitere Informationen finden Sie auf der Projektseite.

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • So richten Sie einen OpenVPN -Server auf Ubuntu 20 ein.04
  • Basic Ubuntu 22.04 OpenVPN -Client/Server -Verbindungsanschluss -Setup
  • Ubuntu 20.04 Tricks und Dinge, die Sie vielleicht nicht wissen
  • Ubuntu 20.04 Leitfaden
  • Dinge zu installieren auf Ubuntu 22.04
  • FTP -Clientliste und -installation auf Ubuntu 20.04 Linux…
  • Ubuntu 20.04: WordPress mit Nginx -Installation
  • Die 8 besten Ubuntu -Desktop -Umgebungen (20.04 fokale Fossa…