Je connais des taux de transfert OpenVPN extrêmement lents entre deux serveurs. Pour cette question, je vais appeler les serveurs Serveur A et Serveur B.
Le serveur A et le serveur B exécutent CentOS 6.6. Les deux sont situés dans des centres de données avec une ligne de 100 Mbits et les transferts de données entre les deux serveurs en dehors d'OpenVPN tournent près de ~ 88 Mbps.
Cependant, lorsque j'essaie de transférer des fichiers via la connexion OpenVPN que j'ai établie entre le serveur A et le serveur B, j'obtiens un débit d'environ 6,5 Mbps.
Résultats des tests d'iperf:
[ 4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49184
[ 4] 0.0-10.0 sec 7.38 MBytes 6.19 Mbits/sec
[ 4] 0.0-10.5 sec 7.75 MBytes 6.21 Mbits/sec
[ 5] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49185
[ 5] 0.0-10.0 sec 7.40 MBytes 6.21 Mbits/sec
[ 5] 0.0-10.4 sec 7.75 MBytes 6.26 Mbits/sec
Mis à part ces tests OpenVPN iperf, les deux serveurs sont pratiquement complètement inactifs avec une charge nulle.
Le serveur A se voit attribuer l'IP 10.0.0.1 et c'est le serveur OpenVPN. Le serveur B se voit attribuer l'IP 10.0.0.2 et c'est le client OpenVPN.
La configuration OpenVPN pour le serveur A est la suivante:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
La configuration OpenVPN pour le serveur B est la suivante:
port 1194
proto tcp-client
dev tun0
remote 204.11.60.69
ifconfig 10.0.0.2 10.0.0.1
secret static.key
comp-lzo
verb 3
Ce que j'ai remarqué:
1. Ma première pensée a été que je goulot d'étranglement du CPU sur le serveur. OpenVPN est monothread et ces deux serveurs exécutent des processeurs Intel Xeon L5520 qui ne sont pas les plus rapides. Cependant, j'ai exécuté une top
commande lors de l'un des tests iperf et j'ai appuyé 1
pour afficher l'utilisation du processeur par cœur et j'ai constaté que la charge du processeur était très faible sur chaque cœur:
top - 14:32:51 up 13:56, 2 users, load average: 0.22, 0.08, 0.06
Tasks: 257 total, 1 running, 256 sleeping, 0 stopped, 0 zombie
Cpu0 : 2.4%us, 1.4%sy, 0.0%ni, 94.8%id, 0.3%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 946768k total, 633640k used, 313128k free, 68168k buffers
Swap: 4192188k total, 0k used, 4192188k free, 361572k cached
2. Les temps de ping augmentent considérablement sur le tunnel OpenVPN pendant que iperf est en cours d'exécution. Lorsque iperf n'est pas en cours d'exécution, les temps de ping sur le tunnel sont systématiquement de 60 ms (normal). Mais lorsque iperf fonctionne et pousse un trafic dense, les temps de ping deviennent irréguliers. Vous pouvez voir ci-dessous comment les temps de ping sont stables jusqu'au 4ème ping lorsque j'ai commencé le test iperf:
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=60.2 ms
** iperf test begins **
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=146 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=114 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=85.6 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=176 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=204 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=231 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=197 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=233 ms
64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=152 ms
64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=216 ms
3. Comme mentionné ci-dessus, j'ai exécuté iperf en dehors du tunnel OpenVPN et le débit était normal - ~ 88 Mbps en permanence.
Ce que j'ai essayé:
1. Je pensais que la compression pouvait salir les choses, j'ai donc désactivé la compression en supprimant les comp-lzo
deux configurations et en redémarrant OpenVPN. Pas d'amélioration.
2. Même si j'avais précédemment constaté que l'utilisation du processeur était faible, je pensais que le chiffrement par défaut pouvait être un peu trop intensif pour que le système puisse suivre. J'ai donc ajouté cipher RC2-40-CBC
aux deux configurations (un chiffrement très léger) et redémarré OpenVPN. Pas d'amélioration.
3. J'ai lu sur divers forums comment l'ajustement du fragment, de mssfix et de mtu-tun pourrait améliorer les performances. J'ai joué avec quelques variations comme décrit dans cet article , mais encore une fois, aucune amélioration.
Avez-vous des idées sur ce qui pourrait causer de si mauvaises performances OpenVPN?
cipher none
même si je doute que cela puisse aider.Réponses:
Après beaucoup de recherches sur Google et de fichiers de configuration, j'ai trouvé la solution. J'obtiens maintenant des vitesses soutenues de 60 Mbps et j'éclate jusqu'à 80 Mbps. C'est un peu plus lent que les taux de transfert que je reçois en dehors du VPN, mais je pense que c'est aussi bon que possible.
La première étape consistait à définir
sndbuf 0
etrcvbuf 0
dans la configuration OpenVPN pour le serveur et le client.J'ai fait ce changement après avoir vu une suggestion de le faire sur un post du forum public (qui est une traduction anglaise d'un post original russe ) que je citerai ici:
L'auteur poursuit en décrivant comment pousser les ajustements de la taille de la mémoire tampon vers le client si vous ne contrôlez pas vous-même la configuration du client.
Après avoir effectué ces modifications, mon débit a augmenté jusqu'à 20 Mbps. J'ai ensuite vu que l'utilisation du processeur était un peu élevée sur un seul cœur, j'ai donc supprimé
comp-lzo
(compression) de la configuration à la fois sur le client et le serveur. Eureka! Les vitesses de transfert ont grimpé jusqu'à 60 Mbps en continu et 80 Mbps en rafale.J'espère que cela aide quelqu'un d'autre à résoudre ses propres problèmes avec la lenteur d'OpenVPN!
la source
Après quelques essais, j'ai trouvé une bonne solution. Dans mon cas, la réponse de @ Elliot n'a pas aidé. Googler plus, j'ai découvert cet extrait pour ajouter la configuration du serveur qui a fait le travail
J'ai un petit serveur OpenVPN fonctionnant sur un Raspberry PI3 et maintenant je reçois 71 Mbps en liaison descendante et 16Mbps en liaison montante . Le téléchargement est limité car la puissance du processeur. En ce moment, ma configuration est la suivante:
OpenVPN 2.4.0 arm-unknown-linux-gnueabihf avec OpenSSL 1.0.2l
Cela semble tellement bizarre qu'un tel problème concernant la configuration par défaut d'un tampon existe toujours.
[ MODIFIER ] Mon fichier client.ovpn est structuré comme suit:
la source
Selon la configuration, vous utilisez TCP comme transport pour le tunnel. Envisagez d'utiliser UDP au lieu de TCP, car la tente de connexions TCP empilées crée des problèmes dans les situations de perte de paquets.
Comme référence, voir Pourquoi TCP sur TCP est une mauvaise idée
la source
We need to ensure that the data packets we transmit arrive as expected.
et n'est-ce pas géré par le protocole qui est tunnelisé? Pourquoi pensez-vous que votre tunnel doit être la chose qui impose cela?Nous avons deux serveurs intercontinentaux reliés entre eux, les vitesses entre eux oscillant autour de 220 Mbit / s.
Cependant, à l'intérieur du tunnel OpenVPN (UDP), les vitesses seraient en moyenne de 21 Mbit / s, soit environ 10 fois plus lentement.
(Il y a une latence importante entre les serveurs: environ 130 ms, et les transferts ont été mesurés en utilisant Iperf3 en mode TCP.)
J'ai essayé toutes les suggestions de réponses ici au moment de la rédaction de cet article, et rien n'a aidé.
La seule chose qui a finalement aidé est ce petit peu:
Selon le manuel de référence OpenVPN:
Après avoir défini ce paramètre sur le serveur et le client, j'ai pu atteindre les mêmes vitesses de «liaison directe» (~ 250 Mbit / s) également sous le tunnel OpenVPN.
J'utilisais déjà le
rcvbuf 0
etsndbuf 0
, mais au moins seul , ils n'ont pas aidé du tout.J'ai trouvé ces recommandations dans les deux: cette page dans les forums OpenVPN , et aussi dans cette page dans le wiki UDPspeeder .
Sur une autre note: j'ai pu atteindre des vitesses plus élevées en utilisant des transferts UDP dans iperf, mais cela entraînerait également une perte de paquets raisonnablement élevée.
Si, par hasard, vous avez besoin d'utiliser un VPN pour tunneler deux endroits avec des liaisons avec perte, je vous conseille d'envisager d'utiliser une sorte de tunnel de correction d'erreur vers l'avant (FEC) sous le VPN lui-même. Les deux que j'ai réussi à trouver et à travailler sont:
Les deux peuvent aider beaucoup avec la perte de paquets (en dépensant plus de bande passante en premier lieu), et finalement même conduire à un débit de données plus élevé, même avec la surcharge supplémentaire, ce qui est vraiment bien si vous me demandez.
(C'est parce que la perte de paquets peut vraiment gâcher un réseau , spécialement TCP . Voir page 6.)
J'aurais préféré utiliser OpenVPN sur UDP, pour toutes les raisons habituelles, mais j'ai eu du mal à gérer UDPspeeder lorsque vous avez à la fois une latence de plus de 100 ms et des vitesses de> 10 Mbit / s.
Cependant, kcptun a très bien fonctionné avec très peu de réglages et a vraiment augmenté le débit de nos serveurs les uns avec les autres. =)
Sur une note étendue, vous trouverez ici des explications plus détaillées sur la modification de certaines parties des performances d'OpenVPN.
la source
Pour moi, j'avais un serveur VPS avec une configuration de serveur openvpn au Japon et ma connexion client utilisait un DDWRT en mode client OpenVPN à New York. J'obtenais seulement 1-2mbps sur une connexion de 100mbit. Le mieux que j'ai pu l'optimiser était de 5 Mbps, ce qui était suffisant pour ce dont j'avais besoin, qui est aussi optimisé que possible, je crois.
Paramètres de mon serveur OpenVPN:
Mes paramètres client DDWRT OpenVPN sont également visibles dans ma capture d'écran:
la source