Ich versuche, die Netzwerkverbindung zwischen zwei ubuntu
Servern zu testen, für die ich keine Berechtigungen habe root
.
Ich habe es geschafft, es iperf-2.0.9
auf 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 scp
mehrere Dateien hin und her ... Aber das ist nicht einmal annähernd das, was iperf
mir 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:7001
für den Vorwärts- und -R7002:localhost:7002
den 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.