NOPE LinkedIn

Catégories:
wireguard

Optimisation des performances de WireGuard

Optimisation des performances de WireGuard image

Rubrique: wireguard Tag: wireguard Tag: network-performance Tag: linux-networking Tag: firewall-settings Tag: vpn-tuning

Important

Traduction d’un article du site Pro Custodibus

Le contenu de cette page est la traduction Française de l’article WireGuard Performance Tuning de Justin Ludwig

WireGuard Performance Tuning

WireGuard n’a généralement pas besoin d’ajustements de performance pour être utilisé. Il a été conçu pour fonctionner bien sur les piles réseau modernes sous diverses configurations. Envoyer du trafic à travers son tunnel crypté nécessite seulement une petite quantité d’overhead, sous forme d’utilisation légèrement plus élevée du CPU et du réseau.

Cependant, il existe quelques ajustements que vous pouvez effectuer si vous rencontrez des problèmes de performance avec WireGuard. Cet article vous guidera à travers certaines stratégies pour Tester et Ajuster les performances de votre réseau WireGuard.

Tester

Comment savoir si vous avez un problème de performance avec WireGuard ? Il existe en effet deux classes principales de problèmes :

  1. Performance faible avec une Connexion Unique
  2. Performance faible lorsque de Plusieurs Connexions sont actives

Connexion Unique

Pour vérifier la performance avec une seule connexion WireGuard, essayez d’exécuter une opération à haut débit entre deux points de terminaison qui reflètent le problème de performance que vous semblez avoir, comme l’upload ou le download d’un fichier volumineux vers ou depuis une application web, ou la participation à un appel vidéo. Exécutez-le plusieurs fois avec la connexion WireGuard active et plusieurs fois en utilisant les mêmes points de terminaison exacts avec la connexion WireGuard inactive, puis comparez vos résultats.

Vous devriez attendre d’voir environ 90% de la performance avec vos tests lorsque vous utilisez WireGuard par rapport au cas où vous ne l’utilisez pas. Vous pourriez avoir besoin de modifier temporairement certains de vos paramètres de pare-feu ou autres paramètres réseau pour permettre aux deux points de terminaison de se connecter à l’extérieur du tunnel WireGuard.

Si il n’est pas possible de connecter les deux points de terminaison en dehors de WireGuard pour le test, et que vous avez un ou plusieurs sauts WireGuard entre les deux points de terminaison — par exemple, si vous avez un hub WireGuard entre les deux points de terminaison, ou une connexion site à site WireGuard entre les deux points de terminaison — vous pourriez essayer de tester chaque saut individuellement sans WireGuard ; puis comparer le rendement du pire saut sans WireGuard par rapport à la connexion complète point à point avec WireGuard. Tant que vous avez seulement deux ou trois sauts WireGuard, vous devriez attendre d’au moins 50% du rendement de votre test de connexion point à point WireGuard en comparaison de l’envoi du même trafic sans WireGuard sur le pire saut.

Si le rendement d’une application spécifique via WireGuard est important pour vous, vous devriez tester avec elle ; mais si vous n’avez pas une application spécifique à l’esprit (ou si c’est impossible de la tester des mêmes points de terminaison lorsqu’on utilise WireGuard que lorsqu’on ne l’utilise pas), iPerf est un outil pratique pour tester le bande passant général disponible pour une connexion entre deux points de terminaison. Il est disponible via le package iperf3 dans la plupart des distributions Linux.

Par exemple, pour tester le débit TCP générique d’upload d’une connexion WireGuard entre deux points de terminaison, vous pouvez exécuter iperf3 --server sur le côté “serveur” de la connexion et iperf3 --client 10.0.0.2 sur le côté “client” de la connexion (où 10.0.0.2 est l’adresse IP de l’interface WireGuard du côté serveur). Ensuite, exécutez iperf3 --client 10.0.0.2 --reverse pour tester le débit TCP générique d’download de la connexion.

La sortie d’iPerf sur le côté client ressemblera à ceci :

$ iperf3 --c

```plaintext
Client 10.0.0.2
Connecting to host 10.0.0.2, port 5201
[  5] local 10.0.0.1 port 51340 connected to 10.0.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  64.0 MBytes   537 Mbits/sec    1    854 KBytes
[  5]   1.00-2.00   sec  78.5 MBytes   659 Mbits/sec    0    854 KBytes
[  5]   2.00-3.00   sec  76.7 MBytes   643 Mbits/sec    0    854 KBytes
[  5]   3.00-4.00   sec  76.6 MBytes   642 Mbits/sec    0    854 KBytes
[  5]   4.00-5.00   sec  77.8 MBytes   653 Mbits/sec    0    854 KBytes
[  5]   5.00-6.00   sec  68.4 MBytes   574 Mbits/sec    7    730 KBytes
[  5]   6.00-7.00   sec  77.9 MBytes   653 Mbits/sec    0    846 KBytes
[  5]   7.00-8.00   sec  76.3 MBytes   640 Mbits/sec    0    846 KBytes
[  5]   8.00-9.00   sec  77.9 MBytes   654 Mbits/sec    0    846 KBytes
[  5]   9.00-10.00  sec  77.7 MBytes   652 Mbits/sec    0    846 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   752 MBytes   631 Mbits/sec    8             sender
[  5]   0.00-10.05  sec   750 MBytes   626 Mbits/sec                  receiver

iperf Done.
$ iperf3 --server
Listening on 5201
Connecting to host 10.0.0.1, port 46262
[  5] local 10.0.0.2 port 5201 connected to 10.0.0.1 port 46262
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  15.9 MBytes   133 Mbits/sec
[  5]   1.00-2.00   sec  10.3 MBytes  86.6 Mbits/sec
[  5]   2.00-3.00   sec  7.55 MBytes  63.3 Mbits/sec
[  5]   3.00-4.00   sec  8.38 MBytes  70.2 Mbits/sec
[  5]   4.00-5.00   sec  14.6 MBytes   122 Mbits/sec
[  5]   5.00-6.00   sec  14.2 MBytes   119 Mbits/sec
[  5]   6.00-7.00   sec  18.3 MBytes   154 Mbits/sec
[  5]   7.00-8.00   sec  11.5 MBytes  96.5 Mbits/sec
[  5]   8.00-9.00   sec  12.9 MBytes   108 Mbits/sec
[  5]   9.00-10.00  sec  8.60 MBytes  72.2 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.02  sec   124 MBytes   104 Mbits/sec   64             sender
[  5]   0.00-10.00  sec   122 MBytes   103 Mbits/sec                  receiver

iperf Done.
$ iperf3 --server
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Connection from 10.0.0.1, port 51334
[  5] local 10.0.0.2 port 5201 connected to 10.0.0.1 port 51340
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  59.0 MBytes   495 Mbits/sec
[  5]   1.00-2.00   sec  77.8 MBytes   652 Mbits/sec
[  5]   2.00-3.00   sec  77.2 MBytes   648 Mbits/sec
[  5]   3.00-4.00   sec  76.7 MBytes   643 Mbits/sec
[  5]   4.00-5.00   sec  77.7 MBytes   651 Mbits/sec
[  5]   5.00-6.00   sec  68.8 MBytes   578 Mbits/sec
[  5]   6.00-7.00   sec  76.7 MBytes   643 Mbits/sec
[  5]   7.00-8.00   sec  76.9 MBytes   645 Mbits/sec
[  5]   8.00-9.00   sec  77.4 MBytes   649 Mbits/sec
[  5]   9.00-10.00  sec  78.0 MBytes   655 Mbits/sec
[  5]  10.00-10.05  sec  4.02 MBytes   661 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.05  sec   750 MBytes   626 Mbits/sec                  receiver

iperf Done.
$ iperf3 --server
Listening on 5201
Connecting to host 10.0.0.1, port 46262
[  5] local 10.0.0.2 port 5201 connected to 10.0.0.1 port 46262
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  16.5 MBytes   138 Mbits/sec    6    194 KBytes
[  5]   1.00-2.00   sec  10.9 MBytes  91.1 Mbits/sec    8   93.1 KBytes
[  5]   2.00-3.00   sec  7.22 MBytes  60.5 Mbits/sec    7    101 KBytes
[  5]   3.00-4.00   sec  8.25 MBytes  69.2 Mbits/sec    7    124 KBytes
[  5]   4.00-5.00   sec  14.8 MBytes   124 Mbits/sec    5    132 KBytes
[  5]   5.00-6.00   sec  15.0 MBytes   127 Mbits/sec    4    140 KBytes

sec 14.3 MBytes 120 Mbits/sec 5 186 KBytes [ 5] 6.00-7.00 sec 18.1 MBytes 152 Mbits/sec 4 186 KBytes [ 5] 7.00-8.00 sec 12.0 MBytes 101 Mbits/sec 7 116 KBytes [ 5] 8.00-9.00 sec 12.4 MBytes 104 Mbits/sec 5 210 KBytes [ 5] 9.00-10.00 sec 8.85 MBytes 74.3 Mbits/sec 10 85.4 KBytes [ 5] 10.00-10.02 sec 559 KBytes 215 Mbits/sec 0 93.1 KBytes


[ ID] Intervalle Transfert Taux de bits Rét. [ 5] 0.00-10.02 sec 124 MBytes 104 Mbits/sec 64 expéditeur

Serveur en écoute sur 5201


À partir de ces deux exécutions, il semble que notre débit d'upload TCP générique via le tunnel WireGuard soit d'environ 600 Mbits/sec et le débit de download environ 100 Mbits/sec.

La sortie de chaque côté devrait ressembler à peu près la même chose, mais notez que nous ne voyons que le calcul de la taille de la fenêtre de congestion (la colonne étiquetée « Cwnd » dans la sortie) sur le côté « envoi » de la connexion — sur le côté client lors des tests d'upload (premier test), et sur le côté serveur lors des tests de download (second test).

La fenêtre de congestion est un facteur clé déterminant à quelle vitesse le côté envoi de la connexion peut envoyer des données au destinataire. Une fenêtre plus grande permet au l'envoyeur d'envoyer plus de données au destinataire avant que l'envoyeur n'aie besoin d'une reconnaissance du destinataire indiquant qu'il a reçu tous les paquets envoyés. L'envoyeur s'arrêtera lorsque la fenêtre atteindra son extrémité sans recevoir une reconnaissance ; et il essayera de renvoyer un sous-ensemble des paquets qu'il vient de envoyer (c'est-à-dire renvoyer avec une fenêtre de congestion plus petite) si il doit s'arrêter pendant trop longtemps.

Idealement, la pile réseau de l'hôte sur le côté envoi devrait être capable de déterminer rapidement la taille optimale de la fenêtre de congestion et de rester à cette taille pour la durée du test. C'est ce qui s'est passé avec notre premier test ci-dessus (upload), mais pas avec le second (download). Avec le deuxième test, la fenêtre de congestion a commencé à 194K, puis est immédiatement tombée à 93K, avant d'augmenter progressivement jusqu'à 210K, avant de terminer le test à nouveau à 93K.

Pour obtenir un résultat plus répétable, il serait mieux de jeter les parties du test où la pile réseau cherche la meilleure fenêtre de congestion ; et si la fenêtre de congestion continue de fluctuer, d'effectuer une échantillonnage de données plus long que celui par défaut d'iPerf de 10 secondes.

Essayons à nouveau de lancer le test de download, mais cette fois en jetant les 10 premières secondes et en prenant un échantillon de 20 secondes. Nous exécuterions la commande suivante sur le côté client :

```bash
$ iperf3 --client 10.0.0.2 --reverse --omit 10 --time 20
Connecting to host 10.0.0.2, port 5201
Reverse mode, remote host 10.0.0.2 is sending
[  5] local 10.0.0.1 port 52710 connected to 10.0.0.2 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   1.00-2.00   sec  9.58 MBytes  80.4 Mbits/sec                  (omitted)
[  5]   2.00-3.00   sec  11.1 MBytes  93.1 Mbits/sec                  (omitted)
[  5]   3.00-4.00   sec  12.5 MBytes   105 Mbits/sec                  (omitted)
[  5]   4.00-5.00   sec  13.5 MBytes   114 Mbits/sec                  (omitted)
[  5]   5.00-6.00   sec  11.8 MBytes  98.9 Mbits/sec                  (omitted)
[  5]   6.00-7.00   sec  8.60 MBytes  72.1 Mbits/sec                  (omitted)
[  5]   7.00-8.00   sec  10.5 MBytes  88.5 Mbits/sec                  (omitted)
[  5]   8.00-9.00   sec  11.4 MBytes  95.7 Mbits/sec                  (omitted)
[  5]   9.00-10.00  sec  8.79 MBytes  73.8 Mbits/sec

