WireGuard: Eine neue Generation virtueller Netzwerkartefakte auf Kernelebene

Was istWireGuard

 Es handelt sich um ein einfach zu konfigurierendes, schnelles und sicheres Open-Source-VPN, das die neueste Verschlüsselungstechnologie nutzt. Ziel ist es, ein schnelleres, einfacheres und optimierteres universelles VPN bereitzustellen, das sich problemlos auf Low-End-Geräten wie Raspberry Pi bis hin zu High-End-Servern einsetzen lässt.

Die meisten anderen Lösungen, wie etwa IPsec und OpenVPN, wurden vor Jahrzehnten entwickelt, als der Sicherheitsforscher und Kernel-Entwickler Jason Donenfeld erkannte, dass sie langsam und schwierig richtig zu konfigurieren und zu verwalten waren.

Dies veranlasste ihn, ein neues Open-Source-VPN-Protokoll und eine neue Lösung zu entwickeln, die schneller, sicherer und einfacher bereitzustellen und zu verwalten waren.

WireGuard wurde ursprünglich für Linux entwickelt, ist aber mittlerweile für Windows, macOS, BSD, iOS und Android verfügbar. Es befindet sich noch in der aktiven Entwicklung.

Warum ist WireGuard so beliebt?

Einer der größten Vorteile von WireGuard ist neben der plattformübergreifenden Funktionalität die einfache Bereitstellung. Die Konfiguration und Bereitstellung von WireGuard ist so einfach wie die Konfiguration und Verwendung von SSH.

Schauen Sie sich die WireGuard-Installationsanleitung an. Installieren Sie WireGuard, generieren Sie öffentliche und private Schlüssel (wie bei SSH), richten Sie Firewall-Regeln ein und starten Sie den Dienst. Vergleichen Sie dies nun mit der OpenVPN-Installationsanleitung – es gibt viel zu tun.

Ein weiterer Vorteil von WireGuard ist die schlanke Codebasis mit nur 4.000 Zeilen. Zum Vergleich: OpenVPN (ein weiteres beliebtes Open-Source-VPN) verfügt über 100.000 Zeilen Code. Das Debuggen von WireGuard ist deutlich einfacher.

Unterschätzen Sie nicht seine Einfachheit. WireGuard unterstützt alle aktuellen kryptografischen Techniken wie Noise Protocol Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF und sichere vertrauenswürdige Strukturen.

Da WireGuard im Kernel-Speicher ausgeführt wird, kann es sichere Netzwerke mit hoher Geschwindigkeit bereitstellen.

Gängige virtuelle Netzwerkfunktionen

Zu den gängigen virtuellen Netzwerken auf dem Markt zählen derzeit IPSEC-, SSL-, PPTP- und L2TP-Netzwerke. Wie aus Tabelle 1 unten hervorgeht, weisen sie offensichtliche Mängel hinsichtlich Sicherheit und Leistung auf.

WireGuard: Eine neue Generation virtueller Netzwerkartefakte auf Kernelebene

Einführung in WireGuard

Das virtuelle Netzwerk WireGuard ist das neueste virtuelle Netzwerk auf Kernel-Ebene. Es wird vom Linux-Gründer Linus Torvalds wärmstens empfohlen und wurde im März 2020 offiziell in den Linux-Kernel 5.6 integriert. Anschließend hat GG das virtuelle Netzwerk WireGuard auch in den Linux-Kernel von Android 12 integriert. Seine Vorteile sind hohe Sicherheit, hohe Leistung und geringe Komplexität, wie in Tabelle 2 unten dargestellt.

WireGuard: Eine neue Generation virtueller Netzwerkartefakte auf Kernelebene

Im Vergleich zu den Hunderttausenden von Codezeilen von OpenVPN und IPSec hat WireGuard nur viertausend Zeilen.

Gründer von LinuxLinus TorvaldsIn der PostNennen Sie esEin Kunstwerk:Kunstwerk, Original-E-Mail: https://lists.openwall.net/netdev/2018/08/02/124

Darf ich noch einmal meine Begeisterung dafür zum Ausdruck bringen und hoffen, dass es bald zusammengeführt wird? Der Code ist vielleicht nicht perfekt, aber ich habe ihn überflogen, und verglichen mit den Schrecken von OpenVPN und IPSec ist er ein wahres Kunstwerk.

WireGuard-Sicherheit

  • Curve25519 ist derzeit der Schlüsselaustauschalgorithmus auf höchstem Niveau.
  • Symmetrischer Verschlüsselungs- und Entschlüsselungsalgorithmus ChaCha20, schneller und effizienter als AES.
  • Poly1305 ist ein MAC-Standard (Message Authentication Code), der zur Überprüfung der Datenintegrität und Nachrichtenauthentizität verwendet wird.
  • BLAKE2 ist ein sichererer HASH-Algorithmus (ähnlich wie SHA1, SHA256, MD5)
  • SipHash24 Ein weiterer HASH-Algorithmus.
  • HKDF ist ein Schlüsselableitungsalgorithmus

