1 (edytowany przez Cezary 2023-07-15 12:06:54)

Temat: Wydajność serwerów OpenVPN i WireGuard

Wydajność serwerów OpenVPN i WireGuard

Wracam z formułą "projekt na sobotę". W wątku o ZTE MF286D pojawiło się kilka postów dotyczących różnic pomiędzy OpenVPN i WireGuard, padła tam też propozycja zrobienia porównania wydajności obu VPNów na routerze. Ponieważ nie chcę sobie psuć swoich konfiguracji to do swojego centrum technologicznego (czytaj: na biurko) zabrałem Xiaomi AX3600 które gości u mnie już od kilku ładnych dni i służy obecnie do robienia różnych testów. Jest sobota, grzeje niemiłosiernie, więc zmarnujmy ten czas sensownie i sprawdźmy jak się zachowują poszczególne VPNy.
Dla osób które nie są zaznajomione ze wspomnianym sprzętem Xiaomi przedstawiam jego szybką specyfikację sprzętową:
- SoC Qualcomm IPQ8071A, 4 rdzenie taktowane po 1.4GHz. Fajne i szybkie
- 256 MB pamięci flash
- 512 MB pamięci RAM
- radio klasy AX, ale ono zostało wyłączone bo nie jest potrzebne
- cztery porty RJ45 100/1000Mbps, które będą tu miały znaczenie

Jak na laboratorium (biurko) przystało, robimy pewne założenia. Na Xiaomi zainstalowałem swój obraz LuCI OpenWrt 23.05, doinstalowałem pakiety iperf3 oraz openvpn-openssl (wireguard już jest w obrazie). Zrobię konfigurację (jako serwerów) obu VPNów, a następnie podłączę się skonfigurowanym klientem i sprawdzę ile ten potężny router jest w stanie przerzuć ruchu przez łącze vpn w jedną i drugą stronę. Od razu zaznaczam że nie bawię się w jakiś większy tuning - ot, po prostu robię serwer i klienta wg poradników o których wspomnę później, uruchamiam iperfa i sprawdzę co on powie. Testy będą też robione w obrębie sieci LAN żeby wyeliminować skutki słabego czy obciążonego łącza WAN.

Jak klient - mój laptop Lenovo, na którym m.in robię kompilację obrazów OpenWrt. Ma procesor AMD Ryzen 7 4800H oraz kartę sieciową 1Gbps którą z łatwością wysyca, więc on nie będzie stanowił wąskiego gardła. Na laptopie mam linuksa - Ubuntu 23.04.

Konfiguracja

Na AX3600, jak już wspomniałem, zainstalowałem obraz LuCI OpenWrt 23.05, zostawiony domyślnie tak jak jest, wifi wyłączone, doinstalowane wspomniane pakiety. Na lan jest sieć o adresacji 192.168.1.1/24. Do lanu kablem ethernetowym dołączony laptop, adres uzyskał z DHCP. Ot, zwykła domyślna konfiguracja.

Na Xiaomi mam zainstalowane:
- openvpn w wersji 2.5.8-3
- wiregaurd w wersji 1.0.20210914-2

Na laptopie mam zainstalowane:
- openvpn w wersji 2.6.1
- wiregaurd w wersji 1.0.20210914-1ubuntu3

Oba serwery będą na UDP, z inną adresacją i innych portach, zainstalowane, skonfigurowane i uruchomione na tym samym routerze. Testy będę wykonywał naprzemienne, podłączony do jednego serwera vpn, test, odłączony od niego, podłączony do drugiego serwera vpn, test, odłączony.

Testy sieci

Na początek sprawdźmy wydajność samej sieci LAN. Na Xiaomi uruchomiony serwer iperfa:

root@OpenWrt:~# iperf3 -s -D

Na laptopie zaś klient

cezary@lenovo:~$ iperf3 -c 192.168.1.1
Connecting to host 192.168.1.1, port 5201
[  5] local 192.168.1.229 port 46240 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   114 MBytes   956 Mbits/sec    0    300 KBytes       
[  5]   1.00-2.00   sec   112 MBytes   937 Mbits/sec    0    300 KBytes       
[  5]   2.00-3.00   sec   112 MBytes   942 Mbits/sec    0    300 KBytes       
[  5]   3.00-4.00   sec   113 MBytes   945 Mbits/sec    0    416 KBytes       
[  5]   4.00-5.00   sec   113 MBytes   946 Mbits/sec    0    416 KBytes       
[  5]   5.00-6.00   sec   113 MBytes   952 Mbits/sec    0    847 KBytes       
[  5]   6.00-7.00   sec   111 MBytes   933 Mbits/sec    0   1.10 MBytes       
[  5]   7.00-8.00   sec   112 MBytes   944 Mbits/sec    0   1.10 MBytes       
[  5]   8.00-9.00   sec   112 MBytes   944 Mbits/sec    0   1.10 MBytes       
[  5]   9.00-10.00  sec   112 MBytes   944 Mbits/sec    0   1.10 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   944 Mbits/sec    0             sender
[  5]   0.00-10.01  sec  1.10 GBytes   941 Mbits/sec                  receiver

iperf Done.

Dostałem 940Mbps, co odpowiada przepustowości kabla gigabitowego. Na wszelki wypadek test odwrotny - na laptopie serwer iperfa, na Xiaomi zaś klient:

