Erinevus lehekülje "Wireguard" redaktsioonide vahel

Allikas: Kuutõrvaja
P
P
 
(ei näidata sama kasutaja 8 vahepealset redaktsiooni)
3. rida: 3. rida:
 
Artikli kirjutamise hetkel (2018-08) on tegu veel muidugi "beeta" tarkvaraga. Artikkel on kirjutatud Alpine Linuxi näitel.
 
Artikli kirjutamise hetkel (2018-08) on tegu veel muidugi "beeta" tarkvaraga. Artikkel on kirjutatud Alpine Linuxi näitel.
  
Tegu on point-to-point tunneliga (tun seadmega).
+
Tegu on point-to-point tunneliga.
 +
 
 +
Suur kiirusevõit tuleb sellest, et wireguard moodul on kerneli moodul, seega puudub userland-kernel context switching.
  
 
= Eeldused =
 
= Eeldused =
68. rida: 70. rida:
 
  wg genkey | tee privatekey | wg pubkey > publickey
 
  wg genkey | tee privatekey | wg pubkey > publickey
 
  wg set wg0 listen-port 39814 private-key ./privatekey
 
  wg set wg0 listen-port 39814 private-key ./privatekey
 
  
 
Seadista '''seadme A''' loodud wg0 liides aktsepteerima teise seadme avaliku võtit ja IPd.
 
Seadista '''seadme A''' loodud wg0 liides aktsepteerima teise seadme avaliku võtit ja IPd.
75. rida: 76. rida:
 
Seadista seadme B loodud wg0 liides aktsepteerima esimese seadme avaliku võtit ja IPd.
 
Seadista seadme B loodud wg0 liides aktsepteerima esimese seadme avaliku võtit ja IPd.
 
  wg set wg0 peer [seadme A avaliku võtmefaili sisu] persistent-keepalive 25 allowed-ips 192.168.66.1/32 endpoint 192.168.1.1:48574
 
  wg set wg0 peer [seadme A avaliku võtmefaili sisu] persistent-keepalive 25 allowed-ips 192.168.66.1/32 endpoint 192.168.1.1:48574
 
 
  
 
Kontrolli seadistust
 
Kontrolli seadistust
 
  wg show
 
  wg show
  
või
+
või
  
 
  wg showconf wg0
 
  wg showconf wg0
88. rida: 87. rida:
  
 
  ip link set wg0 up
 
  ip link set wg0 up
 
  
 
Nüüd võiks seadmete vahel töötada ping ka wg0 liideste vahel:
 
Nüüd võiks seadmete vahel töötada ping ka wg0 liideste vahel:
118. rida: 116. rida:
  
  
 +
= Püsiv seadistus =
 +
 +
Oluline on vastloodud seadistus teha püsivaks mõlemas seadmes:
 +
 +
wg showconf wg0 > /root/juhtmekaitsja-1.conf
 +
 +
ja teises
 +
 +
wg showconf wg0 > /root/juhtmekaitsja-2.conf
 +
 +
Seda on võimalik taastada käsuga
 +
 +
wg setconf wg0 /root/juhtmekaitsja-1.conf
 +
 +
Küll aga tuleb endal välja mõelda lahendus oma süsteemile:
 +
* käivitumisel luua sobiv võrguseade
 +
* määrata IP aadress
 +
* laadida sisse loodud konf (wg setconf ...)
 +
 +
wg-quick käsureatööriist on ka abiks: https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8
 +
 +
wg-quick [ up | down | save ] [ CONFIG_FILE | INTERFACE ]
 +
 +
Eeldab /etc/wireguard/INTERFACE.conf faili olemasolu.
 +
 +
Sinna faili saab sisse kirjutada kõik vajaliku (IP aadressi ja interface nime jne).
 +
 +
'''wg-quick jaoks konfifail ja wg tekitatav konfifail ei ole omavahel kompatiiblid.'''
 +
 +
Sarnane startup on olemas ka systemd'le.
 +
 +
