iperf über SSH ausführen

iperf über SSH ausführen

Ich versuche, die Netzwerkverbindung zwischen zwei ubuntuServern zu testen, für die ich keine Berechtigungen habe root.

Ich habe es geschafft, es iperf-2.0.9auf beiden Boxen herunterzuladen und zu starten.

Mein Problem ist, dass ich keine Ports öffnen kann (durch die Firewall).

Der Client kann daher keine Verbindung zum Server herstellen.

Gibt es eine Möglichkeit, dies über eine SSH-Verbindung zwischen den beiden zum Laufen zu bringen? Einen Port weiterleiten oder so etwas?

Jede Lösung wird sehr geschätzt!

Notiz: Ich habe scpmehrere Dateien hin und her ... Aber das ist nicht einmal annähernd das, was iperfmir geben kann

Antwort1

iperf ermöglicht dem Benutzer, die Ports an drei Stellen anzugeben: eine, an der der Server lauscht, eine, an der der Client eine Verbindung herstellt, und eine, an der der Client einen Miniserver für die Option -d/ startet --dualtest. Dafür benötigen wir alle drei.

Obwohl es vielleicht auch mit weniger Ports möglich wäre, fand ich es einfacher, alle Ports anzugeben, damit ich sie besser im Auge behalten konnte. In diesem Setup gehe ich von einem Setup aus, das ungefähr so ​​aussieht:

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

Die „Steuerbox“ könnte auch direkten Zugriff auf SSH auf Box Nr. 2 haben, aber das brauchen wir nicht. Dafür wird Box Nr. 2 der iperf-Server sein, der auf 7001 lauscht, und Box 2 wird ein Client sein, der auf Port 7002 lauscht. Dies können alle zugänglichen Ports sein, ich habe diese beiden zufällig ausgewählt.

Stellen Sie zunächst eine Verbindung zu Box Nr. 1 her. Als Nächstes müssen Sie eine Verbindung zu Box Nr. 2 herstellen. In dieser verschachtelten Sitzung müssen Sie zwei Porttunnel erstellen: einen vorwärts und einen rückwärts. Die SSH-Optionen, die dies tun, sind -L7001:localhost:7001für den Vorwärts- und -R7002:localhost:7002den Rückwärtsverkehr. Da iperf erwartet, dass sich die Ports auf einem Remote-Host befinden, muss jeder Tunnel symmetrisch sein (dieselbe Portnummer an beiden Enden des Tunnels). Starten Sie dann den iperf-Server, der auf Port 7001 ( iperf -s -p 7001) lauscht.

Es könnte ungefähr so ​​aussehen:

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

Öffnen Sie nach dem Start eine zweite Sitzung zu Box Nr. 1. Starten Sie hier einen iperf-Client zu localhost an Port 7001 mit dem Listenback-Port 7002 (der Standard-Listenback-Port ist wie beim Server 5001). Dies bedeutet, dass der Client versucht, eine Verbindung zu einem iperf-Server auf localhost:7001 herzustellen, den SSH abruft und an Box Nr. 2 sendet. Anschließend startet er einen „Mini“-iperf-Server, der auf 7002 lauscht. Sobald die Verbindung vom Client zum Server hergestellt ist, weist der iperf-Client den iperf-Server an, sich wieder über Port 7002 zu verbinden. Der Server stellt fest, dass die eingehende Verbindung von 127.0.0.1 (oder ::1, je nach Konfiguration) kommt, und startet daher einen „Mini“-Client, der eine Verbindung zu 127.0.0.1:7002 herstellt. Da wir auch die umgekehrte Weiterleitung eingerichtet haben, schnappt sich SSH auch diese Verbindung und sendet sie an Box 1.

Ihre zweite Sitzung könnte ungefähr so ​​aussehen:

(Randbemerkung zu diesem Beispiel: Ich habe die Zeit für einen anderen Test auf 30 Sekunden eingestellt; die Standardeinstellung reicht aus)

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

Wenn der Client mit dem Testen fertig ist, sieht Ihr Serverfenster möglicherweise ungefähr so ​​aus:

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

WARNUNG:SSH WIRD die wahrgenommene Verbindungsgeschwindigkeit verzerren. Das Ausführen von iperf ohne SSH zwischen denselben beiden Boxen ergab Folgendes (die Boxen haben dieselben Rollen):

Klient:

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

Server:

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

Ich habe versucht, die TCP-Fenstereinstellungen, die Pufferlänge, TCP_NODELAY und mehrere SSH-Sitzungen zu ändern, aber der Overhead war immer noch vorhanden. Ich habe auch HPN-SSH ausprobiert, aber ich habe tatsächlich eine bessere Leistung als mit normalem SSH erzielt. Ich denke also, dass ich beim Einrichten von HPN eine Einstellung übersehen habe. Das Ausführen der iperf-Verbindungen im Simplex- statt im Duplex-Modus (Option -r/ --tradeoff(Führen Sie einen bidirektionalen Test einzeln durch)) hat Ergebnisse geliefert, die näher an der Verbindungsgeschwindigkeit lagen, aber immer noch mit erheblichem SSH-Overhead.

Wenn Sie jedoch eine Brücke zwischen diesen beiden Maschinen erstellen und die Kapazität dieser Brücke messen müssen, ist diese Lösung perfekt. Wenn Sie versuchen, den Rohdurchsatz zwischen diesen Maschinen zu messen, werden die von diesen Tests gelieferten Zahlen geringer (und wahrscheinlich viel geringer) sein als die Verbindungsgeschwindigkeit.

verwandte Informationen