root@OpenWrt:~# iperf3 -c 192.168.1.229
Connecting to host 192.168.1.229, port 5201
[  5] local 192.168.1.1 port 56806 connected to 192.168.1.229 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   114 MBytes   957 Mbits/sec    0    431 KBytes       
[  5]   1.00-2.00   sec   112 MBytes   943 Mbits/sec    0    471 KBytes       
[  5]   2.00-3.00   sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
[  5]   3.00-4.00   sec   112 MBytes   943 Mbits/sec    0    471 KBytes       
[  5]   4.00-5.00   sec   112 MBytes   941 Mbits/sec    0    471 KBytes       
[  5]   5.00-6.00   sec   111 MBytes   936 Mbits/sec    0    471 KBytes       
[  5]   6.00-7.00   sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
[  5]   7.00-8.00   sec   112 MBytes   941 Mbits/sec    0    471 KBytes       
[  5]   8.00-9.00   sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
[  5]   9.00-10.00  sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   943 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.10 GBytes   941 Mbits/sec                  receiver

iperf Done.

Czyli praktycznie wysyca się gigabit w obie strony. Test był prosty, miał za zadnie wprowadzenie punktu odniesienia jakim jest czysta sieć LAN.

OpenVPN

Serwer został skonfigurowany na podstawie poradnika OpenWrt - konfiguracja serwera OpenVPN w trybie TUN, w podstawowej jego wersji - konfiguracja obejmowała tylko zestawienie łącza pomiędzy urządzeniami. Wynikowa konfiguracja wyglądała tak:

config openvpn 'home'
    option enabled '1'
    option dev 'tun0'
    option port '1194'
    option proto 'udp'
    option log '/tmp/openvpn.log'
    option verb '3'
    option ca '/etc/openvpn/ca.crt'
    option cert '/etc/openvpn/serwer.crt'
    option key '/etc/openvpn/serwer.key'
    option server '10.8.0.0 255.255.255.0'
    option topology 'subnet'
    option dh '/etc/openvpn/dh.pem'

Nic nadzwyczajnego, zwykły serwer. Po skonfigurowaniu i uruchomieniu klienta zweryfikowałem czy jest połączenie (ping przechodził do 10.8.0.1), upewniłem się że jest trasa do serwera:

cezary@lenovo:~$ ip r | grep tun0
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 

Sprawdzamy więc tunel. Tak samo jak poprzednio - na Xiaomi uruchomiony serwer iperf3, na laptopie klient:

cezary@lenovo:~$ iperf3 -c 10.8.0.1
Connecting to host 10.8.0.1, port 5201
[  5] local 10.8.0.2 port 42356 connected to 10.8.0.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  17.0 MBytes   142 Mbits/sec    9    120 KBytes       
[  5]   1.00-2.00   sec  20.9 MBytes   175 Mbits/sec    0    211 KBytes       
[  5]   2.00-3.00   sec  20.6 MBytes   173 Mbits/sec    0    273 KBytes       
[  5]   3.00-4.00   sec  20.5 MBytes   172 Mbits/sec    0    321 KBytes       
[  5]   4.00-5.00   sec  20.8 MBytes   175 Mbits/sec    0    364 KBytes       
[  5]   5.00-6.00   sec  20.2 MBytes   169 Mbits/sec    0    403 KBytes       
[  5]   6.00-7.00   sec  20.7 MBytes   174 Mbits/sec    0    437 KBytes       
[  5]   7.00-8.00   sec  19.6 MBytes   165 Mbits/sec   78    356 KBytes       
[  5]   8.00-9.00   sec  19.0 MBytes   159 Mbits/sec    0    397 KBytes       
[  5]   9.00-10.00  sec  19.2 MBytes   161 Mbits/sec    0    422 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   198 MBytes   166 Mbits/sec   87             sender
[  5]   0.00-10.00  sec   197 MBytes   166 Mbits/sec                  receiver

iperf Done.

Wyszło 166Mbps, czyli tylko 17.5% możliwości łącza. Sprawdzam jeszcze ruch w drugą stronę:

root@OpenWrt:~# iperf3 -c 10.8.0.2
Connecting to host 10.8.0.2, port 5201
[  5] local 10.8.0.1 port 33418 connected to 10.8.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  19.3 MBytes   162 Mbits/sec   27    489 KBytes       
[  5]   1.00-2.00   sec  18.5 MBytes   155 Mbits/sec    0    559 KBytes       
[  5]   2.00-3.00   sec  18.3 MBytes   154 Mbits/sec    0    609 KBytes       
[  5]   3.00-4.00   sec  18.3 MBytes   153 Mbits/sec    0    643 KBytes       
[  5]   4.00-5.00   sec  17.8 MBytes   149 Mbits/sec    1    490 KBytes       
[  5]   5.00-6.00   sec  18.3 MBytes   153 Mbits/sec    0    519 KBytes       
[  5]   6.00-7.00   sec  18.3 MBytes   153 Mbits/sec    0    536 KBytes       
[  5]   7.00-8.00   sec  18.4 MBytes   154 Mbits/sec    0    549 KBytes       
[  5]   8.00-9.00   sec  18.3 MBytes   153 Mbits/sec    0    574 KBytes       
[  5]   9.00-10.00  sec  18.4 MBytes   154 Mbits/sec    0    595 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   184 MBytes   154 Mbits/sec   28             sender
[  5]   0.00-10.03  sec   183 MBytes   153 Mbits/sec                  receiver

iperf Done.

I też nie jest za bogato - tylko 154Mbps.

WireGuard

Serwer został skonfigurowany na podstawie poradnika OpenWrt - WireGuard, w takich samych założeniach jak powyżej - w podstawowej jego wersji pozwalającej na wykonanie połączenia pomiędzy urządzeniami:

