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

So erstellen Sie ein VPN unter Ubuntu 20.04 mit Wireguard

Wireguard ist ein modernes und sehr einfach einzurichtendes VPN, das auf mehreren Betriebssystemen verfügbar ist. Die Anwendung ist in den offiziellen Repositories von Ubuntu 20.04 verfügbar, sodass sie auch sehr einfach zu installieren ist. Im Gegensatz zu anderer Software wie OpenVPN, die auf der Verwendung von SSL-Zertifikaten basiert, basiert Wireguard auf der Verwendung von Schlüsselpaaren. In diesem Tutorial werden wir sehen, 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 Wireguard auf Ubuntu 20.04 Focal Fossa
  • So erstellen Sie ein Paar aus öffentlichem und privatem Schlüssel
  • So konfigurieren Sie den Server und einen Client-Peer
  • So leiten Sie den gesamten eingehenden Datenverkehr zum VPN um

Wireguard VPN auf Ubuntu 20.04

Softwareanforderungen und verwendete Konventionen

Softwareanforderungen und Linux-Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder verwendete Softwareversion
System Ubuntu 20.04 Focal Fossa
Software Drahtschutz
Andere Root-Rechte
Konventionen # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl
$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden

Installation

Wireguard ist offiziell im „Universum“-Repository von Ubuntu 20.04 verfügbar, daher können wir es über apt installieren . Die verfügbare Version ist zum Zeitpunkt des Schreibens 1.0.20200319-1ubuntu1 :

$ sudo apt install wireguard

Das System fordert uns auf, zu bestätigen, dass wir das Programm und seine Abhängigkeiten installieren möchten, und schließt den Vorgang innerhalb von Sekunden ab.

Schlüssel generieren

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

Um die Schlüssel zu generieren, können wir den wg verwenden Nützlichkeit. In der Wireguard-Konfigurationsdatei müssen wir auf den privaten Schlüssel der Maschine verweisen, während der öffentliche Schlüssel auf den anderen Peers verwendet wird. Beachten Sie, dass wir die Schlüssel direkt referenzieren, sodass wir sie theoretisch nicht in Dateien speichern müssen. Wir werden es jedoch trotzdem tun, nur der Einfachheit halber.

Um den privaten Schlüssel für unseren Server zu generieren, müssen wir den genkey verwenden Unterbefehl von wg . Der Befehl gibt den erstellten Schlüssel an stdout aus; Um den Schlüssel in eine Datei zu schreiben, können wir die Leistungsfähigkeit von Shell-Umleitungen nutzen:

$ wg genkey > server_private_key

Der Befehl generiert den Schlüssel und speichert ihn im server_private_key Datei, wird aber die folgende Warnung auslösen:

Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.

Dies liegt daran, dass mit dem Standardbenutzer umask (002 ) werden die Dateien im Modus 664 erstellt , sind also weltweit lesbar, was nicht zu empfehlen ist. Um dieses Problem zu lösen, können wir entweder die in der aktuellen Shell-Sitzung verwendete umask ändern, bevor wir die Dateien erstellen:

$ umask 077

Oder ändern Sie die Dateiberechtigungen auf 600 nach der Erstellung. Hier entscheiden wir uns für die letztere Lösung.

Sobald unser privater Schlüssel fertig ist, können wir den öffentlichen generieren eine, die darauf basiert. Um die Aufgabe zu erfüllen, verwenden wir den pubkey Unterbefehl von wg . Genau wie zuvor verwenden wir Shell-Umleitungen:zuerst, um den Inhalt des server_private_key zu übergeben Datei in die stdin des Befehls und dann und um den generierten Schlüssel an den server_public_key umzuleiten Datei:

$ wg pubkey < server_private_key > server_public_key

Um etwas Tipparbeit zu sparen, können wir beide Schlüssel mit nur einem Befehl generieren, was die Verwendung der Shell | beinhaltet (Pipe)-Operator und das tee Befehl:

$ wg genkey | tee server_private_key | wg pubkey > server_public_key

Die Ausgabe des Befehls auf der linken Seite des Pipe-Operators (| ) wird auf der rechten Seite an die Standardeingabe des Programms übergeben. Das tee Erlauben Sie 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 Wireguard-Installation zu konfigurieren, können wir eine Konfigurationsdatei namens wg0.conf erstellen mit folgendem Inhalt:

[Interface]
PrivateKey = <private key of the server (the content of the server_private_key file)>
Address = 10.0.0.1/24
ListenPort = 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. Auf diesen Namen wird beim Starten des Dienstes verwiesen, wie wir weiter unten sehen werden.

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

  • Privater Schlüssel
  • Adresse
  • ListenPort

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

In der Adresse Feld haben wir die Adresse angegeben, die der Schnittstelle im VPN zusammen mit der Subnetzmaske mithilfe des CIDR zugewiesen werden soll Notation. In diesem Fall haben wir 10.0.0.1/24 verwendet , also lautet unsere Wireguard-„Server“-Adresse im VPN 10.0.0.1 , die sich im verfügbaren Adressbereich befindet, der von 10.0.0.1 geht bis 10.0.0.254 .

Schließlich im ListenPort Feld haben wir angegeben, auf welchem ​​Port Wireguard auf eingehenden Datenverkehr horcht. Außerdem muss unserer Firewall eine Regel hinzugefügt werden, um diesen Datenverkehr zuzulassen. Wir werden dies im nächsten Abschnitt tun.

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

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

Nun können wir wg-quick starten service, der den Namen der Wireguard-Schnittstelle nach @ angibt im Einheitennamen. Was ist diese Notation? Es ist eine Funktion von systemd:Damit können wir mehrere Unit-Dateien auf der Basis einer „Vorlage“ erstellen, indem wir den Wert, der in der Vorlage ersetzt wird, nach dem @ übergeben Symbol im Namen der Einheit. Dies ist der Inhalt des [email protected] Einheit:

[Unit]
Description=WireGuard via wg-quick(8) for %I
After=network-online.target nss-lookup.target
Wants=network-online.target nss-lookup.target
Documentation=man:wg-quick(8)
Documentation=man:wg(8)
Documentation=https://www.wireguard.com/
Documentation=https://www.wireguard.com/quickstart/
Documentation=https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
Documentation=https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/wg-quick up %i
ExecStop=/usr/bin/wg-quick down %i
Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity

[Install]
WantedBy=multi-user.target

Den Wert geben wir nach dem @ an im Unit-Namen beim Starten oder Stoppen ersetzt %i im ExecStart und ExecStop Linien. In diesem Fall verwenden wir wg0 :

$ sudo systemctl enable --now wg-quick@wg0

Mit obigem Befehl haben wir den Dienst gestartet und auch make damit beim Booten automatisch gestartet. Um zu überprüfen, ob unsere Konfiguration angewendet wurde, können wir wg ausführen Befehl. Die erzeugte Ausgabe sollte Informationen über wg0 anzeigen Schnittstelle:

$ sudo wg
interface: wg0
  public key: nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4=
  private key: (hidden)
  listening port: 51820

Lassen Sie uns nun fortfahren und unsere Firewall und Paketweiterleitung konfigurieren.

Firewall- und Netzwerkeinrichtung

In diesem Tutorial gehe ich von der Verwendung von ufw aus . Wie wir bereits gesagt haben, müssen wir eine Regel hinzufügen, um eingehenden Datenverkehr über den Port zuzulassen, den wir in der Konfigurationsdatei angegeben haben, 51820 . Wir tun dies, indem wir einen sehr einfachen Befehl ausführen:

$ sudo ufw allow 51820/udp

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

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Um die Änderungen wirksam zu machen, 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üsselgenerierung

Kommen wir nun zu dem System, das wir als Client verwenden möchten. Wir müssen Wireguard darauf installieren; Sobald dies erledigt ist, können wir ein Schlüsselpaar generieren, genau wie wir es auf dem Server getan haben:

$ wg genkey | tee client_private_key | wg pubkey > client_public_key

Genau wie wir es serverseitig gemacht haben, erstellen wir die wg0.conf Konfigurationsdatei. Diesmal mit diesem Inhalt:

[Interface]
PrivateKey = <client_private_key>
Address = 10.0.0.2/24

[Peer]
PublicKey = <server_public_key>
EndPoint  = <server_public_ip>:51820
AllowedIPs = 0.0.0.0/0