= Katsed =
 +
 +
== iperf3 + wireguard ==
 +
 +
Wireguard on seadistatud 2 VMi vahele, mis asuvad samas datacentris. Ühendatud 2x10Gbit/s võrguühendusega.
 +
 +
iperf3 -c 192.168.66.1
 +
Connecting to host 192.168.66.1, port 5201
 +
[  5] local 192.168.66.2 port 58036 connected to 192.168.66.1 port 5201
 +
[ ID] Interval          Transfer    Bitrate        Retr  Cwnd
 +
[  5]  0.00-1.00  sec  165 MBytes  1.38 Gbits/sec  847  1.38 MBytes
 +
[  5]  1.00-2.00  sec  160 MBytes  1.34 Gbits/sec    0  1.46 MBytes
 +
[  5]  2.00-3.00  sec  161 MBytes  1.35 Gbits/sec    0  1.53 MBytes
 +
[  5]  3.00-4.00  sec  160 MBytes  1.34 Gbits/sec    0  1.58 MBytes
 +
[  5]  4.00-5.00  sec  166 MBytes  1.39 Gbits/sec    6  1.16 MBytes
 +
[  5]  5.00-6.00  sec  162 MBytes  1.36 Gbits/sec    0  1.22 MBytes
 +
[  5]  6.00-7.00  sec  158 MBytes  1.32 Gbits/sec    0  1.28 MBytes
 +
[  5]  7.00-8.00  sec  164 MBytes  1.37 Gbits/sec    0  1.34 MBytes
 +
[  5]  8.00-9.00  sec  171 MBytes  1.44 Gbits/sec    0  1.41 MBytes
 +
[  5]  9.00-10.00  sec  168 MBytes  1.40 Gbits/sec    0  1.46 MBytes
 +
- - - - - - - - - - - - - - - - - - - - - - - - -
 +
[ ID] Interval          Transfer    Bitrate        Retr
 +
[  5]  0.00-10.00  sec  1.60 GBytes  1.37 Gbits/sec  853            sender
 +
[  5]  0.00-10.05  sec  1.59 GBytes  1.36 Gbits/sec                  receiver
 +
 +
iperf Done.
 +
 +
== iperf + openvpn sülearvuti + andmekeskuses VMi vahel ==
 +
 +
iperf3 -c 10.10.10.2
 +
Connecting to host 10.10.10.2, port 5201
 +
[  5] local 10.10.10.6 port 58305 connected to 10.10.10.2 port 5201
 +
[ ID] Interval          Transfer    Bitrate
 +
[  5]  0.00-1.00  sec  11.5 MBytes  96.6 Mbits/sec
 +
[  5]  1.00-2.00  sec  10.7 MBytes  89.3 Mbits/sec
 +
[  5]  2.00-3.00  sec  10.7 MBytes  89.9 Mbits/sec
 +
[  5]  3.00-4.00  sec  11.2 MBytes  94.1 Mbits/sec
 +
[  5]  4.00-5.00  sec  10.9 MBytes  91.8 Mbits/sec
 +
[  5]  5.00-6.00  sec  11.4 MBytes  95.3 Mbits/sec
 +
[  5]  6.00-7.00  sec  11.9 MBytes  99.9 Mbits/sec
 +
[  5]  7.00-8.00  sec  10.7 MBytes  90.2 Mbits/sec
 +
[  5]  8.00-9.00  sec  9.55 MBytes  80.1 Mbits/sec
 +
[  5]  9.00-10.00  sec  12.4 MBytes  104 Mbits/sec
 +
- - - - - - - - - - - - - - - - - - - - - - - - -
 +
[ ID] Interval          Transfer    Bitrate
 +
[  5]  0.00-10.00  sec  111 MBytes  93.2 Mbits/sec                  sender
 +
[  5]  0.00-10.00  sec  111 MBytes  93.0 Mbits/sec                  receiver
 +
 +
iperf Done.
 +
 +
== iperf + openvpn sülearvuti võimsama andmekeskuse vahel ==
 +
 +