config interface 'wg0'
    option proto 'wireguard'
    option private_key 'QIOo7tw1xpG6YcXxDM1XtHiIn1XXXXXXXX'
    option listen_port '55055'
    list addresses '10.9.0.1/24'

config wireguard_wg0
    option route_allowed_ips '1'
    list allowed_ips '10.9.0.2/32'
    option persistent_keepalive '25'
    option public_key '5ysmFgWREAb2Ff3zz25uNu4vX5mhXXXXXXXX'

Weryfikuje istnienie połączenia i trasy:

cezary@lenovo:~$ ip r | grep wg0
10.9.0.1 dev wg0 scope link 

Procedura ta sama - na Xiaomi uruchomiony serwer iperf3, na laptopie klient:

cezary@lenovo:~$ iperf3 -c 10.9.0.1
Connecting to host 10.9.0.1, port 5201
[  5] local 10.9.0.2 port 38042 connected to 10.9.0.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  89.4 MBytes   750 Mbits/sec    0    446 KBytes       
[  5]   1.00-2.00   sec  89.8 MBytes   753 Mbits/sec    0    446 KBytes       
[  5]   2.00-3.00   sec  90.1 MBytes   756 Mbits/sec    0    446 KBytes       
[  5]   3.00-4.00   sec  89.9 MBytes   754 Mbits/sec    0    446 KBytes       
[  5]   4.00-5.00   sec  90.3 MBytes   757 Mbits/sec    0    446 KBytes       
[  5]   5.00-6.00   sec  89.5 MBytes   751 Mbits/sec    0    468 KBytes       
[  5]   6.00-7.00   sec  90.2 MBytes   757 Mbits/sec    0    468 KBytes       
[  5]   7.00-8.00   sec  90.1 MBytes   756 Mbits/sec    0    468 KBytes       
[  5]   8.00-9.00   sec  87.6 MBytes   735 Mbits/sec    0    497 KBytes       
[  5]   9.00-10.00  sec  76.6 MBytes   642 Mbits/sec    0    520 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   884 MBytes   741 Mbits/sec    0             sender
[  5]   0.00-10.01  sec   882 MBytes   739 Mbits/sec                  receiver

iperf Done.

I mamy 740Mbps. Został ostatni test w drugą stronę:

root@OpenWrt:~# iperf3 -c 10.9.0.2
Connecting to host 10.9.0.2, port 5201
[  5] local 10.9.0.1 port 47172 connected to 10.9.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  88.0 MBytes   738 Mbits/sec    0    456 KBytes       
[  5]   1.00-2.00   sec  89.5 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   2.00-3.00   sec  89.4 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   3.00-4.00   sec  90.0 MBytes   755 Mbits/sec    0    456 KBytes       
[  5]   4.00-5.00   sec  89.5 MBytes   751 Mbits/sec    0    456 KBytes       
[  5]   5.00-6.00   sec  89.5 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   6.00-7.00   sec  89.4 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   7.00-8.00   sec  89.4 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   8.00-9.00   sec  88.8 MBytes   745 Mbits/sec    0    456 KBytes       
[  5]   9.00-10.00  sec  90.0 MBytes   755 Mbits/sec    0    456 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   893 MBytes   749 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   892 MBytes   749 Mbits/sec                  receiver
iperf Done.

Podsumowując:
- zwykłe łącze: 944Mbps / 943Mbps
- OpenVpn: 166Mbps / 154Mbps
- WireGaurd 741Mbps  / 749Mbps


Wireaguard jest szybszy, choć oczywiście należy pamiętać że na ogólną wydajność serwera VPN może może wpływać wydajność i obciążenie samego routera oraz szybkość łącza na którym stoi serwer. No i należy pamiętać że jeżeli ktoś ma łącze niesymetryczne, np. 500/50 to wąskim gardłem będzie to 50Mbps uploadu, którego nie przeskoczymy.

Od kliku wydań kernela linuksowego dostępny jest moduł kernelowy dla OpenVPN - DCO (OpenVPN Data Channel Offload aka OVPN-DCO), o którym można poczytać tutaj. Jak nazwa wskazuje moduł ma za zadanie odciążyć OpenVPN i realizować niektóre rzeczy na poziomie kernela, co ma skutkować sporym przyśpieszeniem działania OpenVPN. Ale... DCO współpracuje z OpenVPN od wersji 2.6 a w OpenWrt mamy wersję 2.5.8 (nawet w wersji rozwojowej), więc na wykorzystanie DCO przyjdzie nam chwilę poczekać.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

2 (edytowany przez PiotrekK 2023-07-15 10:38:28)

Odp: Wydajność serwerów OpenVPN i WireGuard

Domyślam się, że jeżeli ograniczymy prędkość karty PC do 100Mb, lub wstawimy tam "w kabel" switch 100Mb, to ich wydajność się zrówna. Podobnie będzie jeżeli wykorzystamy WiFi 802.11a,b,g zamiast kabla.
Jest to pewnie przypadek realny i praktyczny, dotyczący większości domowych użytkowników z wolniejszymi niż 150Mb (czyli wolniejszymi od maksymalnej prędkości OVPN) łączami WAN (np. LTE)  pracującymi po WiFi.

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

3

Odp: Wydajność serwerów OpenVPN i WireGuard

Tak, wtedy znaczenie będzie miała przepustowość interfjesu a nie samej maszyny. Dla przykładu w/w konfiguracja tylko pomiędzy wstawiłem switch 100Mbps.