```bash
iperf Done.

Et consultez la sortie suivante côté serveur :
-----------------------------------------------------------
Serveur écoute sur le port 5201
-----------------------------------------------------------
Connexion acceptée de 10.0.0.1, port 52702
[  5] local 10.0.0.2 port 5201 connecté à 10.0.0.1 port 52710
[ ID] Intervalle           Transfert     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  18.9 MBytes   159 Mbits/sec   13    163 KBytes       (omitted)
[  5]   1.00-2.00   sec  10.0 MBytes  83.9 Mbits/sec    8   85.4 KBytes       (omitted)
[  5]   2.00-3.00   sec  11.0 MBytes  92.1 Mbits/sec    5    140 KBytes       (omitted)
[  5]   3.00-4.00   sec  12.1 MBytes   102 Mbits/sec    5    140 KBytes       (omitted)
[  5]   4.00-5.00   sec  13.2 MBytes   110 Mbits/sec    5    147 KBytes       (omitted)
[  5]   5.00-6.00   sec  12.1 MBytes   102 Mbits/sec    5    163 KBytes       (omitted)
[  5]   6.00-7.00   sec  8.79 MBytes  73.8 Mbits/sec    8    109 KBytes       (omitted)
[  5]   7.00-8.00   sec  9.94 MBytes  83.4 Mbits/sec    6    116 KBytes       (omitted)
[  5]   8.00-9.00   sec  12.1 MBytes   101 Mbits/sec    6    186 KBytes       (omitted)
[  5]   9.00-10.00  sec  8.79 MBytes  73.8 Mbits/sec   10   62.1 KBytes       (omitted)
[  5]   0.00-1.00   sec  6.73 MBytes  56.5 Mbits/sec    7    101 KBytes
[  5]   1.00-2.00   sec  7.70 MBytes  64.6 Mbits/sec   10    101 KBytes
[  5]   2.00-3.00   sec  12.1 MBytes   102 Mbits/sec    6   69.9 KBytes
[  5]   3.00-4.00   sec  12.2 MBytes   102 Mbits/sec    9   46.6 KBytes
[  5]   4.00-5.00   sec  7.70 MBytes  64.6 Mbits/sec    4    171 KBytes
[  5]   5.00-6.00   sec  12.1 MBytes   102 Mbits/sec    8   62.1 KBytes
[  5]   6.00-7.00   sec  7.64 MBytes  64.1 Mbits/sec    9   69.9 KBytes
[  5]   7.00-8.00   sec  9.82 MBytes  82.4 Mbits/sec    9   69.9 KBytes
[  5]   8.00-9.00   sec  6.61 MBytes  55.4 Mbits/sec    5    179 KBytes
[  5]   9.00-10.00  sec  12.0 MBytes   101 Mbits/sec    5    186 KBytes
[  5]  10.00-11.00  sec  9.94 MBytes  83.4 Mbits/sec    8   93.1 KBytes
[  5]  11.00-12.00  sec  8.85 MBytes  74.3 Mbits/sec    8    116 KBytes
[  5]  12.00-13.00  sec  15.3 MBytes   129 Mbits/sec    4    147 KBytes
[  5]  13.00-14.00  sec  14.3 MBytes   120 Mbits/sec    6    116 KBytes
[  5]  14.00-15.00  sec  7.64 MBytes  64.1 Mbits/sec    7    140 KBytes
[  5]  15.00-16.00  sec  14.3 MBytes   120 Mbits/sec    9   62.1 KBytes
[  5]  16.00-17.00  sec  7.82 MBytes  65.6 Mbits/sec    7   85.4 KBytes
[  5]  17.00-18.00  sec  13.3 MBytes   112 Mbits/sec    4    132 KBytes
[  5]  18.00-19.00  sec  17.6 MBytes   148 Mbits/sec    6    132 KBytes

Il semble que notre connexion de téléchargement soit simplement fondamentalement assez instable, car la fenêtre de congestion continuait à osciller entre un minimum de 46K et un maximum de 186K tout au long du test. Prendre plus d’échantillons nous a permis d’arriver à ce qui est probablement un peu plus de débit fiable, environ 90Mbits/sec.

Mais est-ce bon ou mauvais ?

Pour savoir, nous devons tester la connexion en dehors du tunnel WireGuard. Pour cela, nous exécuterions le même test avec l’adresse IP publique du point de terminaison côté serveur, au lieu de son adresse IP WireGuard. Pour accéder au serveur iPerf depuis le client, nous pourrions avoir besoin d’ajuster nos règles de pare-feu (par exemple, pour permettre l’accès au port TCP 5201 sur l’interface publique du serveur à partir de l’adresse IP publique du client).

Dans cet exemple, supposons que le côté serveur de la connexion ait une adresse IP publique de 203.0.113.2. C’est ce que nous voyons lors de l’exécution des tests depuis le côté client :

$ iperf3 --client 203.0.113.2
Connecting to host 203.0.113.2, port 5201
[  5] local 192.168.1.11 port 59094 connected to 203.0.113.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  84.1 MBytes   706 Mbits/sec    0   1.60 MBytes
[  5]   1.00-2.00   sec  98.8 MBytes   828 Mbits/sec   50   1.17 MBytes
[  5]   2.00-3.00   sec   102 MBytes   860 Mbits/sec    0   1.30 MBytes
[  5]   3.00-4.00   sec   102 MBytes   860 Mbits/sec    0   1.39 MBytes
[  5]   4.00-5.00   sec   102 MBytes   860 Mbits/sec    0   1.47 MBytes
[  5]   5.00-6.00   sec   104 MBytes   870 Mbits/sec    0   1.52 MBytes
[  5]   6.00-7.00   sec   104 MBytes   870 Mbits/sec    0   1.56 MBytes
[  5]   7.00-8.00   sec   104 MBytes   870 Mbits/sec    0   1.58 MBytes
[  5]   8.00-9.00   sec   104 MBytes   870 Mbits/sec    0   1.60 MBytes
[  5]   9.00-10.00  sec   105 MBytes   881 Mbits/sec    0   1.60 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1010 MBytes   848 Mbits/sec   50             sender
[  5]   0.00-10.04  sec  1008 MBytes   843 Mbits/sec                  receiver

iperf Done.
$ iperf3 --client 203.0.113.2 --reverse --omit 10 --time 20
Connecting to host 203.0.113.2, port 5201
Reverse mode, remote host 203.0.113.2 is sending
[  5] local 192.168.1.11 port 33482 connected to 203.0.113.2 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  8.84 MBytes  74.1 Mbits/sec                  (omitted)
[  5]   1.00-2.00   sec  3.70 MBytes  31.0 Mbits/sec                  (omitted)
[  5]   2.00-3.00   sec  5.58 MBytes  46.8 Mbits/sec                  (omitted)
[  5]   3.00-4.00   sec  3.89 MBytes  32.6 Mbits/sec                  (omitted)
[  5]   4.00-5.00   sec  4.19 MBytes  35.2 Mbits/sec                  (omitted)
[  5]   5.00-6.00   sec  3.74 MBytes  31.4 Mbits/sec                  (omitted)
[  5]   6.00-7.00   sec  3.70 MBytes  31.1 Mbits/sec                  (omitted)
[  5]   7.00-8.00   sec  2.51 MBytes  21.0 Mbits/sec                  (omitted)
[  5]   8.00-9.00   sec  4.02 MBytes  33.7 Mbits/sec                  (omitted)
[  5]   9.00-10.00  sec  3.63 MBytes  30.4 Mbits/sec                  (omitted)
[  5]   0.00-1.00   sec  3.84 MBytes  32.2 Mbits/sec
[  5]   1.00-2.00   sec  6.70 MBytes  56.2 Mbits/sec
[  5]   2.00-3.00   sec  4.86 MBytes  40.8 Mbits/sec
[  5]   3.00-4.00   sec  5.28 MBytes  44.3 Mbits/sec
[  5]   4.00-5.00   sec  5.49 MBytes  46.0 Mbits/sec

```ipérf Terminé.