iperf3 -c 10.10.11.4
 +
Connecting to host 10.10.11.4, port 5201
 +
[  5] local 10.10.11.6 port 58590 connected to 10.10.11.4 port 5201
 +
[ ID] Interval          Transfer    Bitrate
 +
[  5]  0.00-1.00  sec  16.0 MBytes  134 Mbits/sec
 +
[  5]  1.00-2.00  sec  15.9 MBytes  133 Mbits/sec
 +
[  5]  2.00-3.00  sec  15.9 MBytes  134 Mbits/sec
 +
[  5]  3.00-4.00  sec  16.0 MBytes  134 Mbits/sec
 +
[  5]  4.00-5.00  sec  15.6 MBytes  131 Mbits/sec
 +
[  5]  5.00-6.00  sec  15.1 MBytes  127 Mbits/sec
 +
[  5]  6.00-7.00  sec  15.5 MBytes  130 Mbits/sec
 +
[  5]  7.00-8.00  sec  15.8 MBytes  133 Mbits/sec
 +
[  5]  8.00-9.00  sec  14.7 MBytes  123 Mbits/sec
 +
[  5]  9.00-10.00  sec  14.2 MBytes  120 Mbits/sec
 +
- - - - - - - - - - - - - - - - - - - - - - - - -
 +
[ ID] Interval          Transfer    Bitrate
 +
[  5]  0.00-10.00  sec  155 MBytes  130 Mbits/sec                  sender
 +
[  5]  0.00-10.00  sec  154 MBytes  130 Mbits/sec                  receiver
 +
 +
iperf Done.
 +
 +
 +
== Kokkuvõte kiirustestidest ==
 +
 +
'''Jämedalt võib öelda, et tegu on 10-kordse kiiruserinevusega.'''
  
 
= Probleemid =
 
= Probleemid =

Viimane redaktsioon: 17. august 2018, kell 09:27