$ iperf3 -c 10.8.0.1
Connecting to host 10.8.0.1, port 5201
[  5] local 10.8.0.2 port 60272 connected to 10.8.0.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  12.6 MBytes   105 Mbits/sec    0    581 KBytes       
[  5]   1.00-2.00   sec  10.9 MBytes  91.7 Mbits/sec   29    570 KBytes       
[  5]   2.00-3.00   sec  11.2 MBytes  94.3 Mbits/sec    0    638 KBytes       
[  5]   3.00-4.00   sec  10.4 MBytes  87.0 Mbits/sec    0    685 KBytes       
[  5]   4.00-5.00   sec  10.4 MBytes  87.5 Mbits/sec    2    501 KBytes       
[  5]   5.00-6.00   sec  11.2 MBytes  94.3 Mbits/sec    0    545 KBytes       
[  5]   6.00-7.00   sec  10.4 MBytes  87.0 Mbits/sec    0    576 KBytes       
[  5]   7.00-8.00   sec  11.2 MBytes  94.3 Mbits/sec    0    594 KBytes       
[  5]   8.00-9.00   sec  10.4 MBytes  87.0 Mbits/sec    0    602 KBytes       
[  5]   9.00-10.00  sec  11.2 MBytes  94.3 Mbits/sec    0    605 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   110 MBytes  92.3 Mbits/sec   31             sender
[  5]   0.00-10.05  sec   108 MBytes  90.5 Mbits/sec                  receiver

iperf Done.
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

4 (edytowany przez PiotrekK 2023-07-15 11:26:20)

Odp: Wydajność serwerów OpenVPN i WireGuard

Jednym słowem, można mieć w garażu Lamborghini i BMW, a ograniczenia na polskich drogach i tak spowodują, że do celu dojadą prawie w tym samym czasie.
Czyli wybór pomiędzy 5 razy szybszym WG a OVPN to dla większości użytkowników wolniejszych łączy, raczej kwestia gustu.

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

5

Odp: Wydajność serwerów OpenVPN i WireGuard

Tak, aczkolwiek wiesz że te czerwone są szybsze spod świateł. No i chodzi sam komfort użytkowania - możesz używać kaszlaka który z ledwością się trzyma drogi, a możesz też to robić w wygodzie i komforcie wiedząc że w razie czego masz zapas mocy.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

6 (edytowany przez PiotrekK 2023-07-15 11:50:33)

Odp: Wydajność serwerów OpenVPN i WireGuard

o tak -:)

Ale jak już pisałeś, wyścig zbrojeń trwa i pewnie za jakiś czas podrasują tego kaszlaka (OVPN).
...Niecierpliwie czekam na testy po zmianach.

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

7 (edytowany przez wisipior 2023-07-15 12:00:10)

Odp: Wydajność serwerów OpenVPN i WireGuard

@Cezary
Również poszukuję szybkiego VPN, ale poległem na zestawieniu WG poprzez GUI na MiFi. Czy mogłbyś defacto podrzucić jeszcze swój config na kliencie ?

8 (edytowany przez Cezary 2023-07-15 12:06:23)

Odp: Wydajność serwerów OpenVPN i WireGuard

Cezary napisał/a:
Wydajność serwerów OpenVPN i WireGuard

Wracam z formułą "projekt na sobotę". W wątku o ZTE MF286D pojawiło się kilka postów dotyczących różnic pomiędzy OpenVPN i WireGuard, padła tam też propozycja zrobienia porównania wydajności obu VPNów na routerze. Ponieważ nie chcę sobie psuć swoich konfiguracji to do swojego centrum technologicznego (czytaj: na biurko) zabrałem Xiaomi AX3600 które gości u mnie już od kilku ładnych dni i służy obecnie do robienia różnych testów. Jest sobota, grzeje niemiłosiernie, więc zmarnujmy ten czas sensownie i sprawdźmy jak się zachowują poszczególne VPNy.
Dla osób które nie są zaznajomione ze wspomnianym sprzętem Xiaomi przedstawiam jego szybką specyfikację sprzętową:
- SoC Qualcomm IPQ8071A, 4 rdzenie taktowane po 1.4GHz. Fajne i szybkie
- 256 MB pamięci flash
- 512 MB pamięci RAM
- radio klasy AX, ale ono zostało wyłączone bo nie jest potrzebne
- cztery porty RJ45 100/1000Mbps, które będą tu miały znaczenie

Jak na laboratorium (biurko) przystało, robimy pewne założenia. Na Xiaomi zainstalowałem swój obraz LuCI OpenWrt 23.05, doinstalowałem pakiety iperf3 oraz openvpn-openssl (wireguard już jest w obrazie). Zrobię konfigurację (jako serwerów) obu VPNów, a następnie podłączę się skonfigurowanym klientem i sprawdzę ile ten potężny router jest w stanie przerzuć ruchu przez łącze vpn w jedną i drugą stronę. Od razu zaznaczam że nie bawię się w jakiś większy tuning - ot, po prostu robię serwer i klienta wg poradników o których wspomnę później, uruchamiam iperfa i sprawdzę co on powie. Testy będą też robione w obrębie sieci LAN żeby wyeliminować skutki słabego czy obciążonego łącza WAN.

Jak klient - mój laptop Lenovo, na którym m.in robię kompilację obrazów OpenWrt. Ma procesor AMD Ryzen 7 4800H oraz kartę sieciową 1Gbps którą z łatwością wysyca, więc on nie będzie stanowił wąskiego gardła. Na laptopie mam linuksa - Ubuntu 23.04.

