SSH를 통해 iperf 실행

SSH를 통해 iperf 실행

ubuntu나에게 권한이 없는 두 서버 간의 네트워크 연결을 벤치마킹하려고 합니다 root.

iperf-2.0.9두 상자 모두에서 다운로드하고 시작할 수 있었습니다 .

내 문제는 방화벽을 통해 포트를 열 수 없다는 것입니다.

따라서 클라이언트가 서버에 연결할 수 없습니다.

둘 사이의 SSH 연결을 통해 이 작업을 수행할 수 있는 방법이 있습니까? 포트나 다른 것을 전달 하시겠습니까?

어떤 솔루션이라도 대단히 감사하겠습니다!

메모: 파일을 여러개 왔다 갔다 했는데 scp... 그건 iperf제가 줄 수 있는 수준에 가깝지도 않습니다.

답변1

-diperf를 사용하면 사용자는 서버가 수신하는 위치, 클라이언트가 연결하는 위치, 클라이언트가 / 옵션 에 대해 미니 서버를 생성하는 위치 등 세 위치에서 포트를 지정할 수 있습니다 --dualtest. 이를 위해서는 세 가지가 모두 필요합니다.

더 적은 수로 수행하는 것이 가능할 수도 있지만 모든 포트를 지정하는 것이 더 쉬우므로 포트를 더 잘 추적할 수 있습니다. 이 설정에서는 다음과 같은 설정을 가정하겠습니다.

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

"제어 상자"는 상자 #2의 SSH에 직접 액세스할 수도 있지만 필요하지는 않습니다. 이를 위해 상자 #2는 7001에서 수신하는 iperf 서버가 되고 상자 2는 포트 7002에서 다시 수신하는 클라이언트가 됩니다. 이는 액세스 가능한 모든 포트일 수 있으며 저는 이 두 포트를 무작위로 선택했습니다.

먼저 상자 #1에 연결합니다. 다음으로 Box #2를 통해 연결해야 합니다. 이 중첩 세션에서는 두 개의 포트 터널(정방향 하나와 역방향 하나)을 생성해야 합니다. 이를 수행하는 SSH 옵션은 -L7001:localhost:7001정방향 및 -R7002:localhost:7002역방향에 대한 것입니다. iperf는 포트가 원격 호스트에 있을 것으로 예상하기 때문에 각 터널은 대칭이어야 합니다(터널 양쪽 끝의 동일한 포트 번호). 그런 다음 포트 7001( )에서 수신 대기하는 iperf 서버를 시작합니다 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 클라이언트를 포트 7001에서 localhost로 시작하고 청취 포트는 7002입니다(기본 청취 포트는 서버와 마찬가지로 5001입니다). 이는 클라이언트가 localhost:7001의 iperf 서버에 연결을 시도하고 SSH가 이를 받아 상자 #2로 보내는 것을 의미합니다. 그런 다음 7002에서 수신 대기하는 "미니" iperf 서버를 시작합니다. 클라이언트에서 서버로의 연결이 시작되면 iperf 클라이언트는 iperf 서버에게 포트 7002에서 다시 연결하라고 지시합니다. 서버는 인바운드 연결이 127.0에서 오고 있음을 기록합니다. .0.1(또는 구성에 따라 ::1)이므로 127.0.0.1:7002에 연결되는 "미니" 클라이언트가 시작됩니다. 역방향 전달도 설정되어 있으므로 ssh는 이 연결도 스냅하여 상자 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는 인식된 연결 속도를 왜곡합니다. 동일한 두 상자 사이에서 SSH 없이 iperf를 실행하면 다음과 같은 결과가 나옵니다(상자는 동일한 역할에 있음).

고객:

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 오버헤드가 상당합니다.

즉, 이 두 시스템 사이에 브리지를 만들고 해당 브리지의 용량을 측정해야 하는 경우 이 솔루션이 완벽합니다. 이러한 시스템 간의 원시 처리량을 측정하려는 경우 이러한 테스트가 제공하는 수치는 링크 속도보다 낮습니다(아마도 훨씬 낮을 것입니다).

관련 정보