Et ceci du serveur :

```bash
-----------------------------------------------------------
Serveur écoute sur le port 5201
-----------------------------------------------------------
Connexion acceptée de 198.100.51.11, port 48277
[  5] local 192.168.200.22 port 5201 connecté à 198.100.51.11 port 10908
[ ID] Intervalle           Transfert     Taux de données
[  5]   0.00-1.00   sec  78.2 MBytes   656 Mbits/sec
[  5]   1.00-2.00   sec  98.8 MBytes   829 Mbits/sec
[  5]   2.00-3.00   sec   103 MBytes   862 Mbits/sec
[  5]   3.00-4.00   sec   102 MBytes   852 Mbits/sec
[  5]   4.00-5.00   sec   103 MBytes   868 Mbits/sec
[  5]   5.00-6.00   sec   104 MBytes   871 Mbits/sec
[  5]   6.00-7.00   sec   103 MBytes   867 Mbits/sec
[  5]   7.00-8.00   sec   104 MBytes   871 Mbits/sec
[  5]   8.00-9.00   sec   104 MBytes   873 Mbits/sec
[  5]   9.00-10.00  sec   104 MBytes   876 Mbits/sec
[  5]  10.00-10.04  sec  4.17 MBytes   868 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Intervalle           Transfert     Taux de données         Rét.
[  5]   0.00-1.00   sec  9.78 MBytes  82.0 Mbits/sec   17   48.1 KBytes       (omis)
[  5]   1.00-2.00   sec  3.98 MBytes  33.4 Mbits/sec   15   38.2 KBytes       (omis)
[  5]   2.00-3.00   sec  5.72 MBytes  48.0 Mbits/sec    3   52.3 KBytes       (omis)
[  5]   3.00-4.00   sec  3.98 MBytes  33.4 Mbits/sec   11   29.7 KBytes       (omis)
[  5]   4.00-5.00   sec  3.91 MBytes  32.8 Mbits/sec    5   50.9 KBytes       (omis)
[  5]   5.00-6.00   sec  3.91 MBytes  32.8 Mbits/sec   10   63.6 KBytes       (omis)
[  5]   6.00-7.00   sec  3.91 MBytes  32.8 Mbits/sec    8   24.0 KBytes       (omis)
[  5]   7.00-8.00   sec  2.24 MBytes  18.8 Mbits/sec   10   33.9 KBytes       (omis)
[  5]   8.00-9.00   sec  3.91 MBytes  32.8 Mbits/sec    6   45.2 KBytes       (omis)
[  5]   9.00-10.00  sec  3.91 MBytes  32.8 Mbits/sec    8   39.6 KBytes       (omis)
[  5]   0.00-1.00   sec  3.36 MBytes  28.1 Mbits/sec    6   50.9 KBytes
[  5]   1.00-2.00   sec  6.71 MBytes  56.3 Mbits/sec    7   56.6 KBytes
[  5]   2.00-3.00   sec  5.03 MBytes  42.2 Mbits/sec    5   82.0 KBytes
[  5]   3.00-4.00   sec  5.59 MBytes  46.9 Mbits/sec   15   48.1 KBytes
[  5]   4.00-5.00   sec  5.03 MBytes  42.3 Mbits/sec    2   91.9 KBytes
[  5]   5.00-6.00   sec  7.27 MBytes  61.0 Mbits/sec    5   91.9 KBytes
[  5]   6.00-7.00   sec  6.77 MBytes  56.8 Mbits/sec   10   63.6 KBytes
[  5]   7.00-8.00   sec  5.03 MBytes  48.0 Mbits/sec    6   79.2 KBytes
[  5]   8.00-9.00   sec  5.03 MBytes  42.2 Mbits/sec    6   63.6 KBytes
[  5]   9.00-10.00  sec  5.59 MBytes  46.8 Mbits/sec    5   79.2 KBytes
[  5]  10.00-11.00  sec  6.71 MBytes  56.4 Mbits/sec    6   56.6 KBytes
[  5]  11.00-12.00  sec  5.59 MBytes  46.9 Mbits/sec   12   46.7 KBytes
[  5]  12.00-13.00  sec  3.42 MBytes  28.7 Mbits/sec   11   33.9 KBytes
[  5]  13.00-14.00  sec  2.80 MBytes  23.5 Mbits/sec   14   41.0 KBytes

[  5]  14:00-15:00  sec  3.91 MBytes  32.8 Mbits/sec    8   49.5 KBytes
[  5]  15:00-16:00  sec  5.65 MBytes  47.4 Mbits/sec    5   60.8 KBytes
[  5]  16:00-17:00  sec  7.27 MBytes  61.0 Mbits/sec    5   91.9 KBytes
[  5]  17:00-18:00  sec  6.77 MBytes  56.8 Mbits/sec   10   63.6 KBytes
[  5]  18:00-19:00  sec  5.72 MBytes  48.0 Mbits/sec    6   79.2 KBytes
[  5]  19:00-20:00  sec  3.42 MBytes  28.7 Mbits/sec   18   38.2 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Intervalle           Transfert     Taux de données         Rét.
[  5]   0.00-20.02  sec   104 MBytes  43.5 Mbits/sec  169             expéditeur
-----------------------------------------------------------
Serveur écoute sur le port 5201
-----------------------------------------------------------

Pour ces deux exécutions, il semble que notre débit de téléchargement TCP générique en dehors du tunnel WireGuard soit d'environ 850 Mbits/sec et le débit de téléversement environ 45 Mbits/sec. Nos résultats précédents à l'intérieur du tunnel WireGuard ont montré un débit de téléversement d'environ 600 Mbits/sec et un débit de téléchargement de 90 Mbits/sec — donc il semble qu'il y ait encore une place pour l'amélioration sur le côté de la téléversement (nous ne recevons que 70% de notre débit de téléversement lorsqu'il est transmis via le tunnel WireGuard) — mais notre débit de téléchargement est en réalité deux fois meilleur lorsque nous utilisons WireGuard !

Pourquoi est le débit de téléchargement tellement meilleur avec WireGuard que sans lui dans cet exemple ? C'est un résultat assez inhabituel et il est probablement simplement une conséquence d'un réseau fortement congestionné dans notre direction de téléchargement. Certains des sauts dans cette direction ont peut-être été configurés avec plus d'espace de bande disponible pour le trafic UDP par rapport au trafic TCP, donc dans ce cas particulier, nous sommes en mesure d'obtenir beaucoup plus de données à travers la connexion simplement en emballant notre trafic TCP dans des paquets UDP WireGuard.

Mais ces résultats illustrent néanmoins l'importance de tester chaque ensemble de points de terminaison avec des connexions WireGuard et non-WireGuard afin de déterminer si vous pouvez espérer obtenir un avantage en termes de performance à partir de la configuration spécifique à WireGuard.

### De nombreuses Connexions

Pour vérifier les problèmes de performance lorsque de nombreuses connexions WireGuard sont actives, vous généralement avez besoin d'un outil de test de charge dédié, comme [JMeter](https://jmeter.apache.org/), [Gatling](https://gatling.io/), [K6](https://k6.io/), etc., afin de simuler les actions de nombreux utilisateurs individuels WireGuard qui utilisent leurs connexions simultanément. Similaire à la test d'une [Connexion Unique](#single-connection), vous exécuteriez un test de charge plusieurs fois avec la connexion WireGuard active, et vous exécuteriez le même test avec la connexion WireGuard inactive, puis vous compareriez les résultats.

Et comme avec une [Connexion Unique](#single-connection), vous devriez attendre d'obtenir environ 90% de la performance dans vos tests lorsque vous utilisez WireGuard par rapport au cas où vous ne l'utilisez pas.

De plus, similaire à une [Connexion Unique](#single-connection), si il n'est pas possible de se connecter depuis les mêmes points de terminaison en exécutant un test de charge contre une application spécifique avec WireGuard que sans, vous pouvez utiliser iPerf pour au moins simuler le trafic réseau générique. (Le désavantage de cela est que vous ajustez effectivement vos performances afin d'obtenir des résultats meilleurs sur iPerf, plutôt que d'améliorer nécessairement les performances d'une application réelle.)

Par exemple, vous pouvez simuler des connexions supplémentaires passant à travers le tunnel WireGuard entre deux points de terminaison en ajoutant l'option `--parallel` à la commande iPerf. Le suivant simulerait 10 connexio

Voici le texte corrigé :

ns ; la première test dans le sens d'upload, puis la deuxième dans le sens de download :

```bash
$ iperf3 --client 10.0.0.2 --parallel 10
Connecting to host 10.0.0.2, port 5201
[  5] local 10.0.0.1 port 52428 connected to 10.0.0.2 port 5201
[  7] local 10.0.0.1 port 52442 connected to 10.0.0.2 port 5201
[  9] local 10.0.0.1 port 52444 connected to 10.0.0.2 port 5201
[ 11] local 10.0.0.1 port 52446 connected to 10.0.0.2 port 5201
[ 13] local 10.0.0.1 port 52458 connected to 10.0.0.2 port 5201
[ 15] local 10.0.0.1 port 52468 connected to 10.0.0.2 port 5201
[ 17] local 10.0.0.1 port 52474 connected to 10.0.0.2 port 5201
[ 19] local 10.0.0.1 port 52480 connected to 10.0.0.2 port 5201
[ 21] local 10.0.0.1 port 52490 connected to 10.0.0.2 port 5201
[ 23] local 10.0.0.1 port 52504 connected to 10.0.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  21.0 MBytes   176 Mbits/sec   51    225 KBytes
[  7]   0.00-1.00   sec  10.8 MBytes  91.0 Mbits/sec   43    171 KBytes
[  9]   0.00-1.00   sec  8.40 MBytes  70.4 Mbits/sec   28   85.4 KBytes
[ 11]   0.00-1.00   sec  8.12 MBytes  68.1 Mbits/sec   26    147 KBytes
[ 13]   0.00-1.00   sec  11.7 MBytes  98.1 Mbits/sec   29    256 KBytes
[ 15]   0.00-1.00   sec  7.97 MBytes  66.9 Mbits/sec   28    171 KBytes
[ 17]   0.00-1.00   sec  10.7 MBytes  89.5 Mbits/sec   26    171 KBytes
[ 19]   0.00-1.00   sec  10.5 MBytes  88.4 Mbits/sec   30    194 KBytes
[ 21]   0.00-1.00   sec  9.51 MBytes  79.8 Mbits/sec   30    186 KBytes
[ 23]   0.00-1.00   sec  7.94 MBytes  66.6 Mbits/sec   33    179 KBytes
[SUM]   0.00-1.00   sec   107 MBytes   895 Mbits/sec  324
- - - - - - - - - - - - - - - - - - - - - - - - -
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   9.00-10.00  sec  7.12 MBytes  59.8 Mbits/sec    5    140 KBytes
[  7]   9.00-10.00  sec  10.4 MBytes  95.2 Mbits/sec  111             sender
[  7]   0.00-10.02  sec   112 MBytes  93.8 Mbits/sec                  receiver
[  9]   0.00-10.00  sec  87.5 MBytes  73.4 Mbits/sec   94             sender
[  9]   0.00-10.02  sec  85.9 MBytes  71.9 Mbits/sec                  receiver
[ 11]   0.00-10.00  sec  94.2 MBytes  79.0 Mbits/sec   88             sender
[ 11]   0.00-10.02  sec  93.1 MBytes  77.9 Mbits/sec                  receiver
[ 13]   0.00-10.00  sec   101 MBytes  84.9 Mbits/sec   88             sender
[ 13]   0.00-10.02  sec  99.8 MBytes  83.5 Mbits/sec                  receiver
[ 15]   0.00-10.00  sec  84.9 MBytes  71.2 Mbits/sec   99             sender
[ 15]   0.00-10.02  sec  83.9 MBytes  70.2 Mbits/sec                  receiver
[ 17]   0.00-10.00  sec  96.3 MBytes  80.8 Mbits/sec   81             sender
[ 17]   0.00-10.02  sec  95.0 MBytes  79.5 Mbits/sec                  receiver
[ 19]   0.00-10.00  sec  96.0 MBytes  80.6 Mbits/sec  113             sender
[ 19]   0.00-10.02  sec  94.7 MBytes  79.2 Mbits/sec                  receiver
[ 21]   0.00-10.00   sec  9.51 MBytes  79.8 Mbits/sec   30    186 KBytes
[ 23]   0.00-10.02  sec  7.94 MBytes  66.6 Mbits/sec   33    179 KBytes
[SUM]   0.00-10.02  sec   957 MBytes   800 Mbits/sec                  receiver