Konfiguracja

Na AX3600, jak już wspomniałem, zainstalowałem obraz LuCI OpenWrt 23.05, zostawiony domyślnie tak jak jest, wifi wyłączone, doinstalowane wspomniane pakiety. Na lan jest sieć o adresacji 192.168.1.1/24. Do lanu kablem ethernetowym dołączony laptop, adres uzyskał z DHCP. Ot, zwykła domyślna konfiguracja.

Na Xiaomi mam zainstalowane:
- openvpn w wersji 2.5.8-3
- wiregaurd w wersji 1.0.20210914-2

Na laptopie mam zainstalowane:
- openvpn w wersji 2.6.1
- wiregaurd w wersji 1.0.20210914-1ubuntu3

Oba serwery będą na UDP, z inną adresacją i innych portach, zainstalowane, skonfigurowane i uruchomione na tym samym routerze. Testy będę wykonywał naprzemienne, podłączony do jednego serwera vpn, test, odłączony od niego, podłączony do drugiego serwera vpn, test, odłączony.

Testy sieci

Na początek sprawdźmy wydajność samej sieci LAN. Na Xiaomi uruchomiony serwer iperfa:

root@OpenWrt:~# iperf3 -s -D

Na laptopie zaś klient

cezary@lenovo:~$ iperf3 -c 192.168.1.1
Connecting to host 192.168.1.1, port 5201
[  5] local 192.168.1.229 port 46240 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   114 MBytes   956 Mbits/sec    0    300 KBytes       
[  5]   1.00-2.00   sec   112 MBytes   937 Mbits/sec    0    300 KBytes       
[  5]   2.00-3.00   sec   112 MBytes   942 Mbits/sec    0    300 KBytes       
[  5]   3.00-4.00   sec   113 MBytes   945 Mbits/sec    0    416 KBytes       
[  5]   4.00-5.00   sec   113 MBytes   946 Mbits/sec    0    416 KBytes       
[  5]   5.00-6.00   sec   113 MBytes   952 Mbits/sec    0    847 KBytes       
[  5]   6.00-7.00   sec   111 MBytes   933 Mbits/sec    0   1.10 MBytes       
[  5]   7.00-8.00   sec   112 MBytes   944 Mbits/sec    0   1.10 MBytes       
[  5]   8.00-9.00   sec   112 MBytes   944 Mbits/sec    0   1.10 MBytes       
[  5]   9.00-10.00  sec   112 MBytes   944 Mbits/sec    0   1.10 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   944 Mbits/sec    0             sender
[  5]   0.00-10.01  sec  1.10 GBytes   941 Mbits/sec                  receiver

iperf Done.

Dostałem 940Mbps, co odpowiada przepustowości kabla gigabitowego. Na wszelki wypadek test odwrotny - na laptopie serwer iperfa, na Xiaomi zaś klient:

root@OpenWrt:~# iperf3 -c 192.168.1.229
Connecting to host 192.168.1.229, port 5201
[  5] local 192.168.1.1 port 56806 connected to 192.168.1.229 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   114 MBytes   957 Mbits/sec    0    431 KBytes       
[  5]   1.00-2.00   sec   112 MBytes   943 Mbits/sec    0    471 KBytes       
[  5]   2.00-3.00   sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
[  5]   3.00-4.00   sec   112 MBytes   943 Mbits/sec    0    471 KBytes       
[  5]   4.00-5.00   sec   112 MBytes   941 Mbits/sec    0    471 KBytes       
[  5]   5.00-6.00   sec   111 MBytes   936 Mbits/sec    0    471 KBytes       
[  5]   6.00-7.00   sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
[  5]   7.00-8.00   sec   112 MBytes   941 Mbits/sec    0    471 KBytes       
[  5]   8.00-9.00   sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
[  5]   9.00-10.00  sec   112 MBytes   944 Mbits/sec    0    471 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   943 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.10 GBytes   941 Mbits/sec                  receiver

iperf Done.

Czyli praktycznie wysyca się gigabit w obie strony. Test był prosty, miał za zadnie wprowadzenie punktu odniesienia jakim jest czysta sieć LAN.

OpenVPN

Serwer został skonfigurowany na podstawie poradnika OpenWrt - konfiguracja serwera OpenVPN w trybie TUN, w podstawowej jego wersji - konfiguracja obejmowała tylko zestawienie łącza pomiędzy urządzeniami. Wynikowa konfiguracja wyglądała tak:

config openvpn 'home'
    option enabled '1'
    option dev 'tun0'
    option port '1194'
    option proto 'udp'
    option log '/tmp/openvpn.log'
    option verb '3'
    option ca '/etc/openvpn/ca.crt'
    option cert '/etc/openvpn/serwer.crt'
    option key '/etc/openvpn/serwer.key'
    option server '10.8.0.0 255.255.255.0'
    option topology 'subnet'
    option dh '/etc/openvpn/dh.pem'

Nic nadzwyczajnego, zwykły serwer. Po skonfigurowaniu i uruchomieniu klienta zweryfikowałem czy jest połączenie (ping przechodził do 10.8.0.1), upewniłem się że jest trasa do serwera:

cezary@lenovo:~$ ip r | grep tun0
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 

Sprawdzamy więc tunel. Tak samo jak poprzednio - na Xiaomi uruchomiony serwer iperf3, na laptopie klient:

cezary@lenovo:~$ iperf3 -c 10.8.0.1
Connecting to host 10.8.0.1, port 5201
[  5] local 10.8.0.2 port 42356 connected to 10.8.0.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  17.0 MBytes   142 Mbits/sec    9    120 KBytes       
[  5]   1.00-2.00   sec  20.9 MBytes   175 Mbits/sec    0    211 KBytes       
[  5]   2.00-3.00   sec  20.6 MBytes   173 Mbits/sec    0    273 KBytes       
[  5]   3.00-4.00   sec  20.5 MBytes   172 Mbits/sec    0    321 KBytes       
[  5]   4.00-5.00   sec  20.8 MBytes   175 Mbits/sec    0    364 KBytes       
[  5]   5.00-6.00   sec  20.2 MBytes   169 Mbits/sec    0    403 KBytes       
[  5]   6.00-7.00   sec  20.7 MBytes   174 Mbits/sec    0    437 KBytes       
[  5]   7.00-8.00   sec  19.6 MBytes   165 Mbits/sec   78    356 KBytes       
[  5]   8.00-9.00   sec  19.0 MBytes   159 Mbits/sec    0    397 KBytes       
[  5]   9.00-10.00  sec  19.2 MBytes   161 Mbits/sec    0    422 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   198 MBytes   166 Mbits/sec   87             sender
[  5]   0.00-10.00  sec   197 MBytes   166 Mbits/sec                  receiver

iperf Done.

Wyszło 166Mbps, czyli tylko 17.5% możliwości łącza. Sprawdzam jeszcze ruch w drugą stronę:

root@OpenWrt:~# iperf3 -c 10.8.0.2
Connecting to host 10.8.0.2, port 5201
[  5] local 10.8.0.1 port 33418 connected to 10.8.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  19.3 MBytes   162 Mbits/sec   27    489 KBytes       
[  5]   1.00-2.00   sec  18.5 MBytes   155 Mbits/sec    0    559 KBytes       
[  5]   2.00-3.00   sec  18.3 MBytes   154 Mbits/sec    0    609 KBytes       
[  5]   3.00-4.00   sec  18.3 MBytes   153 Mbits/sec    0    643 KBytes       
[  5]   4.00-5.00   sec  17.8 MBytes   149 Mbits/sec    1    490 KBytes       
[  5]   5.00-6.00   sec  18.3 MBytes   153 Mbits/sec    0    519 KBytes       
[  5]   6.00-7.00   sec  18.3 MBytes   153 Mbits/sec    0    536 KBytes       
[  5]   7.00-8.00   sec  18.4 MBytes   154 Mbits/sec    0    549 KBytes       
[  5]   8.00-9.00   sec  18.3 MBytes   153 Mbits/sec    0    574 KBytes       
[  5]   9.00-10.00  sec  18.4 MBytes   154 Mbits/sec    0    595 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   184 MBytes   154 Mbits/sec   28             sender
[  5]   0.00-10.03  sec   183 MBytes   153 Mbits/sec                  receiver

iperf Done.

I też nie jest za bogato - tylko 154Mbps.

WireGuard

Serwer został skonfigurowany na podstawie poradnika OpenWrt - WireGuard, w takich samych założeniach jak powyżej - w podstawowej jego wersji pozwalającej na wykonanie połączenia pomiędzy urządzeniami:

config interface 'wg0'
    option proto 'wireguard'
    option private_key 'QIOo7tw1xpG6YcXxDM1XtHiIn1XXXXXXXX'
    option listen_port '55055'
    list addresses '10.9.0.1/24'

config wireguard_wg0
    option route_allowed_ips '1'
    list allowed_ips '10.9.0.2/32'
    option persistent_keepalive '25'
    option public_key '5ysmFgWREAb2Ff3zz25uNu4vX5mhXXXXXXXX'

Weryfikuje istnienie połączenia i trasy:

cezary@lenovo:~$ ip r | grep wg0
10.9.0.1 dev wg0 scope link 

Procedura ta sama - na Xiaomi uruchomiony serwer iperf3, na laptopie klient:

cezary@lenovo:~$ iperf3 -c 10.9.0.1
Connecting to host 10.9.0.1, port 5201
[  5] local 10.9.0.2 port 38042 connected to 10.9.0.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  89.4 MBytes   750 Mbits/sec    0    446 KBytes       
[  5]   1.00-2.00   sec  89.8 MBytes   753 Mbits/sec    0    446 KBytes       
[  5]   2.00-3.00   sec  90.1 MBytes   756 Mbits/sec    0    446 KBytes       
[  5]   3.00-4.00   sec  89.9 MBytes   754 Mbits/sec    0    446 KBytes       
[  5]   4.00-5.00   sec  90.3 MBytes   757 Mbits/sec    0    446 KBytes       
[  5]   5.00-6.00   sec  89.5 MBytes   751 Mbits/sec    0    468 KBytes       
[  5]   6.00-7.00   sec  90.2 MBytes   757 Mbits/sec    0    468 KBytes       
[  5]   7.00-8.00   sec  90.1 MBytes   756 Mbits/sec    0    468 KBytes       
[  5]   8.00-9.00   sec  87.6 MBytes   735 Mbits/sec    0    497 KBytes       
[  5]   9.00-10.00  sec  76.6 MBytes   642 Mbits/sec    0    520 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   884 MBytes   741 Mbits/sec    0             sender
[  5]   0.00-10.01  sec   882 MBytes   739 Mbits/sec                  receiver

iperf Done.

I mamy 740Mbps. Został ostatni test w drugą stronę:

root@OpenWrt:~# iperf3 -c 10.9.0.2
Connecting to host 10.9.0.2, port 5201
[  5] local 10.9.0.1 port 47172 connected to 10.9.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  88.0 MBytes   738 Mbits/sec    0    456 KBytes       
[  5]   1.00-2.00   sec  89.5 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   2.00-3.00   sec  89.4 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   3.00-4.00   sec  90.0 MBytes   755 Mbits/sec    0    456 KBytes       
[  5]   4.00-5.00   sec  89.5 MBytes   751 Mbits/sec    0    456 KBytes       
[  5]   5.00-6.00   sec  89.5 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   6.00-7.00   sec  89.4 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   7.00-8.00   sec  89.4 MBytes   750 Mbits/sec    0    456 KBytes       
[  5]   8.00-9.00   sec  88.8 MBytes   745 Mbits/sec    0    456 KBytes       
[  5]   9.00-10.00  sec  90.0 MBytes   755 Mbits/sec    0    456 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   893 MBytes   749 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   892 MBytes   749 Mbits/sec                  receiver
iperf Done.

Podsumowując:
- zwykłe łącze: 944Mbps / 943Mbps
- OpenVpn: 166Mbps / 154Mbps
- WireGaurd 741Mbps  / 749Mbps


Wireaguard jest szybszy, choć oczywiście należy pamiętać że na ogólną wydajność serwera VPN może może wpływać wydajność i obciążenie samego routera oraz szybkość łącza na którym stoi serwer. No i należy pamiętać że jeżeli ktoś ma łącze niesymetryczne, np. 500/50 to wąskim gardłem będzie to 50Mbps uploadu, którego nie przeskoczymy.

Od kliku wydań kernela linuksowego dostępny jest moduł kernelowy dla OpenVPN - DCO (OpenVPN Data Channel Offload aka OVPN-DCO), o którym można poczytać tutaj. Jak nazwa wskazuje moduł ma za zadanie odciążyć OpenVPN i realizować niektóre rzeczy na poziomie kernela, co ma skutkować sporym przyśpieszeniem działania OpenVPN. Ale... DCO współpracuje z OpenVPN od wersji 2.6 a w OpenWrt mamy wersję 2.5.8 (nawet w wersji rozwojowej), więc na wykorzystanie DCO przyjdzie nam chwilę poczekać.

dlaczego w openwrt jest taka stara wersja openvpn? w pfsense 2.7 jest  2.6.4.

Dom : router https://i.imgur.com/IuB6Zwy.png | TP-LINK T1700G-28TQ |Zyxel XGS-1210-12 | Dynalink WRX-36 | wax50 pro | rb hex poe gbit sfp | XPenology | kilka kamer reolink 5MP i jakieś tam jeszcze ustrojstwa połączone światłowodami, skrętką i wifi ,  apc smart ups 750 lcd smile
Podróżne : GL.Inet MT3000  zyxel nsa325 +6TB @ openwrt
http://tinyurl.com/bufferbloattest

9

Odp: Wydajność serwerów OpenVPN i WireGuard

Nie pamiętam zbytnio żeby ktoś na forum czy issue lamentował na nową wersję, więc nie wiem czemu nie została podbita. 2.5.8 jest z listopada 2022, od tego czasu doszło już do 2.6.5.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10 (edytowany przez PiotrekK 2023-07-15 12:21:56)

Odp: Wydajność serwerów OpenVPN i WireGuard

wisipior napisał/a:

@Cezary
Również poszukuję szybkiego VPN, ale poległem na zestawieniu WG poprzez GUI na MiFi. Czy mogłbyś defacto podrzucić jeszcze swój config na kliencie ?

Jeżeli mogę coś zasugerować, to GUI jest fajne ale nie zawsze pomaga w takich konfiguracjach.
Zrobiłem według https://eko.one.pl/?p=openwrt-wireguard i poszło od pierwszego strzała.

A pytanie pomocnicze, robisz VPN server na ruterze i klienta na... (Windows, Android?)

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

11

Odp: Wydajność serwerów OpenVPN i WireGuard

wisipior napisał/a:

@Cezary
Również poszukuję szybkiego VPN, ale poległem na zestawieniu WG poprzez GUI na MiFi. Czy mogłbyś defacto podrzucić jeszcze swój config na kliencie ?

Czemu poległeś?
Konfig klienta wg dla ubunciaka jest taki:

[Interface]
PrivateKey = 6MQoZAkjUXbeKcAGP+bSsXXXXXXXX
Address = 10.9.0.2/32

[Peer]
PublicKey = 8OdrJ7oDs1x/B1f6ePCT7A2NXXXXX
AllowedIPs = 10.9.0.1/32
Endpoint = 192.168.1.1:55055

Ale w openwrt (mifi) konfig robisz normalnie przez uci a nie czystym plikiem.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12

Odp: Wydajność serwerów OpenVPN i WireGuard

PiotrekK napisał/a:

Czyli wybór pomiędzy 5 razy szybszym WG a OVPN to dla większości użytkowników wolniejszych łączy, raczej kwestia gustu

Nie, na routerach z OpenWRT ludzie mają uruchomione różne usługi/nawet przy słabym łączu OpenVPN wykorzysta zasoby wydajności routera, a WG nie i przy tym pierwszym sprzęt się "powiesi"...

13 (edytowany przez PiotrekK 2023-07-15 17:35:33)

Odp: Wydajność serwerów OpenVPN i WireGuard

