.png)
Actualmente estoy configurando una VPN de sitio a sitio entre dos VPS que requiere conexiones entrantes y salientes. Será utilizado por una aplicación de gran ancho de banda, por lo que necesito la máxima velocidad que pueda obtener a través de la conexión.
Usando iperf3, obtengo alrededor de 600 Mbit/s a través de la conexión de manera confiable, con un ping de ~30 ms.
A través de OpenSSH SCP, obtengo alrededor de 260 Mbit/s, con lo cual estoy contento dado el cifrado adicional.
He estado probando varios tipos de configuraciones de VPN, principalmente con OpenVPN. Probé cambios sndbuf/rcvbuf, sin cifrado, sin compresión, pero en general solo obtengo 20 Mbit con UDP, 40 Mbit con TLS en el puerto 443.
También configuré IPSec/L2TP, SoftEther (aunque solo obtuve 500 Kbit/s con eso) y el adaptador tun integrado OpenSSH. Ninguno de estos ha podido darme una velocidad iperf superior a 40 Mbit/s.
He estado observando de cerca el HDD y la CPU de cada nodo, y ninguno se ha saturado. Un servidor es significativamente menos potente, pero solo alcanza ~30% de uso de CPU durante la prueba.
Estoy un poco perdido. Necesito algo que pueda alcanzar velocidades superiores a 200 Mbit/s (lo cual sé con certeza que es posible) y solo necesita enrutarse de una interfaz virtual a otra. En teoría, para eso sirve SoftEther. ¿Debo seguir intentando arreglar SoftEther para obtener algún tipo de velocidad real?
¿Alguna sugerencia sobre más aspectos para probar/depurar/configurar para intentar poner en funcionamiento una interfaz de túnel sólida? ¿Existe otra pieza de software que ayude a enrutar las conexiones entrantes para que pueda usar un túnel similar a un proxy normal? ¡Gracias!
Respuesta1
Dado el enlace publicado en los comentarios, decidí echar otro vistazo a este artículo de openvpn: https://community.openvpn.net/openvpn/wiki/Gigabit_Networks_Linux
Pude alcanzar un promedio de ~150 Mbit/s usando un par de configuraciones de este artículo. Estos son los pasos que seguí para configurar mi OpenVPN para lograr esto.
Estos son los pasos que probé en orden:
- Configuración predeterminada (con AES-128): 14,7 Mbit/s
- Habilite mssfix 0, tun-mtu 6000, fragmento 0: 16,3 Mbit/s
- Configuración de 'cifrado ninguno': 17,7 Mbit/s
- Volver a AES-128, tun-mtu 9000: 22,0 Mbit/s
- tun-mtu 18000: 27,2 Mbit/s
- tun-mtu 36000: 37,2 Mbit/s
- tun-mtu 60000: 44,9 Mbit/s
- Configuración de 'cifrado BF-CBC' (no hay mucha diferencia): 44,0 Mbit/s
- sndbuf 393216, rcvbuf 393216 en servidor y cliente: 67,1 Mbit/s
- Aumento del tamaño de los buffers de recepción UDP de Linux: 102Mbps
- iperf3 [...] -P 10 para habilitar 10 conexiones en paralelo: SUMA:135 Mbit/s - 170 Mbit/s
Aquí hay una salida final de iperf3:
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=37.2 ms
$ iperf3 -c 10.8.0.1 -p 5201
Connecting to host 10.8.0.1, port 5201
[ 4] local 10.8.0.2 port 59230 connected to 10.8.0.1 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 10.3 MBytes 86.5 Mbits/sec 2 632 KBytes
[ 4] 1.00-2.00 sec 12.0 MBytes 101 Mbits/sec 7 569 KBytes
[ 4] 2.00-3.00 sec 11.4 MBytes 95.8 Mbits/sec 7 443 KBytes
[ 4] 3.00-4.00 sec 10.9 MBytes 91.2 Mbits/sec 5 443 KBytes
[ 4] 4.00-5.00 sec 11.7 MBytes 98.4 Mbits/sec 2 759 KBytes
[ 4] 5.00-6.00 sec 13.0 MBytes 109 Mbits/sec 6 822 KBytes
[ 4] 6.00-7.00 sec 13.5 MBytes 113 Mbits/sec 5 696 KBytes
[ 4] 7.00-8.00 sec 13.9 MBytes 117 Mbits/sec 6 696 KBytes
[ 4] 8.00-9.00 sec 11.8 MBytes 98.9 Mbits/sec 5 696 KBytes
[ 4] 9.00-10.00 sec 12.5 MBytes 105 Mbits/sec 4 696 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 121 MBytes 102 Mbits/sec 49 sender
[ 4] 0.00-10.00 sec 120 MBytes 101 Mbits/sec receiver
En comparación con la conexión directa sin VPN:
$ iperf3 -c [...] -p 5201
Connecting to host [...], port 5201
[ 4] local [...] port 52172 connected to [...] port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 51.9 MBytes 435 Mbits/sec 0 3.03 MBytes
[ 4] 1.00-2.00 sec 73.3 MBytes 615 Mbits/sec 0 3.03 MBytes
[ 4] 2.00-3.00 sec 73.3 MBytes 615 Mbits/sec 0 3.03 MBytes
[ 4] 3.00-4.00 sec 72.7 MBytes 610 Mbits/sec 0 3.03 MBytes
[ 4] 4.00-5.00 sec 72.1 MBytes 605 Mbits/sec 0 3.03 MBytes
[ 4] 5.00-6.00 sec 73.7 MBytes 619 Mbits/sec 0 3.03 MBytes
[ 4] 6.00-7.00 sec 75.0 MBytes 629 Mbits/sec 0 3.03 MBytes
[ 4] 7.00-8.00 sec 72.5 MBytes 608 Mbits/sec 0 3.03 MBytes
[ 4] 8.00-9.00 sec 74.9 MBytes 628 Mbits/sec 0 3.03 MBytes
[ 4] 9.00-10.00 sec 72.6 MBytes 609 Mbits/sec 0 3.03 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 712 MBytes 597 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 710 MBytes 596 Mbits/sec receiver
Que aprendí
- Mi red se benefició significativamente del aumento de tun-mtu.
- La congestión UDP es un gran problema. Aumentar el recvbuf de UDP de Linux mejoró significativamente el rendimiento de UDP. Los paquetes retransmitidos en iperf muestran que la congestión sigue siendo un problema.Se agradece cualquier sugerencia para mejorar.
- Las conexiones paralelas iperf3 ayudaron a aumentar aún más la velocidad.
- Los cifrados realmente no afectaron mucho el rendimiento mientras el núcleo de la CPU se mantuviera por debajo del 100%.
- Es difícil configurar una VPN en Internet abierta que alcance velocidades de gigabit.
- Esto sigue siendo 1/6 del rendimiento de la red simple.