WireGuard VPN - Open Source kilpailija OpenVPN:lle

  • Keskustelun aloittaja Keskustelun aloittaja juhaa
  • Aloitettu Aloitettu
Liittynyt
17.10.2016
Viestejä
4 931
WireGuardista ei näyttänyt ketjua vielä olevankaan. Onko porukalla siitä kokemusta?
Tuossa tein pikaiset testit nopeudesta ja ei se nyt ihan heti vakuuttanut, vaikka sillä mainostetaan mm. nopeudella.

WireGuard - Wikipedia

Täysin epätieteelliset nopeustestit alla tehtynä puhelimella muutamaan kertaan, lukemat aikalailla identtisiä.

OpenVPN (Asus AC68U) 15/12
WireGuard (i5 Ubuntu) 11/11
Ilman VPN:ää 30/35

VPN palvelut 200/20 netin takana

Plussaa pitää kyllä antaa WireGuardille ´maailman nopeimmasta´ asennuksesta käyttäen bash scriptiä, joka löytyy täältä: its0x08/wg-install
 
Ihan hyvin toiminut, lokakuusta asti ollu OPNsense purkissa WireGuard tunneli Mullvad VPN:n suuntaan. Liittymänä 100/10 kaapelinetti ja ~90/9 nopeuksiin pääsee tunnelin läpi WG:llä, ennen sitä oli OpenVPN ja nopeudet ~75/9 tienoilla. Johtunee luultavasti vain siitä että viimeksi mainittu ruuhkaisempi. Prosessorin kuormituksessa ehkä tuntuvin ero, ennen load average siinä 0,5 tienoilla ja nykyään 0,3. Android luurissa myös jonkin verran testannut ja akku näyttäisi ainakin kestävän huomattavasti pidempään kun vertaa OpenVPN:ään.
 
Linus on näemmä antanut varovaisen hyväksynnän varhaiselle versiolle: Re: [GIT] Networking [LWN.net]
Ei näytä kannattavan silti pidätellä hengitystä siihen saakka, että v1.0 on tarjolla esim. pfSense-pakettina.
 
Mitä etuja WireGuardissa on siis verrattuna openvpn. Itsellä nyt openvpn:llä toteutettu vpn-yhteys kotiverkkoon.
 
Tuohan vaikuttaa oikein hyvältä mutta voiko tosiaan 256bittinen kryptaus riittää. Itse tottunut aina käyttämään openvpn:llä 4096bittisiä avaimia. Ongelmana näkisin toistaiseksi puutteellisen tuen ulkoisille autentikointisysteemeille. Tuohan ei taida tukea esim älykortteja tai yubikeytä vielä. Kunhan tuota vähän vielä kehitetään niin uskon että hakkaa openvpn:n mennen tullen. Itsellä ainakin lähtee testiin.
WireGuard VPN: pros and cons | Perfect Privacy
 
Tuohan vaikuttaa oikein hyvältä mutta voiko tosiaan 256bittinen kryptaus riittää. Itse tottunut aina käyttämään openvpn:llä 4096bittisiä avaimia. Ongelmana näkisin toistaiseksi puutteellisen tuen ulkoisille autentikointisysteemeille. Tuohan ei taida tukea esim älykortteja tai yubikeytä vielä. Kunhan tuota vähän vielä kehitetään niin uskon että hakkaa openvpn:n mennen tullen. Itsellä ainakin lähtee testiin.
WireGuard VPN: pros and cons | Perfect Privacy

Varsinainen salaus tapahtuu symmetrisellä salausmenetelmällä kuten AES:illa ja 256 bittiä on aivan riittävä salausavaimen pituus. 256 bittiä on enemmän kuin tarpeeksi suojaamaan "brute force" -tyyppisiltä hyökkäyksiltä eli avainten kokeilulta yksi kerrallaan, ja muita hyökkäyksiä eli käytännössä algoritmin haavoittuvuuksia vastaan on ensisijaisesti suojauduttava algoritmin oikealla suunnittelulla, ei avaimen pituuden kasvattamisella.

Näiden salausavainten vaihtoon käytetään epäsymmetrisiä salausmenetelmiä, joiden turvallisuus toimii eri pohjalta. Niiden murtamiseen on luonnostaan olemassa tehokkaampia menetelmiä (lukujen tekijöihinjako, diskreetin logaritmin laskeminen...) kuin "brute force"-hyökkäykset. Esimerkiksi RSA vaatii oleellisesti pidemmän salausavaimen, esimerkiksi 4096-bittisen, ollakseen turvallinen.

edit: Key size - Wikipedia
 