Funktionen des virtuellen WireGuard-Netzwerks

Da das virtuelle WireGuard-Netzwerk vom 100%-Kernel verarbeitet wird, entfällt der Overhead der Interaktion zwischen Benutzerprozessen und Kernel, sodass die Leistung überlegen ist, was sich in einem hohen Durchsatz manifestiert, der zwei- bis viermal so hoch ist wie der des virtuellen SSL-Netzwerks/offenen virtuellen Netzwerks, wie in Abbildung 1 gezeigt. Gleichzeitig ist die Latenz gering, sie beträgt 30% bis 40% des virtuellen SSL-Netzwerks/offenen virtuellen Netzwerks, wie in Abbildung 2 gezeigt.

WireGuard: Eine neue Generation virtueller Netzwerkartefakte auf Kernelebene
WireGuard: Eine neue Generation virtueller Netzwerkartefakte auf Kernelebene

Höherer Durchsatz und geringere Latenz bedeuten eine größere Anzahl gleichzeitiger virtueller Netzwerkbenutzer in einer Netzwerkumgebung bei gleicher Bandbreite, geringerer Systemlast und einem stabileren Langzeitbetrieb. Dies ist einer der wichtigsten Faktoren bei der Auswahl virtueller Netzwerke mit 100 bis 10.000 Benutzern, Zero Trust und SD-WAN.

Um festzustellen, ob der virtuelle Netzwerkdienst vom 100%-Kernel verarbeitet wird, können Sie den Befehl netstat –nap in der Shell ausführen, um das Programm anzuzeigen, das dem Abhörport des virtuellen Netzwerkservers entspricht. Steht in der letzten Spalte ein Programmname, bedeutet dies, dass das Benutzermodusprogramm abhört. Steht in der letzten Spalte ein „-“ ohne Programmnamen, bedeutet dies, dass der Kernel abhört. Nachfolgend finden Sie Statistiken zu verschiedenen virtuellen Netzwerkservern im Dadi Cloud Control System (siehe Tabelle 3).

WireGuard: Eine neue Generation virtueller Netzwerkartefakte auf Kernelebene

Einführung in das WireGuard Virtual Network Module

Das virtuelle WireGuard-Netzwerk ist ein Public/Private-Key-Verschlüsselungssystem. Die Verschlüsselungsparameter bestehen aus dem eigenen privaten Schlüssel und dem öffentlichen Schlüssel der Gegenstelle. Die kommunizierenden Parteien müssen daher vorab öffentliche Schlüssel austauschen. Bei einer großen Anzahl von Clients wird die Generierung, Änderung, Vernichtung und der Austausch von Schlüsseln sowie der Erwerb von Client-Konfigurationsdateien zu einem Verwaltungsaufwand. Entsprechend ist das virtuelle IKEv2-Netzwerk ein CA-Verschlüsselungssystem. Bei Verwendung eines CA-Zertifikats mit einem realen Domänennamen kann der vorherige Austausch öffentlicher Schlüssel vermieden werden.

WireGuard-Installation

  • Offizielle Installationsanleitung: https://www.wireguard.com/install/
  • Docker-Installation: https://hub.docker.com/r/linuxserver/wireguard

CentOS 7-Installation der Wireguard-Quelle

 curl -o /etc/yum.repos.d/jdoss-wireguard-epel-7.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo 

CentOS 7-Installation von Wireguard

 yum install -y wireguard-dkms wireguard-tools 

Wenn Sie der Meinung sind, dass die Geschwindigkeit langsam ist, können Sie zunächst zur Wireguard-Quelle gehen, um das RPM-Paket herunterzuladen:

 wget https://copr-be.cloud.fedoraproject.org/results/jdoss/wireguard/epel-7-x86_64/02151984-wireguard-dkms/wireguard-dkms-1.0.20210424-1.el7.noarch.rpm 

CentOS 8-Installation von Wireguard

 
yum install epel-release yum config-manager --set-enabled powerTools yum copr aktiviere jdoss/wireguard yum install wireguard-dkms wireguard-tools
 

WireGuard-Konfiguration

WireGuard-Konfigurationsanweisungen

  • Die [Schnittstelle] in der Serverkonfigurationsdatei speichert den privaten Schlüssel des Servers, und die [Schnittstelle] in der Clientkonfigurationsdatei speichert auch den privaten Schlüssel des Clients.
  • Der [Peer] in der Serverkonfigurationsdatei speichert den öffentlichen Schlüssel des Clients, während der [Peer] in der Clientkonfigurationsdatei den öffentlichen Schlüssel des Servers speichert.
  • Sowohl der Server als auch der Client speichern ihre eigenen privaten Schlüssel in [Interface] und die öffentlichen Schlüssel des jeweils anderen in [Peer].