Die Bedeutung der im Interface enthaltenen Felder haben wir bereits gesehen Abschnitt, als wir die Serverkonfiguration erstellt haben. Hier haben wir nur die Werte an unseren Client angepasst (er wird den 10.0.0.2 haben Adresse im VPN).

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

  • PublicKey
  • Endpunkt
  • ZugelasseneIPs

Im PublicKey Im Feld öffentlich geben wir an Schlüssel des Peers, also in diesem Fall der öffentliche Schlüssel, den wir auf dem Server generiert haben.

Der EndPoint ist die öffentliche IP-Adresse oder der Hostname des Peers, gefolgt von einem Doppelpunkt und der Portnummer, auf der der Peer lauscht (in unserem Fall 51820 ).

Schließlich wird der Wert an die AllowedIPs übergeben ist eine durch Kommas getrennte Liste von IP-Adressen und Subnetzmasken mit CIDR-Notation. Es wird nur an den Peer gerichteter Datenverkehr zugelassen, der von den angegebenen Adressen stammt. In diesem Fall haben wir 0.0.0.0/0 verwendet als Wert:Er fungiert als „Catch-All“-Wert, sodass der gesamte Datenverkehr an den VPN-Peer (den Server) gesendet wird.

Genau wie wir es serverseitig getan haben, setzen wir die entsprechenden Berechtigungen und verschieben die Schlüssel und die Konfigurationsdatei nach /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 vorhandenen Konfigurationsdatei können wir den Dienst starten:

$ sudo systemctl enable --now wg-quick@wg0

Schließlich der [Peer] Abschnitt relativ zu unserem Client, muss der Konfigurationsdatei hinzugefügt werden, die wir zuvor auf dem Server erstellt haben . Wir hängen an folgenden Inhalt dazu:

[Peer]
PublicKey = <public key of the client>
AllowedIPs = 10.0.0.2/32

An dieser Stelle starten wir den Dienst neu:

$ sudo systemctl restart wg-quick@wg0

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

$ sudo wg
interface: wg0
  public key: nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4=
  private key: (hidden)
  listening port: 51820

peer: t5pKKg5/9fJKiU0lrNTahv6gvABcmCjQq5gF3BxwiDQ=
  allowed ips: 10.0.0.2/32

An diesem Punkt sollten wir vom „Client“-System aus den Server unter 10.0.0.1 anpingen können Adresse:

$ ping -c 3 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=2.82 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=38.0 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=3.02 ms

--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.819/14.613/37.999/16.536 ms

Schlussfolgerungen

In diesem Tutorial haben wir gesehen, wie man ein VPN mit Wireguard auf der neuesten stabilen Version von Ubuntu erstellt:20.04 Focal Fossa. Die Software ist wirklich einfach zu installieren und zu konfigurieren, besonders im Vergleich zu anderen Lösungen, wie zum Beispiel OpenVpn.

Wir haben gesehen, wie die für unser Setup verwendeten öffentlichen und privaten Schlüssel generiert werden und wie sowohl der Server als auch ein Client so konfiguriert werden, dass der gesamte Datenverkehr an das VPN umgeleitet wird. Wenn Sie die gegebenen Anweisungen befolgen, haben Sie ein funktionierendes Setup. Weitere Informationen finden Sie auf der Projektseite.


Ubuntu
  1. So erstellen Sie einen Docker-basierten LAMP-Stack mit Docker unter Ubuntu 20.04

  2. So richten Sie WireGuard VPN unter Ubuntu 18.04 ein

  3. So richten Sie WireGuard VPN unter Ubuntu 20.04 ein

  4. So richten Sie WireGuard VPN auf Ubuntu ein (eine Schritt-für-Schritt-Anleitung)

  5. So erstellen Sie RAID-Arrays mit MDADM unter Ubuntu

So erstellen und führen Sie ein C-Programm mit Ubuntu 20.04 LTS aus

So richten Sie ein VPN unter Ubuntu ein

So erstellen Sie einen bootfähigen USB-Stick mit Ventoy unter Ubuntu 21

Wie erstelle ich einen Link zu einem Ordner in Ubuntu 18.04 mit Gui?

So richten Sie WireGuard VPN unter Debian 11 ein

So richten Sie WireGuard VPN unter Linux ein