Wireguard (https://www.wireguard.com/) on VPN tarkvara, mis väidab ennast olevat hulga kiirem ja lihtsam kahest suuremast konkurendist IPSecist ja OpenVPNist. Vaatame siis.

Artikli kirjutamise hetkel (2018-08) on tegu veel muidugi "beeta" tarkvaraga. Artikkel on kirjutatud Alpine Linuxi näitel.

Tegu on point-to-point tunneliga.

Suur kiirusevõit tuleb sellest, et wireguard moodul on kerneli moodul, seega puudub userland-kernel context switching.

Eeldused

Vajalik on wireguard kerneli moodul.

Kaks otspunkti

seade A seade B
Seadme olemasolev IP 192.168.1.1 192.168.1.2
Tunneli IP 192.168.66.1 192.168.66.2

Veendu, et omavahel (olemasolevate) IPdega saad masinaid pingida.

Paigaldamine

Loo võrguseade

Alpine Linuxis on vaja lisada (kui juba pole) extra repository apk loetellu ja seejärel

apk update

ning

apk add wireguard-tools

Lisa uus seade, mille nimeks on wg0 ja tüüp wireguard

ip link add dev wg0 type wireguard

Lisa loodud seadmele võrguaadress olenevalt sellest, kas soovid ühes võrgus kasutada mitut seadet või ainult kahte

Mitme seadme ühendamiseks kasuta

ip address add dev wg0 192.168.66.1/24

Kahe seadme ühendamiseks

ip address add dev wg0 192.168.66.1 peer 192.168.66.2

(teise seadme puhul kasuta vastupidi aadresse)

Loo võtmed

wg utiliidiga on võimalik luua nii privaat- kui avalik võti korraga

wg genkey | tee privatekey | wg pubkey > publickey

Seadista loodud wg0 liides kuulama porti 48578 ning kasutama loodud privaatvõtit

wg set wg0 listen-port 48574 private-key ./privatekey

(teise seadme puhul kasuta teist porti)

Nüüd tee sama asi läbi teise seadme peal.

ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.66.2 peer 192.168.66.1
wg genkey | tee privatekey | wg pubkey > publickey
wg set wg0 listen-port 39814 private-key ./privatekey

Seadista seadme A loodud wg0 liides aktsepteerima teise seadme avaliku võtit ja IPd.

wg set wg0 peer [seadme B avaliku võtmefaili sisu] persistent-keepalive 25 allowed-ips 192.168.66.2/32 endpoint 192.168.1.2:39814

Seadista seadme B loodud wg0 liides aktsepteerima esimese seadme avaliku võtit ja IPd.

wg set wg0 peer [seadme A avaliku võtmefaili sisu] persistent-keepalive 25 allowed-ips 192.168.66.1/32 endpoint 192.168.1.1:48574

Kontrolli seadistust

wg show

või

wg showconf wg0

Lõppeks tõsta wg0 liidesed üles mõlemas seadmes

ip link set wg0 up

Nüüd võiks seadmete vahel töötada ping ka wg0 liideste vahel:

seadmes A

root@juhtmekaitsja-1 /tmp # ping 192.168.66.2 -c 4
PING 192.168.66.2 (192.168.66.2): 56 data bytes
64 bytes from 192.168.66.2: seq=0 ttl=64 time=0.591 ms
64 bytes from 192.168.66.2: seq=1 ttl=64 time=0.682 ms
64 bytes from 192.168.66.2: seq=2 ttl=64 time=0.524 ms
64 bytes from 192.168.66.2: seq=3 ttl=64 time=0.517 ms

--- 192.168.66.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.517/0.578/0.682 ms

Ja seadmes B

root@juhtmekaitsja-2 /tmp # ping 192.168.66.1 -c 4
PING 192.168.66.1 (192.168.66.1): 56 data bytes
64 bytes from 192.168.66.1: seq=0 ttl=64 time=0.962 ms
64 bytes from 192.168.66.1: seq=1 ttl=64 time=0.551 ms
64 bytes from 192.168.66.1: seq=2 ttl=64 time=0.542 ms
64 bytes from 192.168.66.1: seq=3 ttl=64 time=0.799 ms

--- 192.168.66.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.542/0.713/0.962 ms


Püsiv seadistus

Oluline on vastloodud seadistus teha püsivaks mõlemas seadmes:

wg showconf wg0 > /root/juhtmekaitsja-1.conf

ja teises

wg showconf wg0 > /root/juhtmekaitsja-2.conf

Seda on võimalik taastada käsuga

wg setconf wg0 /root/juhtmekaitsja-1.conf

Küll aga tuleb endal välja mõelda lahendus oma süsteemile:

  • käivitumisel luua sobiv võrguseade
  • määrata IP aadress
  • laadida sisse loodud konf (wg setconf ...)

wg-quick käsureatööriist on ka abiks: https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8

wg-quick [ up | down | save ] [ CONFIG_FILE | INTERFACE ]

Eeldab /etc/wireguard/INTERFACE.conf faili olemasolu.

Sinna faili saab sisse kirjutada kõik vajaliku (IP aadressi ja interface nime jne).

wg-quick jaoks konfifail ja wg tekitatav konfifail ei ole omavahel kompatiiblid.

Sarnane startup on olemas ka systemd'le.

Katsed

iperf3 + wireguard

Wireguard on seadistatud 2 VMi vahele, mis asuvad samas datacentris. Ühendatud 2x10Gbit/s võrguühendusega.

iperf3 -c 192.168.66.1
Connecting to host 192.168.66.1, port 5201
[  5] local 192.168.66.2 port 58036 connected to 192.168.66.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   165 MBytes  1.38 Gbits/sec  847   1.38 MBytes
[  5]   1.00-2.00   sec   160 MBytes  1.34 Gbits/sec    0   1.46 MBytes
[  5]   2.00-3.00   sec   161 MBytes  1.35 Gbits/sec    0   1.53 MBytes
[  5]   3.00-4.00   sec   160 MBytes  1.34 Gbits/sec    0   1.58 MBytes
[  5]   4.00-5.00   sec   166 MBytes  1.39 Gbits/sec    6   1.16 MBytes
[  5]   5.00-6.00   sec   162 MBytes  1.36 Gbits/sec    0   1.22 MBytes
[  5]   6.00-7.00   sec   158 MBytes  1.32 Gbits/sec    0   1.28 MBytes
[  5]   7.00-8.00   sec   164 MBytes  1.37 Gbits/sec    0   1.34 MBytes
[  5]   8.00-9.00   sec   171 MBytes  1.44 Gbits/sec    0   1.41 MBytes
[  5]   9.00-10.00  sec   168 MBytes  1.40 Gbits/sec    0   1.46 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.60 GBytes  1.37 Gbits/sec  853             sender
[  5]   0.00-10.05  sec  1.59 GBytes  1.36 Gbits/sec                  receiver

iperf Done.

iperf + openvpn sülearvuti + andmekeskuses VMi vahel

iperf3 -c 10.10.10.2
Connecting to host 10.10.10.2, port 5201
[  5] local 10.10.10.6 port 58305 connected to 10.10.10.2 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  11.5 MBytes  96.6 Mbits/sec
[  5]   1.00-2.00   sec  10.7 MBytes  89.3 Mbits/sec
[  5]   2.00-3.00   sec  10.7 MBytes  89.9 Mbits/sec
[  5]   3.00-4.00   sec  11.2 MBytes  94.1 Mbits/sec
[  5]   4.00-5.00   sec  10.9 MBytes  91.8 Mbits/sec
[  5]   5.00-6.00   sec  11.4 MBytes  95.3 Mbits/sec
[  5]   6.00-7.00   sec  11.9 MBytes  99.9 Mbits/sec
[  5]   7.00-8.00   sec  10.7 MBytes  90.2 Mbits/sec
[  5]   8.00-9.00   sec  9.55 MBytes  80.1 Mbits/sec
[  5]   9.00-10.00  sec  12.4 MBytes   104 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   111 MBytes  93.2 Mbits/sec                  sender
[  5]   0.00-10.00  sec   111 MBytes  93.0 Mbits/sec                  receiver

iperf Done.

iperf + openvpn sülearvuti võimsama andmekeskuse vahel

iperf3 -c 10.10.11.4
Connecting to host 10.10.11.4, port 5201
[  5] local 10.10.11.6 port 58590 connected to 10.10.11.4 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  16.0 MBytes   134 Mbits/sec
[  5]   1.00-2.00   sec  15.9 MBytes   133 Mbits/sec
[  5]   2.00-3.00   sec  15.9 MBytes   134 Mbits/sec
[  5]   3.00-4.00   sec  16.0 MBytes   134 Mbits/sec
[  5]   4.00-5.00   sec  15.6 MBytes   131 Mbits/sec
[  5]   5.00-6.00   sec  15.1 MBytes   127 Mbits/sec
[  5]   6.00-7.00   sec  15.5 MBytes   130 Mbits/sec
[  5]   7.00-8.00   sec  15.8 MBytes   133 Mbits/sec
[  5]   8.00-9.00   sec  14.7 MBytes   123 Mbits/sec
[  5]   9.00-10.00  sec  14.2 MBytes   120 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   155 MBytes   130 Mbits/sec                  sender
[  5]   0.00-10.00  sec   154 MBytes   130 Mbits/sec                  receiver

iperf Done.


Kokkuvõte kiirustestidest

Jämedalt võib öelda, et tegu on 10-kordse kiiruserinevusega.

Probleemid

DKMS module not available

If the following command does not list any module after you installed wireguard-dkms,

modprobe wireguard && lsmod | grep wireguard

or if creating a new link returns

# ip link add dev wg0 type wireguard

RTNETLINK answers: Operation not supported

you probably miss the linux headers.

These headers are available in linux-headers or linux-lts-headers depending of the kernel installed on your system.