Diese Anleitung ignoriert ein paar Sicherheitseinstellungen. Einige Daten dürfen nicht von anderen einsehbar sein. Dazu bitte die Anleitung von wireguard beachten! Das hier ist ein Test im lokalen Netz, da interessiert mich das nicht so sehr. Im "bösen" Internet bitte unbedingt beachten!
In letzter Zeit liest man immer von Wireguard und das es bald evt. in den Kernel aufgenommen wird. Das macht doch jemanden wie mich furchtbar neugierig.
Was kann man mit einem VPN-Tunnel anstellen?
- Man verbindet zwei unterschiedliche Standorte zu einem Netz
- Man möchte evt. seine eigene IP-Adresse tarnen
- Man möchte auf sein Heimnetzwerk von unterwegs aus drauf zugreifen
- Man möchte zwei Server verbinden, die dann z.B. die Redis-Datenbank in Master/Slave Modus betreiben
und vieles andere
Dann geht es mal ans Ausprobieren, wie immer auf einem ROCKPro64 bzw. zwei
Installation Kernel-Modul
Dieser Teil ist überflüssig geworden mit dem Release RC12, bitte den nächsten Beitrag von mir lesen.
Wir brauchen für Wireguard ein Kernelmodul, das aber nicht vorhanden ist. Dann bauen wir das mal selber.
sudo apt-get install libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-config
git clone https://git.zx2c4.com/WireGuard
cd WireGuard/src
make
sudo make install
Konfiguration Tunnel
Danach ist alles vorhanden, was wir benötigen. In diesem Beispiel wollen wir eine Peer-to-Peer Verbindung aufbauen.
Peer-to-Peer Tunnel
RP64 Nr.1
- LAN Adresse: 192.168.3.208
- Wireguard IP 192.168.10.1
RP64 Nr.2
- LAN Adresse: 192.168.3.14
- Wireguard IP 192.168.10.2
Unter /etc/wireguard legt man alle Keys und Konfigdateien ab.
cd /etc/wireguard
Der Ordner ist standardmäßig leer!
Keys erzeugen:
private.key erzeugen
root@rp64_nextcloud:/etc/wireguard# wg genkey > private.key
Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.
public.key erzeugen
root@rp64_nextcloud:/etc/wireguard# wg pubkey > public.key < private.key
psk.key erzeugen
root@rp64_nextcloud:/etc/wireguard# wg genpsk > psk.key
Schnittstelle erzeugen
sudo ip link add wg0 type wireguard
sudo ip addr add 192.168.10.1/24 dev wg0
Ausgabe: Nur Schnittstelle angelegt
root@rp64_nextcloud:/etc/wireguard# wg
interface: wg0
Key hinzufügen
cd /etc/wireguard
wg set wg0 private-key ./private.key
Ausgabe: Key hinzugefügt!
root@rp64_nextcloud:/etc/wireguard# wg
interface: wg0
public key: gqiCgt5+X3na+wZ1e9gnR1pTujFO3jIudnwDIttDPEo=
private key: (hidden)
Schnittstelle IP-Adresse löschen
Falls man sich mal vertan hat, kann man hiermit alle IP-Adressen einer Schnittstelle löschen.
ip addr flush dev wg0
Schnittstelle aktivieren
ip link set wg0 up
Wenn man das vergisst, wird einem beim Befehl wg kein Port angezeigt.
Nicht richtig
interface: wg0
public key: gqiCgt5+X3na+wZ1e9gnR1pTujFO3jIudnwDIttDPEo=
private key: (hidden)
Korrekt
interface: wg0
public key: gqiCgt5+X3na+wZ1e9gnR1pTujFO3jIudnwDIttDPEo=
private key: (hidden)
listening port: 35866
Peer bekanntmachen
wg set wg0 peer zj1ajjcBhgFSe+NUHtnTNQ4+emsVgHDPVOeQHVKK4U4= allowed-ips 192.168.10.2/32 endpoint 192.168.3.14:53751
- wg = Programm wireguard
- set = Befehl
- wg0 = Interface
- peer = Peer to Peer Verbindung
- PUBLICKEY = Den public.key vom ZIEL
- allowed-ips IP-Adresse des Ziels, hier 192.168.10.2 gewählt
- endpoint 192.168.3.14:PORT / LAN IP Schnittstelle und PORT
Das ganze ist dann auf beiden Rechner auszuführen, nicht besonders viel Arbeit wenn man es einmal verstanden hat. Ich habe hier nur die Schritte auf dem einen Rechner aufgelistet.
Test
Ping Test RP Nr. 1
root@rp64_nextcloud:/etc/wireguard# ping 192.168.10.2
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=2.50 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=2.99 ms
64 bytes from 192.168.10.2: icmp_seq=3 ttl=64 time=2.75 ms
64 bytes from 192.168.10.2: icmp_seq=4 ttl=64 time=2.59 ms
64 bytes from 192.168.10.2: icmp_seq=5 ttl=64 time=2.91 ms
^C
--- 192.168.10.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 2.509/2.755/2.998/0.194 ms
Ping Test RP Nr. 2
root@rockpro64:/etc/wireguard# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=2.95 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=2.83 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=2.43 ms
^C
--- 192.168.10.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.430/2.740/2.958/0.225 ms
Nach erfolgreichem Pingtest, kann man mit dem Befehl wg sehen, wie viel Daten man transferiert hat.
root@rp_64_test:/etc/wireguard# wg
interface: wg0
public key: zj1ajjcBhgFSe+NUHtnTNQ4+emsVgHDPVOeQHVKK4U4=
private key: (hidden)
listening port: 41908
peer: gqiCgt5+X3na+wZ1e9gnR1pTujFO3jIudnwDIttDPEo=
endpoint: 192.168.3.208:35866
allowed ips: 192.168.10.1/32
latest handshake: 52 seconds ago
transfer: 4.84 KiB received, 4.93 KiB sent
Iperf3
Iperf3 Test RP Nr. 1 (Server)
root@rp64_nextcloud:/etc/wireguard# iperf3 -B 192.168.10.1 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.10.2, port 32876
[ 5] local 192.168.10.1 port 5201 connected to 192.168.10.2 port 32878
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 75.5 MBytes 633 Mbits/sec
[ 5] 1.00-2.00 sec 106 MBytes 891 Mbits/sec
[ 5] 2.00-3.00 sec 107 MBytes 895 Mbits/sec
[ 5] 3.00-4.00 sec 107 MBytes 901 Mbits/sec
[ 5] 4.00-5.00 sec 107 MBytes 900 Mbits/sec
[ 5] 5.00-6.00 sec 107 MBytes 899 Mbits/sec
[ 5] 6.00-7.00 sec 107 MBytes 901 Mbits/sec
[ 5] 7.00-8.00 sec 107 MBytes 895 Mbits/sec
[ 5] 8.00-9.00 sec 107 MBytes 896 Mbits/sec
[ 5] 9.00-10.00 sec 107 MBytes 897 Mbits/sec
[ 5] 10.00-10.02 sec 1.91 MBytes 893 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.02 sec 0.00 Bytes 0.00 bits/sec sender
[ 5] 0.00-10.02 sec 1.02 GBytes 871 Mbits/sec receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
^Ciperf3: interrupt - the server has terminated
Iperf3 Test RP Nr. 2 (Client)
root@rockpro64:/etc/wireguard# iperf3 -c 192.168.10.1
Connecting to host 192.168.10.1, port 5201
[ 4] local 192.168.10.2 port 32878 connected to 192.168.10.1 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 80.3 MBytes 673 Mbits/sec 3 1.52 MBytes
[ 4] 1.00-2.00 sec 106 MBytes 889 Mbits/sec 1 910 KBytes
[ 4] 2.00-3.00 sec 106 MBytes 891 Mbits/sec 0 1.01 MBytes
[ 4] 3.00-4.00 sec 108 MBytes 910 Mbits/sec 0 1.11 MBytes
[ 4] 4.00-5.00 sec 107 MBytes 899 Mbits/sec 0 1.21 MBytes
[ 4] 5.00-6.00 sec 107 MBytes 900 Mbits/sec 0 1.30 MBytes
[ 4] 6.00-7.00 sec 107 MBytes 900 Mbits/sec 0 1.39 MBytes
[ 4] 7.00-8.00 sec 106 MBytes 891 Mbits/sec 1 811 KBytes
[ 4] 8.00-9.00 sec 107 MBytes 900 Mbits/sec 0 942 KBytes
[ 4] 9.00-10.00 sec 107 MBytes 896 Mbits/sec 0 1.04 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 1.02 GBytes 875 Mbits/sec 5 sender
[ 4] 0.00-10.00 sec 1.02 GBytes 872 Mbits/sec receiver
iperf Done.
Iperf3 normales LAN
root@rp64_nextcloud:/etc/wireguard# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.3.14, port 39548
[ 5] local 192.168.3.208 port 5201 connected to 192.168.3.14 port 39550
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 110 MBytes 925 Mbits/sec
[ 5] 1.00-2.00 sec 112 MBytes 942 Mbits/sec
[ 5] 2.00-3.00 sec 112 MBytes 940 Mbits/sec
[ 5] 3.00-4.00 sec 112 MBytes 940 Mbits/sec
[ 5] 4.00-5.00 sec 112 MBytes 939 Mbits/sec
[ 5] 5.00-6.00 sec 112 MBytes 938 Mbits/sec
[ 5] 6.00-7.00 sec 112 MBytes 938 Mbits/sec
[ 5] 7.00-8.00 sec 112 MBytes 939 Mbits/sec
[ 5] 8.00-9.00 sec 112 MBytes 940 Mbits/sec
[ 5] 9.00-10.00 sec 111 MBytes 927 Mbits/sec
[ 5] 10.00-10.02 sec 1.97 MBytes 924 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.02 sec 0.00 Bytes 0.00 bits/sec sender
[ 5] 0.00-10.02 sec 1.09 GBytes 937 Mbits/sec receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.3.14, port 39552
[ 5] local 192.168.3.208 port 5201 connected to 192.168.3.14 port 39554
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 5] 0.00-1.00 sec 114 MBytes 958 Mbits/sec 0 1.36 MBytes
[ 5] 1.00-2.00 sec 112 MBytes 943 Mbits/sec 0 1.36 MBytes
[ 5] 2.00-3.00 sec 111 MBytes 936 Mbits/sec 0 1.84 MBytes
[ 5] 3.00-4.00 sec 111 MBytes 933 Mbits/sec 0 1.84 MBytes
[ 5] 4.00-5.00 sec 108 MBytes 901 Mbits/sec 0 1.84 MBytes
[ 5] 5.00-6.00 sec 111 MBytes 934 Mbits/sec 0 1.84 MBytes
[ 5] 6.00-7.00 sec 112 MBytes 944 Mbits/sec 0 1.84 MBytes
[ 5] 7.00-8.00 sec 112 MBytes 944 Mbits/sec 0 1.84 MBytes
[ 5] 8.00-9.00 sec 112 MBytes 943 Mbits/sec 0 1.84 MBytes
[ 5] 9.00-10.00 sec 111 MBytes 934 Mbits/sec 0 1.84 MBytes
[ 5] 10.00-10.01 sec 1.25 MBytes 1.15 Gbits/sec 0 1.84 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 5] 0.00-10.01 sec 1.09 GBytes 937 Mbits/sec 0 sender
[ 5] 0.00-10.01 sec 0.00 Bytes 0.00 bits/sec receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Fazit
Ultra coole Sache Ich habe noch nie so schnell einen Tunnel aufgebaut! Meine Erinnerungen an OpenVPN kommen da hoch, was war das ein Gefummel bis da mal eine Verbindung stand. Die Perfomance der Verbindung war ebenfalls überraschend schnell. Bitte beachten, das war ein Test zweier ROCKPro64 in meinem lokalem Netz. Ein Test in der freien Wildbahn folgt aber!
Und zum Schluss folgender Hinweis der wireguard Webseite!
WireGuard is not yet complete. You should not rely on this code. It has not undergone proper degrees of security auditing and the protocol is still subject to change. We're working toward a stable 1.0 release, but that time has not yet come. There are experimental snapshots tagged with "0.0.YYYYMMDD", but these should not be considered real releases and they may contain security vulnerabilities (which would not be eligible for CVEs, since this is pre-release snapshot software). If you are packaging WireGuard, you must keep up to date with the snapshots.