executando iperf sobre ssh

executando iperf sobre ssh

Estou tentando avaliar a conexão de rede entre 2 ubuntuservidores nos quais não tenho rootprivilégios.

Consegui baixar e iniciar iperf-2.0.9em ambas as caixas.

Meu problema é que não consigo abrir portas (através do firewall).

Portanto, o cliente não pode se conectar ao servidor.

Existe alguma maneira de fazer isso funcionar em uma conexão ssh entre os dois? encaminhar uma porta ou algo assim?

Qualquer solução é muito apreciada!

Observação: Fiz scpvários arquivos indo e voltando... Mas isso não chega nem perto do que iperfpode me dar

Responder1

O iperf permite ao usuário especificar as portas em três locais: um onde o servidor escuta, outro onde o cliente se conecta e outro onde o cliente gera um mini-servidor para a opção -d/ . --dualtestPrecisamos dos três para isso.

Embora seja possível fazer isso com menos, achei mais fácil especificar todas as portas para poder controlá-las melhor. Nesta configuração, assumirei uma configuração semelhante a esta:

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

A "caixa de controle" também pode ter acesso direto ao SSH na caixa 2, mas não precisamos dela. Para isso, a Caixa nº 2 será o servidor iperf escutando em 7001 e a caixa 2 será um cliente escutando na porta 7002. Podem ser quaisquer portas acessíveis, escolhi essas duas aleatoriamente.

Primeiro, conecte-se à caixa nº 1. Em seguida, você precisa se conectar à Caixa nº 2. Nesta sessão aninhada, você precisará criar dois túneis de porta: um direto e outro reverso. As opções ssh que fazem isso são -L7001:localhost:7001para frente e -R7002:localhost:7002para trás. Como o iperf espera que as portas estejam localizadas em um host remoto, cada túnel deve ser simétrico (o mesmo número de porta em ambas as extremidades do túnel). Em seguida, inicie o servidor iperf escutando na porta 7001 ( iperf -s -p 7001).

Pode ser algo assim:

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)
------------------------------------------------------------

Depois de iniciado, abra uma segunda sessão na Caixa nº 1. Aqui, inicie um cliente iperf para localhost na porta 7001, com a porta de escuta em 7002 (a porta de escuta padrão é 5001 como o servidor). Isso significa que o cliente tentará se conectar a um servidor iperf em localhost:7001, que o SSH captura e envia para a caixa nº 2. Em seguida, ele inicia um "mini" servidor iperf escutando em 7002. Depois que a conexão do cliente com o servidor é iniciada, o cliente iperf informa ao servidor iperf para se conectar novamente na porta 7002. O servidor observa que a conexão de entrada vem de 127.0 .0.1 (ou ::1 dependendo da configuração), então inicia um "mini" cliente que se conectará a 127.0.0.1:7002. Como também temos o encaminhamento inverso, o ssh também captura essa conexão e a envia para a caixa 1.

Sua segunda sessão pode ser mais ou menos assim:

(nota lateral para este exemplo: configurei o tempo para 30s para um teste diferente; o padrão 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

Quando o cliente terminar o teste, a janela do servidor poderá ser semelhante a esta:

...
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

AVISO:O SSH distorcerá as velocidades de conexão percebidas. Executar iperf sem SSH entre as mesmas duas caixas resultou nisso (as caixas estão nas mesmas funções):

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

Tentei mexer nas configurações da janela TCP, no comprimento do buffer, TCP_NODELAY e usar várias sessões SSH, mas a sobrecarga ainda estava presente. Também experimentei o HPN-SSH, mas na verdade obtive melhor desempenho em relação ao SSH normal, então acho que perdi uma configuração quando estava configurando o HPN. A execução das conexões iperf em simplex em vez de duplex (opção -r/ --tradeoff(fazer um teste bidirecional individualmente)) obteve resultados mais próximos da velocidade do link, mas ainda com sobrecarga SSH significativa.

Dito isto, se necessita de criar uma ponte entre estas duas máquinas e medir a capacidade dessa ponte, esta solução é perfeita. Se você estiver tentando medir o rendimento bruto entre essas máquinas, os números fornecidos por esses testes serão menores (e provavelmente muito menores) que a velocidade do link.

informação relacionada