iperf Done.
$ iperf3 --client 10.0.0.2 --parallel 10 --reverse --omit 10 --time 20
Connecting to host 10.0.0.2, port 5201
Reverse mode, remote host 10.0.0.2 is sending
[  5] local 10.0.0.1 port 37494 connected to 10.0.0.2 port 5201
[  7] local 10.0.0.1 port 37506 connected to 10.0.0.2 port 5201
[  9] local 10.0.0.1 port 37518 connected to 10.0.0.2 port 5201
[ 11] local 10.0.0.1 port 37530 connected to 10.0.0.2 port 5201
[ 13] local 10.0.0.1 port 37534 connected to 10.0.0.2 port 5201
[ 15] local 10.0.0.1 port 37540 connected to 10.0.0.2 port 5201
[ 17] local 10.0.0.1 port 37550 connected

to 10.0.0.2 port 5201  
[ 19] local 10.0.0.1 port 37554 connected to 10.0.0.2 port 5201  
[ 21] local 10.0.0.1 port 37564 connected to 10.0.0.2 port 5201  
[ 23] local 10.0.0.1 port 37572 connected to 10.0.0.2 port 5201  

[ ID] Interval           Transfer     Bitrate  
[  5]   0.00-1.00   sec  5.45 MBytes  45.7 Mbits/sec  
[  7]   0.00-1.00   sec  6.23 MBytes  52.3 Mbits/sec  
[  9]   0.00-1.00   sec  4.09 MBytes  34.3 Mbits/sec  
[ 11]   0.00-1.00   sec  6.37 MBytes  53.4 Mbits/sec  
[ 13]   0.00-1.00   sec  5.84 MBytes  49.0 Mbits/sec  
[ 15]   0.00-1.00   sec  2.58 MBytes  21.6 Mbits/sec  
[ 17]   0.00-1.00   sec  3.60 MBytes  30.2 Mbits/sec  
[ 19]   0.00-1.00   sec  4.68 MBytes  39.3 Mbits/sec  
[ 21]   0.00-1.00   sec  3.14 MBytes  26.3 Mbits/sec  
[ 23]   0.00-1.00   sec  5.37 MBytes  45.1 Mbits/sec  

[SUM]   0.00-1.00   sec  47.4 MBytes   397 Mbits/sec  

- - - - - - - - - - - - - - - - - - - - - - - - -
...

- - - - - - - - - - - - - - - - - - - - - - - - -

[  5]  19.00-20.00  sec  9.37 MBytes  78.6 Mbits/sec  
[  7]  19.00-20.00  sec  3.81 MBytes  31.9 Mbits/sec  
[  9]  19.00-20.00  sec  5.42 MBytes  45.5 Mbits/sec  
[ 11]  19.00-20.00  sec  6.81 MBytes  57.1 Mbits/sec  
[ 13]  19.00-20.00  sec  7.72 MBytes  64.8 Mbits/sec  
[ 15]  19.00-20.00  sec  4.66 MBytes  39.1 Mbits/sec  
[ 17]  19.00-20.00  sec  4.79 MBytes  40.2 Mbits/sec  
[ 19]  19.00-20.00  sec  4.68 MBytes  39.3 Mbits/sec  
[ 21]  19.00-20.00  sec  5.00 MBytes  41.7 Mbits/sec  
[ 23]  19.00-20.00  sec  4.73 MBytes  38.6 Mbits/sec  

[SUM]   0.00-20.00  sec  1.13 GBytes   485 Mbits/sec  1324 sender  
[SUM]   0.00-20.00  sec  1.13 GBytes   485 Mbits/sec receiver  

