запуск iperf через ssh

запуск iperf через ssh

Я пытаюсь протестировать сетевое соединение между двумя ubuntuсерверами, на которых у меня нет rootпривилегий.

Мне удалось загрузить и запустить iperf-2.0.9на обоих устройствах.

Моя проблема в том, что я не могу открыть порты (через брандмауэр).

Поэтому клиент не может подключиться к серверу.

Есть ли способ заставить это работать через SSH-соединение между ними? Переадресовать порт или что-то в этом роде?

Любое решение будет высоко оценено!

Примечание: Я сделал scpнесколько файлов туда и обратно... Но это даже близко не то, что iperfможет мне дать

решение1

iperf позволяет пользователю указывать порты в трех местах: в одном, где слушает сервер, в другом, где подключается клиент, и в третьем, где клиент создает мини-сервер для опции -d/ --dualtest. Для этого нам нужны все три.

Хотя это можно было бы сделать и с меньшим количеством, я обнаружил, что проще указать все порты, чтобы лучше отслеживать их. В этой настройке я предположу, что настройка выглядит примерно так:

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

"Контрольный блок" также может иметь прямой доступ к SSH на блоке № 2, но нам это не нужно. Для этого блок № 2 будет сервером iperf, прослушивающим порт 7001, а блок 2 будет клиентом, прослушивающим порт 7002. Это могут быть любые доступные порты, я выбрал эти два наугад.

Сначала подключитесь к ящику № 1. Затем вам нужно подключиться к ящику № 2. В этом вложенном сеансе вам нужно будет создать два туннеля портов: один прямой и один обратный. Параметры ssh, которые это делают, предназначены -L7001:localhost:7001для прямого и -R7002:localhost:7002обратного. Поскольку iperf ожидает, что порты будут расположены на удаленном хосте, каждый туннель должен быть симметричным (одинаковый номер порта на обоих концах туннеля). Затем запустите сервер iperf, прослушивающий порт 7001 ( iperf -s -p 7001).

Это может выглядеть примерно так:

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

После этого откройте второй сеанс для Box #1. Здесь запустите клиент iperf для localhost на порту 7001 с портом прослушивания 7002 (порт прослушивания по умолчанию — 5001, как и у сервера). Это означает, что клиент попытается подключиться к серверу iperf на localhost:7001, который SSH перехватит и отправит на box #2. Затем он запустит «мини» сервер iperf, прослушивающий 7002. После того, как соединение от клиента к серверу инициировано, клиент iperf прикажет серверу iperf подключиться обратно на порт 7002. Сервер замечает, что входящее соединение идет с 127.0.0.1 (или ::1 в зависимости от конфигурации), поэтому он запускает «мини» клиента, который подключится к 127.0.0.1:7002. Поскольку у нас также есть обратный переадресатор, ssh также захватывает это соединение и отправляет его на box 1.

Ваш второй сеанс может выглядеть примерно так:

(примечание к этому примеру: я установил время 30 с для другого теста; значения по умолчанию будет достаточно)

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

Когда клиент завершит тестирование, окно вашего сервера может выглядеть примерно так:

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

ПРЕДУПРЕЖДЕНИЕ:SSH Исказит воспринимаемую скорость соединения. Запуск iperf без SSH между теми же двумя ящиками дал следующее (ящики находятся в одинаковых ролях):

Клиент:

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

Сервер:

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

Я пробовал играть с настройками окна TCP, длиной буфера, TCP_NODELAY и использовать несколько сеансов SSH, но накладные расходы все еще присутствовали. Я также пробовал HPN-SSH, но на самом деле я получил лучшую производительность по сравнению с обычным SSH, так что я думаю, что есть настройка, которую я упустил, когда настраивал HPN. Запуск соединений iperf в симплексном режиме вместо дуплексного (опция -r/ --tradeoff(Выполнить двунаправленный тест индивидуально)) дал результаты, близкие к скорости соединения, но все еще со значительными накладными расходами SSH.

При всем при этом, если вам нужно создать мост между этими двумя машинами и измерить его пропускную способность, это решение идеально. Если вы пытаетесь измерить сырую пропускную способность между этими машинами, то цифры, которые предоставляют эти тесты, будут меньше (и, вероятно, намного меньше), чем скорость соединения.

Связанный контент