Viimeksi muokattu:
En sanoisi päivän kokemuksella WireGuardia kovin paljon helpommaksi kuin IPsec:iä kaikkine variaationeen, OpenVPN:stä puhumattakaan.

OpenWRT näyttää erityisen helpolta tapaukselta. D-Link DIR-825 B2:ssa ei ollut riittävästi fläshiä (8 MB), jotta siihen olisi mahtunut OpenVPN kaikkine riippuvuuksineen.
Tässä pykälää isommassa TP-Link Archer C7 V2:ssa wg alkoi toimia laakista ja tilantarve on vain murto-osa OpenVPN/OpenSSL:stä.

Bonuksena iperf antaa parempia tuloksia kuin ilman VPN:ää, jolloin iperf2/3 tekee siirrossa suuremman osan työstä kuin kernel moduuleineen wg:n kanssa.

Toiveissa on, että joskus Android-client osaisi roamata paremmin ja kuluttaa vähemmän akkua kuin vanhemmat VPN:t.

TP-Link Archer C7 v2
OpenWrt 18.06-SNAPSHOT r7662-91d3b87353
2019-01-27

iperf 2 client
plain WireGuard
184 178
153 181
166 179
142 179
147 181
141 177
139
------
iperf3 send/receive
plain WireGuard
134 171
137 168
138 170
139 171
137 172
137 172
 
Hakusessa olisi openvpn:ään verrattuna kevyempi tapa tunneloida liikennettä kotiverkkoon, kun tulee paljon käytettyä mobiililaitteen kautta ja virrankulutus on melkoista.

Vähän harmi, että netgaten puolella kiinnostus tätä kohtaan tuntuu olevan olematonta, mutta saahan sitä sitä vaikka raspin kautta tämän tietysti hoidettua. Kokeilis viikonloppuna virittää.
 
Minulle tuli tarve yhdistää kaksi verkkoa toisiinsa. Omassa verkossa on Asus RT-AC66U B1 ja Asus RT-N18. Toisessa verkossa TP-LINK Deco X50-4G. Näiden välille ei saa asetuksista määritettyä site-to-site VPN:ää. Omassa verkossa minulla on minipalvelimena Melen passiivijäähdytteinen kone, jossa Celeron J4125. Tämä prossu tukee AES-NI:tä. Mietin jo, että täytyykö tilata toinen Mele, koska esim. Raspberry P 3:ssa eikä ilmeisesti 4:ssakaan ole AES-kiihdytystä. Ilmeisesti versiossa 5 olisi? Nämä kuitenkin maksavat ja hoksasin, että vuosia sitten ostamassani Firendly Elecin NanoPi NEO2:ssa on AES-tuki. Tämä ei maksanut kuin joitakin kymppejä. Uusi NEO3 löytyy täältä NanoPi NEO3 .


Mele:
Mele.png


NanoPi NEO2 OLED-näytöllä:
NEO2.jpg


VPN:ksi otin testiin ZeroTierin (ZeroTier | Global Area Networking), koska se muodostaa peer2peer-yhteyksiä ja osaa kiertää NAT:n, jolloin ei tarvitse avata julkista porttia. Nyt aluksi testaan yhteyttä kotiverkossa Asus RT-AC66U:n ja RT-N18:n verkkojen välillä, jotta saan testattua nopeuksia paremmin. Melen IP-osoite on 192.168.1.2 ja Neo2:n 192.168.10.240.

Molemmissa laitteissa on Ubuntu. ZeroTierin nettisivuilta loin privaattiverkon 10.147.18.0/24, jolla luodaan automaattisesti network id.


---------- ASENNUS ----------

Asenna ZeroTier (pivitys sudo apt update):
root@NanoPi-NEO2:~# curl -s https://install.zerotier.com | sudo bash
...
Success! You are ZeroTier address [ 68xxxxxxxxxx ].


root@NanoPi-NEO2:~# zerotier-cli status
200 info 681552a9a8 1.12.2 ONLINE

Liity verkkoon:
root@NanoPi-NEO2:~# zerotier-cli join <network id>
200 join OK


Salli verkkoon liittynyt laite verkon asetuksista my.zerotier.com (täppä Auth).

Laita IP_forward päälle:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Uudelleen lataa config:
sysctl -p /etc/sysctl.conf

Tarkista asetus:
sysctl net.ipv4.ip_forward

Anna kiinteä IP-osoite ZeroTier:ssä:
NEO2 10.147.18.11, Mele 10.147.18.11

Ip-asetukset-ZeroTier.png



Määritä Managed Routes:

Managed routes-ZeroTier.png


Tämän jälkeen koneiden reititystaulu päivittyy automaattisesti.

Koodi:
root@NanoPi-NEO2:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         RT-AC66U_B1-AD6 0.0.0.0         UG    100    0        0 eth0
10.147.18.0     *               255.255.255.0   U     0      0        0 ztzlghaur3
192.168.1.0     10.147.18.10    255.255.255.0   UG    5000   0        0 ztzlghaur3
192.168.10.0    *               255.255.255.0   U     100    0        0 eth0

root@mele:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 enp2s0
10.147.18.0     0.0.0.0         255.255.255.0   U     0      0        0 ztzlghaur3
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp2s0
192.168.10.0    10.147.18.11    255.255.255.0   UG    5000   0        0 ztzlghaur3


Reitittimiin täytyy lisätä reititykset, jotta vastakkaiseen verkkoon tarkoitettu liikenne osataan ohjata Mele:lle tai NEO2:lle.

Asus RT-AC66U:
Routes-Asus RT-AC66U.png


Asus RT-N18:
Routes-Asus RT-N18.png


Siirtonopeudet koneiden välillä, kun Iperf3-ajetaan suortaan NEO2:ssa.

Vastaanotto:
Koodi:
root@NanoPi-NEO2:~# iperf3 -c 10.147.18.10 -R -t 15
Connecting to host 10.147.18.10, port 5201
Reverse mode, remote host 10.147.18.10 is sending
[  4] local 10.147.18.11 port 40288 connected to 10.147.18.10 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  36.6 MBytes   307 Mbits/sec
[  4]   1.00-2.00   sec  38.1 MBytes   320 Mbits/sec
[  4]   2.00-3.00   sec  38.1 MBytes   319 Mbits/sec
[  4]   3.00-4.00   sec  38.5 MBytes   323 Mbits/sec
[  4]   4.00-5.00   sec  38.3 MBytes   321 Mbits/sec
[  4]   5.00-6.00   sec  37.7 MBytes   317 Mbits/sec
[  4]   6.00-7.00   sec  38.4 MBytes   322 Mbits/sec
[  4]   7.00-8.00   sec  38.0 MBytes   319 Mbits/sec
[  4]   8.00-9.00   sec  38.3 MBytes   321 Mbits/sec
[  4]   9.00-10.00  sec  37.2 MBytes   312 Mbits/sec
[  4]  10.00-11.00  sec  38.4 MBytes   322 Mbits/sec
[  4]  11.00-12.00  sec  37.9 MBytes   318 Mbits/sec
[  4]  12.00-13.00  sec  38.5 MBytes   323 Mbits/sec
[  4]  13.00-14.00  sec  38.1 MBytes   319 Mbits/sec
[  4]  14.00-15.00  sec  37.6 MBytes   315 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-15.00  sec   570 MBytes   319 Mbits/sec  320             sender
[  4]   0.00-15.00  sec   570 MBytes   319 Mbits/sec                  receiver

Lähetys:
Koodi:
root@NanoPi-NEO2:~# iperf3 -c 10.147.18.10 -t 15
Connecting to host 10.147.18.10, port 5201
[  4] local 10.147.18.11 port 40292 connected to 10.147.18.10 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  40.7 MBytes   341 Mbits/sec    3    338 KBytes
[  4]   1.00-2.00   sec  42.1 MBytes   353 Mbits/sec    0    488 KBytes
[  4]   2.00-3.00   sec  49.1 MBytes   412 Mbits/sec    0    617 KBytes
[  4]   3.00-4.00   sec  47.9 MBytes   402 Mbits/sec    0    722 KBytes
[  4]   4.00-5.00   sec  48.3 MBytes   406 Mbits/sec    0    813 KBytes
[  4]   5.00-6.00   sec  46.7 MBytes   391 Mbits/sec   82    668 KBytes
[  4]   6.00-7.00   sec  47.4 MBytes   398 Mbits/sec    0    768 KBytes
[  4]   7.00-8.00   sec  48.7 MBytes   409 Mbits/sec    0    853 KBytes
[  4]   8.00-9.00   sec  47.8 MBytes   401 Mbits/sec    0    931 KBytes
[  4]   9.00-10.00  sec  47.0 MBytes   394 Mbits/sec    0   1004 KBytes
[  4]  10.00-11.00  sec  47.6 MBytes   399 Mbits/sec    0   1.05 MBytes
[  4]  11.00-12.00  sec  47.1 MBytes   395 Mbits/sec    0   1.11 MBytes
[  4]  12.00-13.00  sec  48.6 MBytes   407 Mbits/sec    0   1.17 MBytes
[  4]  13.00-14.00  sec  47.5 MBytes   399 Mbits/sec    0   1.22 MBytes
[  4]  14.00-15.00  sec  46.2 MBytes   388 Mbits/sec    0   1.27 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-15.00  sec   703 MBytes   393 Mbits/sec   85             sender
[  4]   0.00-15.00  sec   701 MBytes   392 Mbits/sec                  receiver