```bash
iperf Done.

Ces 10 connexions ont géré environ 800 Mbits/sec de débit combiné lors de l’upload et 485 Mbits/sec lors du download.

Comme avec une Connexion Unique, nous voulons comparer cela au même nombre de connexions en cours d’exécution sans WireGuard. Pour ce faire, nous exécuterions les mêmes tests à l’aide de l’adresse IP publique du point de terminaison du serveur, plutôt que son adresse IP WireGuard :

$ iperf3 --client 203.0.113.2 --parallel 10  
Connecting to host 203.0.113.2, port 5201  
[  5] local 192.168.1.11 port 34860 connected to 203.0.113.2 port 5201  
[  7] local 192.168.1.11 port 34864 connected to 203.0.113.2 port 5201  
[  9] local 192.168.1.11 port 34872 connected to 203.0.113.2 port 5201  
[ 11] local 192.168.1.11 port 34884 connected to 203.0.113.2 port 5201  
[ 13] local 192.168.1.11 port 34898 connected to 203.0.113.2 port 5201  
[ 15] local 192.168.1.11 port 34914 connected to 203.0.113.2 port 5201  
[ 17] local 192.168.1.11 port 34922 connected to 203.0.113.2 port 5201  
[ 19] local 192.168.1.11 port 34928 connected to 203.0.113.2 port 5201  
[ 21] local 192.168.1.11 port 34938 connected to 203.0.113.2 port 5201  
[ 23] local 192.168.1.11 port 34954 connected to 203.0.113.2 port 5201  

[ ID] Interval           Transfer     Bitrate  
[  5]   0.00-1.00   sec  5.45 MBytes  45.7 Mbits/sec  
[  7]   0.00-1.00   sec  6.23 MBytes  52.3 Mbits/sec  
[  9]   0.00-1.00   sec  4.09 MBytes  34.3 Mbits/sec  
[ 11]   0.00-1.00   sec  6.37 MBytes  53.4 Mbits/sec  
[ 13]   0.00-1.00   sec  5.84 MBytes  49.0 Mbits/sec  
[ 15]   0.00-1.00   sec  2.58 MBytes  21.6 Mbits/sec  
[ 17]   0.00-1.00   sec  3.60 MBytes  30.2 Mbits/sec  
[ 19]   0.00-1.00   sec  4.68 MBytes  39.3 Mbits/sec  
[ 21]   0.00-1.00   sec  3.14 MBytes  26.3 Mbits/sec  
[ 23]   0.00-1.00   sec  5.37 MBytes  45.1 Mbits/sec  

[SUM]   0.00-1.00   sec

110 MBytes   925 Mbits/sec  219

[ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 151 MBytes 127 Mbits/sec 113 sender [ 5] 0.00-10.01 sec 149 MBytes 125 Mbits/sec receiver [ 7] 0.00-10.00 sec 114 MBytes 95.3 Mbits/sec 85 sender [ 7] 0.00-10.01 sec 111 MBytes 93.2 Mbits/sec receiver [ 9] 0.00-10.00 sec 123 MBytes 103 Mbits/sec 97 sender [ 9] 0.00-10.01 sec 121 MBytes 101 Mbits/sec receiver [ 11] 0.00-10.00 sec 122 MBytes 103 Mbits/sec 76 sender [ 11] 0.00-10.01 sec 121 MBytes 101 Mbits/sec receiver [ 13] 0.00-10.00 sec 89.7 MBytes 75.2 Mbits/sec 27 sender [ 13] 0.00-10.01 sec 88.4 MBytes 74.1 Mbits/sec receiver [ 15] 0.00-10.00 sec 132 MBytes 111 Mbits/sec 99 sender [ 15] 0.00-10.01 sec 130 MBytes 109 Mbits/sec receiver [ 17] 0.00-10.00 sec 63.0 MBytes 52.9 Mbits/sec 30 sender [ 17] 0.00-10.01 sec 61.9 MBytes 51.8 Mbits/sec receiver [ 19] 0.00-10.00 sec 89.0 MBytes 74.7 Mbits/sec 35 sender [ 19] 0.00-10.01 sec 88.0 MBytes 73.8 Mbits/sec receiver [ 21] 0.00-10.00 sec 93.6 MBytes 78.5 Mbits/sec 46 sender [ 21] 0.00-10.01 sec 92.6 MBytes 77.6 Mbits/sec receiver [ 23] 0.00-10.00 sec 118 MBytes 98.8 Mbits/sec 191 sender [ 23] 0.00-10.01 sec 115 MBytes 96.0 Mbits/sec receiver [SUM] 0.00-10.00 sec 1.07 GBytes 919 Mbits/sec 799 sender [SUM] 0.00-10.01 sec 1.05 GBytes 903 Mbits/sec receiver

iperf Done.
$ iperf3 --client 203.0.113.2 --parallel 10 --reverse --omit 10 --time 20
Connecting to host 203.0.113.2, port 5201
Reverse mode, remote host 203.0.113.2 is sending
[  5] local 192.168.1.11 port 32818 connected to 203.0.113.2 port 5201
[  7] local 192.168.1.11 port 32830 connected to 203.0.113.2 port 5201
[  9] local 192.168.1.11 port 32832 connected to 203.0.113.2 port 5201
[ 11] local 192.168.1.11 port 32834 connected to 203.0.113.2 port 5201
[ 13] local 192.168.1.11 port 32850 connected to 203.0.113.2 port 5201
[ 15] local 192.168.1.11 port 32854 connected to 203.0.113.2 port 5201
[ 17] local 192.168.1.11 port 32856 connected to 203.0.113.2 port 5201
[ 19] local 192.168.1.11 port 32866 connected to 203.0.113.2 port 5201
[ 21] local 192.168.1.11 port 32880 connected to 203.0.113.2 port 5201
[ 23] local 192.168.1.11 port 32892 connected to 203.0.113.2 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  3.94 MBytes  33.0 Mbits/sec                  (omitted)
[  7]   0.00-1.00   sec  5.30 MBytes  44.5 Mbits/sec                  (omitted)
[  9]   0.00-1.00   sec  2.13 MBytes  17.8 Mbits/sec                  (omitted)
[ 11]   0.00-1.00   sec  4.10 MBytes  34.4 Mbits/sec                  (omitted)
[ 13]   0.00-1.00   sec  5.98 MBytes  50.2 Mbits/sec                  (omitted)
[ 15]   0.00-1.00   sec  4.69 MBytes  39.3 Mbits/sec                  (omitted)
[ 17]   0.00-1.00   sec  2.38 MBytes  20.0 Mbits/sec                  (omitted)
[ 19]   0.00-1.00   sec  3.54 MBytes  29.7 Mbits/sec                  (omitted)
[SUM]   0.00-1.00   sec  40.5 MBytes   340 Mbits/sec                  (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]  19.00-20.00  sec  4.21 MBytes  35.3 Mbits/sec
[  7]  19.00-20.00  sec  3.53 MBytes  29.6 Mbits/sec
[  9]  19.00-20.00  sec  95.6 MBytes  40.1 Mbits/sec  146             sender
[  9]  19.00-20.00  sec  95.4 MBy

tes 40.0 Mbits/sec                  receiver
[ 11]  19.00-20.00  sec   114 MBytes  47.8 Mbits/sec  150             sender
[ 11]  19.00-20.00  sec   114 MBytes  47.8 Mbits/sec                  receiver
[ 13]  19.00-20.00  sec  97.3 MBytes  40.8 Mbits/sec  153             sender
[ 13]  19.00-20.00  sec  97.3 MBytes  40.8 Mbits/sec                  receiver
[ 15]  19.00-20.00  sec  91.3 MBytes  38.3 Mbits/sec  168             sender
[ 15]  19.00-20.00  sec  91.2 MBytes  38.2 Mbits/sec                  receiver
[ 17]  19.00-20.00  sec  92.3 MBytes  38.7 Mbits/sec  169             sender
[ 17]  19.00-20.00  sec  92.5 MBytes  38.8 Mbits/sec                  receiver
[ 19]  19.00-20.00  sec  92.4 MBytes  38.7 Mbits/sec  135             sender
[ 19]  19.00-20.00  sec  92.5 MBytes  38.8 Mbits/sec                  receiver
[ 21]  19.00-20.00  sec  95.1 MBytes  39.9 Mbits/sec  161             sender
[ 21]  19.00-20.00  sec  94.9 MBytes  39.8 Mbits/sec                  receiver
[ 23]  19.00-20.00  sec   108 MBytes  45.3 Mbits/sec  157             sender
[ 23]  19.00-20.00  sec   108 MBytes  45.2 Mbits/sec                  receiver
[SUM]   19.00-20.00  sec   955 MBytes   401 Mbits/sec  1579             sender
[SUM]   19.00-20.00  sec   955 MBytes   401 Mbits/sec                  receiver

```iperf Done.

Sans WireGuard, les tests montrent environ 900 MBits/sec en upload et 400 MBits/sec en download. C'est ce que vous pourriez attendre pour le débit d'upload (800 MBits/sec avec WireGuard contre 900 MBits/sec sans), mais surprenantement plus rapide avec WireGuard lors de la download (485 MBits/sec avec WireGuard contre 400 MBits/sec sans). Cela est probablement dû à une congestion TCP particulière sur le chemin de download.