Wireguard-Serverkonfiguration

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey;cat <<EOF>/etc/wireguard/wg0.conf

[Schnittstelle] #Die Adresse muss nur geschrieben und der lokalen virtuellen Adresse zugewiesen werden. Die Server- und Clientadressen sind eindeutig und können nicht in Konflikt geraten.Address = 178.10.10.1/24 SaveConfig = true #Die Server-Firewall muss lediglich die Masquerade eines UDP-Ports aktivieren und ihn dem externen Netzwerk zuordnen.PostUp = firewall-cmd --zone=public --add-port 50107/udp &&firewall-cmd --zone=public --add-masquerade PostDown = firewall-cmd --zone=public --remove-port 50107/udp && firewall-cmd --zone=public --remove-masquerade # lauscht auf dem von der oberen Firewall geöffneten Port.ListenPort = 50107 #PrivateKey ist der private Schlüssel des Servers.PrivateKey = kADzYhPw3F1XCAolbpHQKyPjZE1VQQeyncL60wbFQlM= [Peer] #PublicKey ist der öffentliche Schlüssel des Clients. PublicKey = xUh7M1dhWZijlQfZv1bqPAvI8dwCfsdm8RD7NfumqXY = #. Der Server allowip kann das externe und das lokale Netzwerk-IP-Segment des Servers nicht schreiben. Er muss lediglich angeben, auf welches Netzwerksegment der lokale Rechner über VPN zugreifen möchte. Hier schreibt der Server nur das virtuelle Adresssegment, da der Server nicht direkt auf das interne Netzwerk-IP-Segment des Clients zugreifen muss. AllowedIPs = 178.10.10.2/32 EOF

Verwenden Sie den Neustart, um den Dienst zum ersten Mal zu starten

 systemctl restart [email protected] 

Neuladen nach nachfolgenden Konfigurationsänderungen wieder aktivieren

 systemctl reload [email protected] 

Der Dienst kann so eingestellt werden, dass er nur dann automatisch startet, wenn beide Enden normal kommunizieren können

 systemctl aktiviere [email protected] 

WireGuard-Client-Konfiguration

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey;cat <<EOF>/etc/wireguard/wg0.conf

[Schnittstelle] #PrivateKey ist der private Schlüssel des ClientsPrivateKey = CERouQpIqthDNhcSKqS2I/lexMH9z/pImXajg7QLs3E= #Die Adresse muss nur geschrieben und der lokalen virtuellen Adresse zugewiesen werden. Die Server- und Clientadressen sind eindeutig und können nicht in Konflikt geraten.Adresse = 178.10.10.6/32 #Bitte bestimmen Sie, welche Netzwerkschnittstelle für die Wireguard-Kommunikation verwendet werden soll, hier ist eth0 PostUp = iptables -I INPUT -i %i -j ACCEPT; iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D INPUT -i %i -j ACCEPT;iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] #PublicKey ist der öffentliche Schlüssel des ServersPublicKey = yVco0xaLnYtcR1eMjBfRnZ6mmUvmpOSeasS250nLkE4= #endpoint ist die externe IP+Port des ServersEndpoint = xxx.xx.x.xx:50107 #allowip kann das externe IP-Segment des Servers und das IP-Segment des lokalen Netzwerks nicht schreiben. Sie müssen lediglich angeben, auf welches Netzwerksegment der lokale Rechner über VPN zugreifen möchte. Ich schreibe nur das virtuelle Adresssegment und das interne IP-Segment des Servers, da der Client auf das interne IP-Segment des Servers zugreifen muss. AllowedIPs = 178.10.10.0/24,192.168.0.100/24 PersistentKeepalive = 10 EOF
 

Verwenden Sie den Neustart, um den Dienst zum ersten Mal zu starten

 systemctl restart [email protected] 

Neuladen nach nachfolgenden Konfigurationsänderungen wieder aktivieren

 systemctl reload [email protected] 

Der Dienst kann so eingestellt werden, dass er nur dann automatisch startet, wenn beide Enden normal kommunizieren können

 systemctl aktiviere [email protected] 

Wireguard-Mac-Konfiguration

# installiere brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" # installiere Homebrew-Bottle-Quelle echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc Quelle ~/.zshrc # installiere Wireguard brew installiere Wireguard-Tools

WireGuard im Alltagseinsatz

Verwendung:

Verwendung: wg-quick [up | down | save | strip] [CONFIG_FILE | INTERFACE] # Speichert die Konfiguration. Diese Kommandozeilenmethode ist besser kontrollierbar. Es empfiehlt sich, die Konfigurationsdatei in /etc/wireguard/wg0.conf nicht direkt zu bearbeiten. touch /etc/wireguard/wg0.conf wg-quick save wg0 # Oder: wg showconf wg0 > /etc/wireguard/wg0.conf # Wenn sich der Peer hinter NAT befindet, müssen Sie möglicherweise die relevanten Endpunktinformationen löschen, da nicht aktiv darauf zugegriffen werden kann. # Starten/Stoppen von wg-quick up wg0 #Automatisch die Konfigurationsdatei „/etc/wireguard/wg0.conf“ auswählen wg-quick up /path/to/wg0.conf #Den Pfad angeben wg-quick down wg0 # Peer löschen wg set wg0 peer $(cat cpublickey1) entfernen

WireGuard-Anwendungsfälle

Das vorherige Szenario ist lediglich ein einfaches Punkt-zu-Punkt-Szenario und stellt somit das einfachste Anwendungsszenario dar. Im Folgenden werden weitere Anwendungsszenarien erläutert.

Szenario 1: PC-zu-LAN

 
# Erlaubt dem Client den Zugriff auf alle LANs auf dem Server (d. h. PC-zu-LAN, dieser Modus wird im Allgemeinen verwendet) # Basierend auf dem grundlegenden Szenario müssen die folgenden Einstellungen vorgenommen werden: ## auf dem Server: # Fügen Sie die VPN-Netzwerksegmentroute zum serverseitigen Unternehmensrouter hinzu # 172.30.0.0/24 über [die lokale LAN-IP]## auf dem Client: # Fügen Sie das serverseitige Netzwerksegment zur lokalen Routingtabelle hinzu ip route add 10.1.0.0/16 über 172.30.0.1 ... # Erlaubt dem serverseitigen Netzwerk den Zugriff auf die Clientseite (IP-Link down + up nicht erforderlich; hier steht 0.0.0.0/0 für alle Netzwerke) wg set wg0 peer dLssxxxxxxxxxxxxxxxxxxq98NQKOivi3MN/VM= persistent-keepalive 25 erlaubte IPs 172.30.0.1/32,0.0.0.0/0 Endpunkt 192.168.11.29:51820

Szenario 2: LAN-zu-LAN

# Verbinden Sie die LANs auf beiden Seiten zu einem integrierten LAN (d. h. LAN-zu-LAN). # Basierend auf dem Basisszenario müssen die folgenden Einstellungen vorgenommen werden: ## auf dem Server: # Fügen Sie die VPN-Netzwerksegmentroute zum serverseitigen Unternehmensrouter hinzu # 172.30.0.0/24 über [die lokale LAN-IP] # Fügen Sie die clientseitige Netzwerksegmentroute zum serverseitigen Unternehmensrouter hinzu # 192.168.2.0/24 über [die lokale LAN-IP] # ... # Fügen Sie die clientseitige Netzwerksegmentroute zur lokalen Routingtabelle hinzu ip route add 192.168.0.0/16 über 172.30.0.2 ... # Erlauben Sie dem Client, auf das serverseitige Netzwerk zuzugreifen (IP-Link down + up nicht erforderlich) wg set wg0 peer VbR3Kxgxxxxxxxxxxxxxxxxxzq3H4ebdgTng= erlaubte IPs 172.30.0.2/32,192.168.0.0/24## auf Client: # VPN-Netzwerksegmentroute zum Client-Enterprise-Router hinzufügen # 172.30.0.0/24 über [lokale LAN-IP] # Server-Netzwerksegmentroute zum Client-Enterprise-Router hinzufügen # 10.1.0.0/16 über [lokale LAN-IP] # ... # Server-Netzwerksegmentroute zur lokalen Routingtabelle hinzufügen IP-Route hinzufügen 10.1.0.0/16 über 172.30.0.1 ... # Serverzugriff auf Client-Netzwerk erlauben (IP-Link down + up nicht erforderlich; 0.0.0.0/0 steht für alle Netzwerke) wg set wg0 peer dLssxxxxxxxxxxxxxxxxxx98NQKOivi3MN/VM= persistent-keepalive 25 erlaubte IPs 172.30.0.1/32,0
 

WireGuard ist aus gutem Grund beliebt. Einige beliebte, datenschutzorientierte VPNs wie Mullvad VPN nutzen WireGuard bereits, und die Akzeptanz dürfte in naher Zukunft weiter steigen. Weitere Informationen, Konfigurationsmöglichkeiten und Anwendungsszenarien finden Sie in der offiziellen Dokumentation.

Punktzahl

Das ist eine gute Idee

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * Mark