AES-suorituskyky:

MELE:
Intel(R) Celeron(R) J4125 CPU @ 2.00GHz
Stepping: 8
CPU MHz: 800.000
CPU max MHz: 2700,0000
CPU min MHz: 800,0000

AES-tuki päällä:
openssl speed -elapsed -evp aes-128-cbc
You have chosen to measure elapsed time instead of user CPU time.
Doing aes-128-cbc for 3s on 16 size blocks: 65682463 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 34455426 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 10832492 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 2956846 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 380604 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 16384 size blocks: 189984 aes-128-cbc's in 3.00s
OpenSSL 1.1.1f 31 Mar 2020
built on: Fri Feb 16 15:41:31 2024 UTC
options:bn(64,64) rc4(16x,int) des(int) aes(partial) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-ANcB0E/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-cbc 350306.47k 735049.09k 924372.65k 1009270.10k 1039302.66k 1037565.95k

AES-tuki pois päältä:
OPENSSL_ia32cap="~0x200000200000000" openssl speed -elapsed -evp aes-128-cbc
You have chosen to measure elapsed time instead of user CPU time.
Doing aes-128-cbc for 3s on 16 size blocks: 31929762 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 9971593 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 2685172 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 674757 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 83795 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 16384 size blocks: 43146 aes-128-cbc's in 3.00s
OpenSSL 1.1.1f 31 Mar 2020
built on: Fri Feb 16 15:41:31 2024 UTC
options:bn(64,64) rc4(16x,int) des(int) aes(partial) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-ANcB0E/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-cbc 170292.06k 212727.32k 229134.68k 230317.06k 228816.21k 235634.69k


NOE2:
Allwinner H5, Quad-core 64-bit high-performance Cortex A53
CPU max MHz: 1248.0000
CPU min MHz: 480.0000

openssl speed -elapsed -evp aes-128-cbc
You have chosen to measure elapsed time instead of user CPU time.
Doing aes-128-cbc for 3s on 16 size blocks: 29614773 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 19746745 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 8223847 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 2555037 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 343171 aes-128-cbc's in 3.00s
OpenSSL 1.0.2g 1 Mar 2016
built on: reproducible build, date unspecified
options:bn(64,64) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) blowfish(ptr)
compiler: cc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 157945.46k 421263.89k 701768.28k 872119.30k 937085.61k


Vertailun vuoksi sama Raspberry Pi 3 Model B Plus Rev 1.3 -versiolla:

openssl speed -elapsed -evp aes-128-cbc
You have chosen to measure elapsed time instead of user CPU time.
Doing aes-128-cbc for 3s on 16 size blocks: 6292596 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 2255997 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 634712 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 163782 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 20665 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 16384 size blocks: 10315 aes-128-cbc's in 3.00s
OpenSSL 1.1.1w 11 Sep 2023
built on: Wed Sep 13 19:21:33 2023 UTC
options:bn(64,32) rc4(char) des(long) aes(partial) blowfish(ptr)
compiler: gcc -fPIC -pthread -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -f file-prefix-map=/build/openssl-bafRra/openssl-1.1.1w=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_ CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -D SHA512_ASM -DKECCAK1600_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DNDEBUG -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 1 6384 bytes
aes-128-cbc 33560.51k 48127.94k 54162.09k 55904.26k 56429.23k 56333.65k


Edit 1:
Laitoin ZeroTierin myös kännykkään. En laittanut päälle Enable Default Route, jotta ainoastaan verkkoihin 10.147.18.0/24, 192.168.10.0/24 ja 192.168.1.0/24 menevä liikenne käyttää VPN:ää.

Kännykkäsovellus.PNG


Sellainen vastoinkäyminen tuli, että TP-LINK Deco X50-4G:n asetuksissa ei voi määrittää lainkaan staattisia reittejä, joten sen kanssa en saa tätä VPN:ää toimimaan.
 
Viimeksi muokattu:

Statistiikka

Viestiketjuista
258 389
Viestejä
4 489 658
Jäsenet
74 150
Uusin jäsen
JM11

Hinta.fi

Back
Ylös Bottom