ejecutando iperf sobre ssh

ejecutando iperf sobre ssh

Estoy intentando comparar la conexión de red entre 2 ubuntuservidores en los que no tengo rootprivilegios.

Logré descargar e iniciar iperf-2.0.9en ambas cajas.

Mi problema es que no puedo abrir puertos (a través del firewall).

Entonces el cliente no puede conectarse al servidor.

¿Hay alguna manera de hacer que esto funcione a través de una conexión ssh entre los dos? ¿Reenviar un puerto o algo así?

¡Cualquier solución es muy apreciada!

Nota: Hice scpvarios archivos de un lado a otro... Pero eso ni siquiera se acerca a lo que iperfpuedo darme

Respuesta1

iperf permite al usuario especificar los puertos en tres lugares: uno donde el servidor escucha, otro donde el cliente se conecta y otro donde el cliente genera un mini servidor para la opción -d/ . --dualtestNecesitamos los tres para esto.

Si bien podría ser posible hacerlo con menos, descubrí que era más fácil especificar todos los puertos para poder realizar un mejor seguimiento de ellos. En esta configuración, asumiré una configuración similar a esta:

-----------            -------          -------
| Control |  SSH #1,2  | Box |  SSH #3  | Box |
|   Box   | ---------> | #1  | -------> | #2  |
-----------            -------          -------

La "caja de control" también podría tener acceso directo a SSH en la caja n.° 2, pero no lo necesitamos. Para esto, el Cuadro #2 será el servidor iperf escuchando en 7001 y el Cuadro 2 será un cliente escuchando en el puerto 7002. Estos pueden ser cualquier puerto accesible, elegí esos dos al azar.

Primero, conéctese a la casilla n.° 1. A continuación, debe conectarse a la casilla n.° 2. En esta sesión anidada, deberá crear dos túneles de puerto: uno directo y otro inverso. Las opciones de ssh que hacen esto son -L7001:localhost:7001para avance y -R7002:localhost:7002retroceso. Debido a que iperf espera que los puertos estén ubicados en un host remoto, cada túnel debe ser simétrico (el mismo número de puerto en ambos extremos del túnel). Luego, inicie el servidor iperf escuchando en el puerto 7001 ( iperf -s -p 7001).

Podría verse algo como esto:

me@control$ ssh box1.example.com
box1$ ssh -L7001:localhost:7001 -R7002:localhost:7002 box2.example.com
box2$ iperf -s -p 7001
------------------------------------------------------------
Server listening on TCP port 7001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Una vez iniciado, abra una segunda sesión en el Cuadro n.° 1. Aquí, inicie un cliente iperf en localhost en el puerto 7001, con el puerto de escucha en 7002 (el puerto de escucha predeterminado es 5001 como el servidor). Esto significa que el cliente intentará conectarse con un servidor iperf en localhost:7001, que SSH toma y envía al cuadro n.° 2. Luego inicia un "mini" servidor iperf escuchando en 7002. Una vez que se inicia la conexión del cliente al servidor, el cliente iperf le dice al servidor iperf que se conecte nuevamente en el puerto 7002. El servidor observa que la conexión entrante proviene de 127.0 .0.1 (o ::1 dependiendo de la configuración), por lo que inicia un "mini" cliente que se conectará a 127.0.0.1:7002. Debido a que también tenemos el reenvío inverso, ssh también captura esta conexión y la envía al cuadro 1.

Su segunda sesión podría verse así:

(nota al margen para este ejemplo: configuré el tiempo en 30 segundos para una prueba diferente; el valor predeterminado será suficiente)

me@control$ ssh box1.example.com
box1$ iperf -c localhost -p 7001 -L 7002 -d -t 30
------------------------------------------------------------
Server listening on TCP port 7002
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to localhost, TCP port 7001
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 37014 connected with 127.0.0.1 port 7001
[  5] local 127.0.0.1 port 7002 connected with 127.0.0.1 port 51806
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-30.0 sec  1.26 GBytes   361 Mbits/sec
[  5]  0.0-30.2 sec  1.23 GBytes   349 Mbits/sec

Cuando el cliente haya terminado de probar, la ventana de su servidor podría verse así:

...
box2$ iperf -s -p 7001
------------------------------------------------------------
Server listening on TCP port 7001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 127.0.0.1 port 7001 connected with 127.0.0.1 port 41997
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 7002
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[  6] local 127.0.0.1 port 46864 connected with 127.0.0.1 port 7002
[ ID] Interval       Transfer     Bandwidth
[  6]  0.0-30.0 sec  1.23 GBytes   351 Mbits/sec
[  4]  0.0-30.2 sec  1.26 GBytes   359 Mbits/sec

ADVERTENCIA:SSH distorsionará las velocidades de conexión percibidas. La ejecución de iperf sin SSH entre los mismos dos cuadros produjo esto (los cuadros tienen las mismas funciones):

Cliente:

box1$ iperf -c box2.example.com -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to box2.example.com, TCP port 5001
TCP window size:  306 KByte (default)
------------------------------------------------------------
[  3] local 172.20.0.1 port 45722 connected with 172.20.0.2 port 5001
[  5] local 172.20.0.1 port 5001 connected with 172.20.0.2 port 60909
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.01 GBytes   866 Mbits/sec
[  5]  0.0-10.0 sec   823 MBytes   689 Mbits/sec

Servidor:

box2$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 172.20.0.2 port 5001 connected with 172.20.0.1 port 45722
------------------------------------------------------------
Client connecting to 172.20.0.1, TCP port 5001
TCP window size:  306 KByte (default)
------------------------------------------------------------
[  6] local 172.20.0.2 port 60909 connected with 172.20.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  6]  0.0-10.0 sec   823 MBytes   690 Mbits/sec
[  4]  0.0-10.0 sec  1.01 GBytes   864 Mbits/sec

Intenté modificar la configuración de la ventana TCP, la longitud del búfer, TCP_NODELAY y usar múltiples sesiones SSH, pero la sobrecarga aún estaba presente. También probé HPN-SSH, pero en realidad obtuve un mejor rendimiento que SSH normal, así que creo que hay una configuración que me perdí cuando estaba configurando HPN. Al ejecutar las conexiones iperf en modo simplex en lugar de dúplex (opción -r/ --tradeoff(Hacer una prueba bidireccional individualmente)) se obtuvieron resultados más cercanos a la velocidad del enlace, pero aún con una sobrecarga SSH significativa.

Dicho todo esto, si necesita crear un puente entre estas dos máquinas y medir la capacidad de ese puente, esta solución es perfecta. Si está intentando medir el rendimiento bruto entre estas máquinas, los números que proporcionen estas pruebas serán menores (y probablemente mucho menores) que la velocidad del enlace.

información relacionada