Pour cet exemple particulier, aucune quantité de réglage spécifique à WireGuard ne devrait améliorer les performances avec 10 connexions simultanées. Il pourrait être une histoire différente avec 100 ou 1000 connexions simultanées, bien que ce soit important de tester avec un charge de travail réel (mais vous aurez probablement besoin d'au moins quelques machines clientes supplémentaires pour tester 100 connexions simultanées, et une douzaine ou plus pour tester 1000 connexions actuelles).

## Ajustements

Si vous obtenez des performances significativement inférieures avec WireGuard que ce que vous attendez sur vos tests, voici cinq domaines de problème à vérifier et essayer d'ajuster :

1. [CPU](#cpu)
2. [Contrôle de congestion TCP](#tcp-congestion-control)
3. [Fragmentation des paquets](#packet-fragmentation)
4. [Tamponnement des paquets](#packet-buffering)
5. [Suivi des connexions](#connection-tracking)

### CPU

La gestion du trafic WireGuard nécessite quelques cycles supplémentaires de CPU pour chiffrer et déchiffrer les paquets envoyés et reçus via le tunnel WireGuard. Cette surcharge est généralement minime, mais peut avoir un impact sur les systèmes peu puissants (comme une Raspberry Pi), ou sur les systèmes qui gèrent de nombreuses connexions WireGuard simultanées.

Tandis que vous exécutez des tests avec WireGuard, vérifiez l'utilisation du CPU de chaque point de terminaison ainsi que chaque hub ou passerelle WireGuard impliquée dans la connexion. L'observation visuelle de l'utilisation du CPU à l'aide d'un outil comme [htop](https://htop.dev/) ou un outil similaire qui affiche l'utilisation du CPU graphiquement est acceptable pour ce type de vérification. Si l'utilisation du CPU reste constamment supérieure à 90% lors d'un test sur l'un des systèmes, il est probable que le CPU du système limite le débit de WireGuard.

Malheureusement, la seule chose que vous pouvez faire pour corriger ce problème est de remplacer le système par un modèle ayant un processeur plus puissant.

### Contrôle de congestion TCP

L'algorithme d'assainissement de congestion TCP par défaut utilisé par la plupart des systèmes d'exploitation modernes, [CUBIC](https://www.rfc-editor.org/rfc/rfc9438), ne convient pas bien à WireGuard (o

u à tout autre protocole qui encapsule TCP dans UDP). L'algorithme [BBR](https://datatracker.ietf.org/doc/html/draft-cardwell-iccrg-bbr-congestion-control) est une meilleure correspondance, car il est moins sensible au perte de paquets et beaucoup plus agressif dans sa recherche de la fenêtre de congestion optimale. Si vos tests de performance montrent que la fenêtre de congestion TCP oscille (ou se réduit significativement après un ouverture rapide initiale), le contrôle de congestion TCP est probablement le problème — et le passage à l'algorithme BBR peut aider.

Le contrôle de congestion est géré sur le côté d'envoi de la connexion — le côté serveur pour les téléchargements, le côté client pour les téléversements. Il doit généralement être défini globalement pour l'hôte, donc soyez conscient que le changement de ce paramètre pour les connexions TCP envoyées via WireGuard modifiera également les connexions TCP *non envoyées* via WireGuard (ce qui pourrait leur causer des dommages).

Sur Linux, vous pouvez afficher l'algorithme d'assainissement de congestion TCP actuel en exécutant la commande suivante :

```bash
$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = cubic

Et vous pouvez le changer en BBR (jusqu’au prochain redémarrage) avec la commande suivante :

$ sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

Pour l’appliquer automatiquement après un redémarrage du système, ajoutez la ligne suivante au fichier /etc/sysctl.conf (ou à tout fichier dans le répertoire /etc/sysctl.d/, comme /etc/sysctl.d/custom.conf) :

net.ipv4.tcp_congestion_control=bbr
Mise en garde

Pour les noyaux Linux antérieurs à la version 4.20, vous devriez également modifier le qdisc (discipline de file d'attente) pour vos interfaces réseau physiques afin d'utiliser le fq qdisc (consultez la discussion Peux-je utiliser BBR avec fq\_codel?). La méthode la plus simple pour le faire est d'ajouter la ligne suivante au fichier /etc/sysctl.conf, puis de redémarrer :

net.core.default_qdisc=fq

Sur FreeBSD, BBR est disponible depuis la version 13.0, mais vous devrez généralement compiler le noyau avec certaines options supplémentaires. Avec un noyau qui prend en charge BBR, vous pouvez l’activer en chargeant le module tcp_bbr et en définissant le paramètre de noyau net.inet.tcp.functions_default :

# kldload tcp_bbr
# sysctl net.inet.tcp.functions_default=bbr

Consultez la discussion Comment activer TCP BBR sur FreeBSD ? pour plus de détails.

Dans les dernières versions de Windows, vous pouvez afficher l’algorithme d’optimisation de congestion TCP actuel en exécutant la commande suivante :

> Get-NetTCPSetting | Select SettingName, CongestionProvider
SettingName      CongestionProvider
-----------      ------------------
Automatic
InternetCustom   CUBIC
DatacenterCustom CUBIC
Compat           CUBIC
Datacenter       CUBIC
Internet         CUBIC

Et vous pouvez le changer en BBR avec les commandes suivantes :

> netsh int tcp set supplemental Template=Internet CongestionProvider=bbr2
> netsh int tcp set supplemental Template=Datacenter CongestionProvider=bbr2
> netsh int tcp set supplemental Template=Compat CongestionProvider=bbr2
> netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=bbr2
> netsh int tcp set supplemental Template=InternetCustom CongestionProvider=bbr2

Fragmentation de paquets

De nombreuses connexions Ethernet ont une taille maximale d'

Emission (MTU) de 1500 octets, ce qui signifie que chaque trame Ethernet peut transporter jusqu’à 1500 octets de contenu (sans inclure les en-têtes Ethernet eux-mêmes, mais y compris les en-têtes des paquets envoyés à l’intérieur de chaque trame). Cependant, d’autres tailles d’MTU sont courantes, comme 9000 ou plus pour les liens réseau au sein d’un datacenter, ou 1492 pour de nombreuses connexions PPPoE (Protocole de pont point-à-point sur Ethernet) entre les fournisseurs d’accès Internet (ISPs) et leurs abonnés.

Les paquets plus grands que la taille d’MTU d’une connexion Ethernet ne peuvent pas être transmis. Lorsque des paquets IPv4 trop grands sont rencontrés, le pile réseau du dispositif peut faire l’un de deux choses :

  1. Décourager le paquet et envoyer un paquet ICMP “Fragmentation nécessaire” au source du paquet original.
  2. Fragmenter le paquet en petits paquets qui correspondent à la taille d’MTU et les envoyer aux destinataires originaux.

(Avec IPv6, le paquet est toujours découragé et un paquet ICMPv6 “Paquet trop grand” est envoyé.)

Les deux options auront un effet négatif sur les performances, car elles entraîneront l’envoi et le traitement de paquets supplémentaires. De plus, lorsque la deuxième option est prise, le paquet ICMP (ou ICMPv6) peut jamais parvenir au source original, car une traduction d’adresse réseau (NAT) ou un pare-feu restrictif devant le source peut bloquer tous les paquets ICMP et ICMPv6. Si ces paquets sont bloqués, la connexion apparaîtra “figée” complètement, car le trafic du source original ne parviendra jamais à sa destination voulue sous quelque forme que ce soit.

La solution à ce problème est de définir manuellement la taille de l’MTU (Maximum Transmission Unit) sur la connexion WireGuard suffisamment basse pour que les paquets ne soient pas obligés d’être fragmentés. La taille de l’MTU de chaque interface WireGuard devrait être définie 60 octets inférieure à la taille de l’MTU du lien le plus étroit dans la connexion lorsque vous utilisez IPv4 (et 80 octets inférieure lorsque vous utilisez IPv6).

Une autre façon de déterminer la bonne taille d’MTU pour une interface WireGuard est de vérifier la taille négociée de l’MSS (Maximum Segment Size) d’une connexion TCP établie entre les deux points de terminaison en dehors du tunnel WireGuard (ceci ne fonctionne cependant que si les routeurs où les tailles d’MTU changent ont mis en œuvre “MSS clamping”). L’MSS est la taille maximale de charge utile qu’un paquet TCP peut transporter à travers la connexion (sans inclure les en-têtes du packet). L’MSS est effectivement l’MTU moins les en-têtes TCP/IP ; et les en-têtes combinés TCP/IP sont de 40 octets avec IPv4, et 60 octets avec IPv6 :

Paquet IPv4 régulier

Figure 1. Taille d’MTU et MSS avec un paquet TCP IPv4 régulier

L’MTU sur une interface WireGuard devrait être de 60 octets inférieure à la taille de l’MTU de l’interface Ethernet par laquelle ses paquets tunnelés se déplacent (lorsque vous utilisez IPv4 pour transporter les paquets tunnelés ; 80 octets inférieure lorsque vous utilisez IPv6). Et l’MSS des paquets TCP tunnelés devrait être d’une autre 40 octets inférieure (lorsque les paquets eux-mêmes utilisent IPv4 ; 60 octets lorsque vous utilisez IPv6) :

Paquet IPv4 tunnelé

Figure 2. Taille d’MTU et MSS avec un paquet TCP IPv4 tunnelé à travers WireGuard via un paquet UDP IPv4

Pour vérifier le MSS négocié, exécutez tcpdump sur chaque point de terminaison pour capturer les paquets SYN et SYN-ACK d’un échange de clés TCP. Au point de terminaison destinataire, le paquet SYN montrera le MSS ajusté par tout routeur sur le chemin vers le destinataire (tandis que sur le point de terminaison initiateur, le paquet SYN montrera le MSS comme demandé initialement). Sur le point de terminaison initiateur, le paquet SYN-ACK retourné montrera le MSS ajusté par tout routeur sur le chemin vers l'

initiateur (tandis que sur le point de terminaison destinataire, le SYN-ACK montrera le MSS comme demandé initialement).

Si la connexion a été routée à travers un chemin différent en direction du destinataire qu’en direction de l’initiateur, vous pourriez voir une valeur différente du MSS dans le paquet SYN au destinataire que celle que vous voyez dans le paquet SYN-ACK à l’initiateur ; mais généralement ils seront les mêmes.

Par exemple, si vous exécutez tcpdump avec une expression comme tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-syn|tcp-ack sur les deux points de terminaison, et que vous ouvrez une connexion SSH à partir d’un point de terminaison à l’autre en dehors de WireGuard, vous verrez une sortie de tcpdump comme celle-ci sur le côté initiateur de la connexion :

$ sudo tcpdump -ni eth0 'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-syn|tcp-ack'
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
17:16:55.656028 IP 192.168.1.11.19546 > 203.0.113.2.22: Flags [S], seq 3349242392, win 64240, options [mss 1460,sackOK,TS val 2936811543 ecr 0,nop,wscale 7], length 0
17:16:55.656089 IP 203.0.113.2.22 > 192.168.1.11.19546: Flags [S.], seq 735473634, ack 3349242393, win 62643, options [mss 1360,sackOK,TS val 3872048576 ecr 2936811543,nop,wscale 6], length 0

Et une sortie comme celle-ci sur le côté receveur de la connexion :

$ sudo tcpdump -ni eth0 'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-syn|tcp-ack'
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
17:16:55.656028 IP 198.51.100.11.19546 > 192.168.200.22.22: Flags [S], seq 3349242392, win 64240, options [mss 1360,sackOK,TS val 2936811543 ecr 0,nop,wscale 7], length 0
17:16:55.656089 IP 192.168.200.22.22 > 198.51.100.11.19546: Flags [S.], seq 735473634, ack 3349242393, win 62643, options [mss 8960,sackOK,TS val 3872048576 ecr 2936811543,nop,wscale 6], length 0

Cela montre que le point de terminaison initiateur a d’abord envoyé un paquet SYN avec une taille maximale segmentaire (MSS) de 1460 (indiquant un MTU de 1500 sur son interface Ethernet), mais au moment où il est arrivé au point de terminaison receveur, certains routeurs intermédiaires le long du chemin avaient réduit la taille maximale segmentaire à 1360. De même, le point de terminaison receveur avait d’abord envoyé son paquet SYN-ACK en retour avec une taille maximale segmentaire de 8960 (indiquant un MTU de 9000 sur son interface Ethernet), mais il avait été réduit à 1360 au moment où il était revenu à l’initiateur.

Comme cette connexion utilise IPv4, nous ajoutons 40 octets à la taille maximale segmentaire négociée de 1360 pour obtenir une taille MTU de 1400 pour le lien le plus étroit dans la connexion. Ensuite, nous soustrayons 60 octets de cette taille MTU du lien pour obtenir la taille MTU que nous devons définir pour une interface WireGuard utilisant cette connexion (100 octets inférieurs à ce que nous aurions généralement attendu).

Paquet trop grand

Avec IPv6, vous pouvez également utiliser tcpdump pour vérifier les messages ICMPv6 “Packet Too Big”, qui incluent la taille de l’MTU à laquelle les paquets doivent être réduits. Cependant, cela ne fonctionnera que si le point de terminaison source n’est pas derrière NAT66 ou un pare-feu restrictif bloquant les messages ICMPv6. De plus, vous devez vous assurer d’envoyer un message assez grand du côté initiateur (comme un téléchargement de fichier) pour obtenir un message “Packet Too Big” renvoyé à l’initiateur, ou un message assez grand du côté récepteur (comme un téléchargement de fichier) pour obtenir un message “Packet Too Big” renvoyé au récepteur. (Il se peut que vous deviez répéter le processus une ou plusieurs fois pour trouver enfin le point de congestion le plus petit.)

Par exemple, si vous exécutez tc

Voici le texte corrigé :


Utilisez pdump avec une expression comme icmp6[icmp6type] == icmp6-packettoobig sur un point de terminaison, et que vous essayez ensuite d’envoyer un paquet trop grand depuis celui-ci vers l’autre point de terminaison via IPv6, vous devriez voir une sortie similaire à celle-ci de tcpdump :

$ sudo tcpdump -ni eth0 'icmp6[icmp6type] == icmp6-packettoobig'
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
18:13:47.908474 IP6 2001:db8:100::1 > 2001:db8:200::2: ICMP6, packet too big, mtu 1400, length 1240

Soustrayez 80 de la taille de l’MTU indiquée dans le message ICMPv6 (1400 dans l’exemple ci-dessus), et définissez cette valeur comme MTU pour votre interface WireGuard.

Restriction de la taille des segments (MSS Clamping)

Avec une connexion WireGuard site à site, une fois que vous avez déterminé la taille d’MTU appropriée pour les interfaces WireGuard sur chaque côté de la connexion, assurez-vous également d’ajouter une règle de restriction de la taille des segments (MSS clamping) au pare-feu sur un ou deux côtés. Une telle règle dirige le pare-feu à réécrire la valeur demandée de MSS dans les paquets TCP où la valeur MSS du paquet est supérieure à la calculée par le pare-feu (qui détermine cette valeur en utilisant l’MTU des interfaces réseau du pare-feu sur le chemin du paquet, et les tailles d’en-tête de la version TCP/IP utilisée).

Cela garantira que les connexions TCP entre deux points de terminaison qui ne connaissent pas eux-mêmes la réduction de l’MTU sur le tunnel WireGuard entre eux auront leur MSS ajusté automatiquement, sans nécessiter des messages ICMP supplémentaires ou en risquant une fragmentation des paquets.

La règle suivante iptables restreint tous les MSS de toutes les connexions TCP transmises par le pare-feu :

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Avec nftables, vous ajouteriez une règle similaire quelque part dans le hook forward d’une chaîne filter :

table inet filter {
    ...
    chain forward {
        type filter hook forward priority 0; policy drop;
        ...
        tcp flags syn / syn,rst tcp option maxseg size set rt mtu
        ...
    }
    ...
}
Tip

Voir le guide WireGuard avec Nftables pour un exemple qui effectue une restriction de MSS d'une manière légèrement plus ciblée, en restreignant simplement les paquets sortants du tunnel WireGuard à chaque site — ce qui évite de réaliser le travail de restriction si ce n'est pas nécessaire.

Tamponnement des Paquets

Les paramètres réseau par défaut la plupart des systèmes d’exploitation modernes sont déjà bien calibrés pour gérer quelques dizaines de connexions réseau concurrentes. Cependant, si vous exécutez un hub WireGuard, une passerelle ou un point de terminaison de service qui gère centaines de connexions WireGuard concurrentes, il existe quelques paramètres sur celui-ci que vous pouvez ajuster qui pourraient améliorer les performances.

Sur Linux en particulier, il existe trois ensembles de paramètres du noyau liés au tampon des paquets qui peuvent être ajustés pour améliorer le débit de la connexion WireGuard. Effectuez vos tests de charge avant et après pour voir si vos modifications ont un effet. La méthode d’essai et d’erreur est la seule façon de déterminer la valeur optimale pour chaque paramètre ; une bonne règle de thumb est d’essayer de doubler la valeur actuelle du paramètre, et de voir s’il y a un effet.

Vous pouvez afficher la valeur actuelle d’un paramètre du noyau avec la commande sysctl :

$ sysctl net.core.netdev_budget
net.c

```markdown
ore.netdev_budget = 300

Et vous pouvez la modifier (jusqu'au prochain redémarrage) avec l'indicateur `-w` :

```bash
$ sudo sysctl -w net.core.netdev_budget=600

Pour appliquer vos paramètres personnalisés après un redémarrage du système, ajoutez-les au fichier /etc/sysctl.conf (ou à tout fichier dans le répertoire /etc/sysctl.d/, comme /etc/sysctl.d/custom.conf).

Taux de traitement des paquets

Sur un serveur avec un CPU puissant, vous pourriez être en mesure d’améliorer le débit en augmentant le nombre de paquets traités par cycle d’interrogation du pilote réseau, permettant au serveur de nettoyer les paquets tamponnés plus efficacement. Essayez d’ajuster ces paramètres du noyau :

net.core.netdev_budget
Nombre maximum de paquets qui peuvent être traités pendant un cycle d’interrogation. Le cycle est terminé lorsque cette valeur ou net.core.netdev_budget_usecs est atteinte.
net.core.netdev_budget_usecs
Nombre maximum de microsecondes qui peuvent s’écouler pendant un cycle d’interrogation.
net.core.dev_weight
Nombre maximum de paquets (par cœur CPU) à partir de la file d’attente en attente qui peuvent être traités pendant un cycle d’interrogation.
net.core.netdev_tstamp_prequeue
Définissez cette valeur à 0 pour permettre une distribution plus équitable du traitement sur les coeurs CPU.

Buffers d’envoi et de réception UDP

Si le processeur de votre serveur est assez puissant pour nettoyer rapidement beaucoup de paquets, augmenter le nombre brut de paquets UDP qu’il peut tamponner peut également lui permettre de gérer un débit WireGuard plus élevé. Essayez d’ajuster ces paramètres du noyau :

net.core.rmem_default
Taille par défaut du tampon de réception d’un socket en octets. Lorsque vous augmentez cette valeur, assurez-vous également d’augmenter la taille de net.core.rmem_max pour qu’elle soit au moins aussi grande que celle-ci. Les paquets WireGuard seront ajoutés à un tampon de cette taille lorsqu’ils sont reçus — si le tampon (et la file d’attente de retraitement) est plein, les paquets entrants seront déchargés jusqu’à ce qu’espace puisse être libéré en traitant les paquets déjà dans le tampon.
net.core.rmem_max
Taille maximale du tampon de réception d’un socket en octets. Généralement, il n’y a pas de raison de définir cette valeur plus grande que net.core.rmem_default.
net.core.wmem_default
Taille par défaut du tampon d’envoi d’un socket en octets. Lorsque vous augmentez cette valeur, assurez-vous également d’augmenter la taille de net.core.wmem_max pour qu’elle soit au moins aussi grande que celle-ci. Les paquets WireGuard seront ajoutés à un tampon de cette taille lorsqu’ils sont envoyés — si le tampon est plein, les paquets sortants seront déchargés jusqu’à ce qu’espace puisse être libéré en envoyant les paquets déjà dans le tampon. (Cela ne devrait pas être aussi grave qu’avec le tampon de réception.)
net.core.wmem_max
Taille maximale du tampon d’envoi d’un socket en octets. Généralement, il n’y a pas de raison de définir cette valeur plus grande que net.core.wmem_default.
net.core.netdev_max_backlog
Nombre maximal de paquets (par cœur CPU) qui peuvent être tamponnés dans la file d’attente du pilote réseau avant qu’ils ne soient traités.

La file d'attente des paquets permet de tamponner temporairement les paquets jusqu'à ce qu'il y ait de l'espace pour les ajouter au tampon de réception approprié du socket.

Notez que les retours diminuent avec l'augmentation de ces valeurs, car à un certain point, vous atteindrez le stade où vous tamponnerez plus de paquets que le serveur ne peut traiter. Lorsque cela se produit, votre mesure de performance s'en dégradera rapidement par rapport au niveau précédent, car le serveur commencera à rejeter les paquets à nouveau — mais cette fois avec un délai plus important qui rend plus difficile pour les clients de réduire leur propre taux d'envoi — créant les conditions pour [le bloat de tampon](https://www.bufferbloat.net/).

#### Tampons TCP d'envoi/reception

Si vous essayez d'améliorer le rendement d'une application qui utilise TCP (comme une application web), et que cette application est hébergée sur un point de terminaison WireGuard, vous pourriez également vouloir essayer d'ajuster les paramètres du noyau liés au tampon TCP sur ce point de terminaison. En particulier, essayez d'ajuster ces paramètres :

`net.ipv4.tcp_rmem`
:   Tailles des tampons de réception des sockets TCP en octets : minimum, par défaut et maximum. Le noyau peut ajuster automatiquement la taille du tampon réellement allouée pour un socket entre le minimum et le maximum.

`net.ipv4.tcp_wmem`
:   Tailles des tampons d'envoi des sockets TCP en octets : minimum, par défaut et maximum. Le noyau peut ajuster automatiquement la taille du tampon réellement allouée pour un socket entre le minimum et le maximum.

`net.ipv4.tcp_adv_win_scale`
:   Facteur d'échelle de la fenêtre TCP. Consultez l'article de Cloudflare [Optimizing TCP for high WAN throughput while preserving low latency](https://blog.cloudflare.com/optimizing-tcp-for-high-throughput-and-low-latency/) pour une explication excelente de comment cela fonctionne en conjonction avec `net.ipv4.tcp_rmem` et `net.ipv4.tcp_wmem`.

`net.core.somaxconn`
:   Nombre maximum de paquets qui peuvent être tamponnés dans les files d'attente TCP. Consultez l'article de Cloudflare [Gestion des paquets SYN en production](https://blog.cloudflare.com/syn-packet-handling-in-the-wild/) pour une discussion détaillée sur la calibration de ce paramètre.

### Suivi des Connexions

Le suivi des connexions (appelé "conntrack" en anglais) permet à un pare-feu d'identifier et de regrouper tous les paquets individuels envoyés et reçus entre deux points de terminaison au sein d'une connexion bidirectionnelle continue entre ces deux points. En utilisant l'ensemble plus large d'une connexion continue, le pare-feu peut "se souvenir" des paquets qui passent dans un sens à travers la connexion afin qu'il puisse appliquer des règles spéciales aux paquets qui reviennent de l'autre côté. Les pare-feux ayant cette capacité sont appelés pare-feux étatifs.

Si vous exécutez vos connexions WireGuard à travers un pare-feu étatif, le système conntrack du pare-feu ajoutera une certaine surcharge de performance supplémentaire. L'impact de cela sera négligeable, cependant  sauf si vous exécutez centaines de connexions simultanées à travers celui-ci.

Le suivi des connexions est généralement utilisé pour des choses comme le NAT, la masquarade de connexion, le transfert de ports ou les connexions sortantes uniquement. Si vous ne utilisez aucune de ces fonctionnalités avec WireGuard, vous pouvez trouver que vous pouvez améliorer le débit en désactivant le suivi des connexions pour vos connexions WireGuard.

Par exemple, les règles iptables suivantes désactiveront le suivi des connexions pour le trafic envoyé ou reçu à l'intérieur d'un tunnel WireGuard (où l'interface WireGuard est nommée `wg0`):

```bash
iptables -t raw -A PREROUTING -i wg0 -j NOTRACK
iptables -t raw -A OUTPUT -o wg0 -j NOTRACK

Et les règles iptables suivantes feront la même chose pour le tunnel WireGuard lui-même (pour une interface WireGuard écoutant sur le port 51820):

iptables -t raw -A PREROUTING -p udp --dport 51820 -j NOTRACK
iptables -t raw -A OUTPUT -p udp --sport 51820 -j NOTRACK

Les règles équivalentes pour nftables ressembleraient à ceci :

table inet raw {
    ...
    chain prerouting {
        type filter hook prerouting priority -300; policy accept;
        udp dport 51820 notrack
        iifname "wg0" notrack
        ...
    }
    ...
    chain output {
        type filter hook output priority -300; policy accept;
        udp sport 51820 notrack
        oifname "wg0" notrack
        ...
    }
    ...
}

D’autre part, si vous utilisez le suivi des connexions sur un système Linux qui traite centaines ou mille de connexions simultanées, vous pourriez vouloir ajuster les paramètres suivants du noyau pour s’assurer que la table de hachage de suivi des connexions du système ne soit pas complètement remplie :

  • net.netfilter.nf_conntrack_buckets
    Taille de la table de hachage de suivi des connexions.
  • net.netfilter.nf_conntrack_max
    Nombre maximum d’entrées autorisées dans la table de hachage de suivi des connexions.

Vous pouvez utiliser la commande conntrack pour vérifier les statistiques de suivi des connexions (elle est disponible dans la plupart des distributions Linux via le paquet conntrack ou conntrack-tools). La commande conntrack -L affichera le contenu actuel de la table de hachage de suivi des connexions, et la commande conntrack -S montrera les statistiques cumulatives du suivi des connexions du système :

$ sudo conntrack -L
udp      17 19 src=192.168.200.22 dst=185.125.190.58 sport=60354 dport=123 src=185.125.190.58 dst=192.168.200.22 sport=123 dport=60354 mark=0 use=1
udp      17 21 src=192.168.200.22 dst=69.89.207.99 sport=46452 dport=123 src=69.89.207.99 dst=192.168.200.22 sport=123 dport=46452 mark=0 use=1
tcp      6 299 ESTABLISHED src=192.168.200.22 dst=5.180.19.95 sport=22 dport=28499 src=5.180.19.95 dst=192.168.200.22 sport=28499 dport=22 [ASSURED] mark=0 use=1
udp      17 25 src=192.168.200.22 dst=169.254.169.123 sport=56722 dport=123 src=169.254.169.123 dst=192.168.200.22 sport=123 dport=56722 mark=0 use=1
udp      17 29 src=127.0.0.1 dst=127.0.0.53 sport=51869 dport=53 src=127.0.0.53 dst=127.0.0.1 sport=53 dport=51869 mark=0 use=1
udp      17 25 src=192.168.200.22 dst=68.233.45.146 sport=59584 dport=123 src=68.233.45.146 dst=192.168.200.22 sport=123 dport=59584 mark=0 use=1
conntrack v1.4.6 (conntrack-tools): 6 flow entries have been shown.
$ sudo conntrack -S
cpu=0           found=3 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=5 (null)=0 (null)=0
cpu=1           found=2 invalid=1 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=3 (null)=0 (null)=0

De plus, si vous utilisez le suivi des connexions pour les connexions TCP transitant à travers votre réseau WireGuard, vous pouvez trouver que le système de suivi des connexions marquera occasionnellement les connexions TCP établies comme « invalides », en raison de paquets TCP manquants ou hors d’ordre. Si votre pare-feu supprime les flux de suivi des connexions invalides, ces connexions seront terminées brutalement. En changeant la valeur des deux paramètres du noyau suivants à 1, cela empêchera cela de se produire :

  • net.netfilter.nf_conntrack_be_liberal
    Définissez cette valeur sur 1 pour éviter de marquer les violations d’état TCP comme invalides (sauf pour les paquets RST hors fenêtre).
  • net.netfilter.nf_conntrack_ignore_invalid_rst
    Définissez cette valeur sur 1 pour éviter de marquer les paquets RST hors fenêtre comme invalides.

12/9/2022

(mis à jour 9/17/2023)

par Justin Ludwig