SSH를 통해 iperf 실행

SSH를 통해 iperf 실행

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

두 상자를 모두 성공적으로 다운로드하고 실행했습니다 iperf-2.0.9.

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

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

둘 사이의 SSH 연결을 통해 이 작업을 수행할 수 있는 방법이 있습니까? 포트포워딩이라던가 뭔가요?

어떤 해결책이라도 대단히 감사하겠습니다!

노트: scp몇 개의 파일을 주고받았지만... iperf제게 준 것과는 전혀 거리가 멀었습니다.

답변1

iperf를 사용하면 사용자는 서버가 수신하는 위치, 클라이언트가 연결하는 위치, 클라이언트가 -d/ 옵션에 대한 --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의 두 번째 세션을 엽니다. 여기서는 포트 7001에서 localhost에 대한 iperf 클라이언트를 시작하고 포트 7002에서 수신 대기합니다(기본 수신 포트는 서버와 동일한 5001입니다). 이는 클라이언트가 localhost:7001의 iperf 서버에 연결을 시도하고 SSH를 통해 이를 가져와 상자 #2로 전송한다는 의미입니다. 그런 다음 7002를 수신하는 "미니" iperf 서버를 시작합니다. 클라이언트에서 서버로의 연결이 시작되면 iperf 클라이언트는 iperf 서버에 포트 7002에 다시 연결하라고 지시합니다. 서버는 인바운드 연결이 127.0.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 오버헤드가 있습니다.

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

관련 정보