Ważny aspekt. Dzięki. A mógłbyś to przełożyć na liczby? Można zmierzyć ile zasobów pożera WG a ile OPVN na OpenWRT?

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

14

Odp: Wydajność serwerów OpenVPN i WireGuard

OpenVPN jest jednowątkowy, zje jeden rdzeń na dzień dobry. Jeżeli nawet maszyna będzie miała 4 rdzenie to innych nie ruszy bo nie umie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

15 (edytowany przez PiotrekK 2023-07-15 18:52:38)

Odp: Wydajność serwerów OpenVPN i WireGuard

Obserwacje za pomocą luci-app-statistics na MF286D podczas testów obu VPN nie wykazują dużych różnic zużycia procesora, pamięci i obciążenia systemu.
Obserwacja przy uruchomionych obu serwerach, a testy Speedtest przy połączeniu raz WG a raz OVPN.
Obciążenie spoczynkowe systemu ok. 16%
Obciążenie rdzeni ok. 1%
Pamięci ok 47MB

Podczas testów:
Różnice procentowe na poziomie 0 dla pamięci.
Obciążenie systemu bez większej różnicy.
Procesor - różnice na jednym z rdzeni ok. 15% na niekorzyść OVPN
W żadnym momencie obciążenie rdzeni nie wzrosło powyżej 25%

Może warto zrobić jakieś bardziej powtarzalne i wymierne testy? Jeżeli Cezary masz pomysł...

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

16

Odp: Wydajność serwerów OpenVPN i WireGuard

Zrób sobie 1TB plik i go przeciągnij przez vpna. Zobaczysz w trakcie czy i ile obciąża system

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

17

Odp: Wydajność serwerów OpenVPN i WireGuard

Nie przestajesz mnie zaskakiwać. Podziwiam za całokształt.

TP-Link TL-WDR4300 Mod, CPU 700MHz, Flash 16 MB, Gargoyle 1.5.11.4, extroot + dysk zewnętrzny Samsung (S2), kamerka MS LifeCam HD-5000
TP-Link TL-WR1043ND Mod, RAM 64 MB, chłodzenie pasywne, Gargoyle 1.5.10.14, extroot, kamerka Logitech HD Webcam C270

18

Odp: Wydajność serwerów OpenVPN i WireGuard

Cezary napisał/a:

Zrób sobie 1TB plik i go przeciągnij przez vpna. Zobaczysz w trakcie czy i ile obciąża system

Niestety, 1TB nie przeciągnę przez LTE, a nie mam póki co wolnego zestawu do testów po LAN.
A znowu testy obciążenia rutera na ograniczonej prędkości WAN/LTE też nie mają sensu, podobnie jak z porównaniem prędkości. 
Nawet testy z transmisją z kamery IP + speedtest, czyli dosyć równe obciążenie, ale jednak małe, daje zbyt małe różnice w obciążeniu systemu, sprawdziłem.

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

19 (edytowany przez Cezary 2023-07-16 07:21:37)

Odp: Wydajność serwerów OpenVPN i WireGuard

Zrobiłem
- kompilację nowego openvpn 2.6.5
- zmieniłem opcję że wsparcie dla dco było kompilowane
- zainstalowałem w ubuntu openvpn-dco-dkms
- w logach ładnie przedstawił się że DCO device tun0 opened i Data Channel: cipher 'AES-256-GCM'
- później nawet cały obraz przekompilowałem

I co? Nic. Nadał nie przeskoczył 170Mbps. Mimo że twierdzi że chce używać dco to i tak słabo coś mu idzie. Na razie tyle testów, nie jest mi to to życia potrzebne więc nie drążę dalej tematu, ale z chęcią zobaczę jak to się rozwinie.

EDIT: zgodnie z zasadą "najpierw szukaj później rób", jak to wszystko już zrobiłem to znalazłem że ktoś PR zgłosił na to smile
https://github.com/openwrt/packages/pull/21547 Jego też użyłem i przekompilowałem całość i nadal mam kiepskie transfery.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

20

Odp: Wydajność serwerów OpenVPN i WireGuard

Ja wiem, że od strony testów to może być trudne, ale jak wyglądałoby to przy 4 klientach połączonych? Przy 8 OpenVPN teoretycznie zje cały rdzeń, a jak będzie z WG? Rozłoży ładnie obciążenie?

21

Odp: Wydajność serwerów OpenVPN i WireGuard

Czy bezpieczeństwo openvpn vs WireGuard jest porównywalne ?

22

Odp: Wydajność serwerów OpenVPN i WireGuard

Zdefiniuj "bezpieczeństwo" w kontekście jakim pytasz. Jeżeli chodzi o algorytmy szyfrujące to wiregaurd używa najnowszych. OpenVPN tych które mu podasz, więc od ciebie zależy czy będzie "bezpieczny".

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

23

Odp: Wydajność serwerów OpenVPN i WireGuard

Wczoraj zaktualizowali openvpn z wersji rozwojowej do aktualnej wersji, łącznie z DCO. Poczekam parę dni żeby przebudowały się pakiety i spróbuję zrobić identyczne testy openvpn na tej samej maszynce, ale już z DCO.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

24

Odp: Wydajność serwerów OpenVPN i WireGuard

Super wiadomość. Rozumiem, że tylko dla 23.05?

MF286D,  LuCI 23.05 r23893, Kernel 5.15.158

25

Odp: Wydajność serwerów OpenVPN i WireGuard

PiotrekK napisał/a:

Super wiadomość. Rozumiem, że tylko dla 23.05?

W wersji rozwojowej, nie dla 23.05.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.