Wireguard
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.
Sisukord
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.