SSH経由でiperfを実行する

SSH経由でiperfを実行する

ubuntu権限のない2つのサーバー間のネットワーク接続をベンチマークしようとしていますroot

両方のボックスを正常にダウンロードして実行しましたiperf-2.0.9

私の問題は、(ファイアウォールを介して)ポートを開くことができないことです。

したがって、クライアントはサーバーに接続できません。

2つのSSH接続を介してこれを行う方法はありますか?ポートフォワーディングとは何ですか?

どんな解決策でも大変感謝します!

ノートscpいくつかのファイルをやり取りしましたが…iperf私に与えたものとは全く距離が遠かったです。

ベストアンサー1

iperf では、ユーザーは、サーバーがリスニングする場所、クライアントが接続する場所、クライアントが /-dオプション用の--dualtestミニサーバーを作成する場所など、3 つの場所でポートを指定できます。これには3つすべてが必要です。

これは少ない数で行うことができますが、すべてのポートを指定する方が簡単なので、ポートをよりよく追跡できます。この設定では、設定が次のと仮定します。

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

「コントロールボックス」はボックス2のSSHに直接アクセスできますが、必要はありません。これを行うには、ボックス#2は7001でリッスンするiperfサーバーになり、ボックス#2はポート7002でリッスンするクライアントになります。これはアクセス可能な任意のポートにすることができます。私はこれら2つをランダムに選びました。

まずボックス#1に接続します。次に、Box#2に接続する必要があります。このネストされたセッションでは、2つのポートトンネル(順方向1と逆方向1)を作成する必要があります。これを行うための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の2番目のセッションを開きます。ここでは、ポート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に送信します。

2回目の会議は次のとおりです。

(この例の注:さまざまなテストの時間を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は認識された接続速度を歪める可能性があります。同じ2つのシステム間で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オーバーヘッドがあります。

ただし、これら2つのシステム間にブリッジを作成し、そのブリッジの容量を測定する必要がある場合、このソリューションは完璧です。これらのコンピュータ間の生のスループットを測定しようとすると、これらのテストで提供される数値はリンク速度よりも小さくなります(おそらくはるかに小さいでしょう)。

おすすめ記事