Ale*_*tan 8 ssh ubuntu not-root-user benchmark
我正在尝试对ubuntu我没有的两台服务器之间的网络连接进行基准测试root权限的。
我确实设法下载并启动 iperf-2.0.9在两个盒子上。
我的问题是我无法打开端口(通过防火墙)。
所以客户端无法连接到服务器。
有什么办法可以通过两者之间的 ssh 连接来完成这项工作吗?转发端口什么的?
非常感谢任何解决方案!
注意:我scp来回做了几个文件......但这甚至iperf不能给我带来什么
小智 7
iperf 允许用户在三个地方指定端口——一个是服务器侦听的地方,一个是客户端连接的地方,另一个是客户端为-d/--dualtest选项生成迷你服务器的地方。为此,我们需要这三者。
虽然可以用更少的数量来完成,但我发现指定所有端口更容易,因此我可以更好地跟踪它们。在此设置中,我将假设一个设置如下所示:
----------- ------- -------
| Control | SSH #1,2 | Box | SSH #3 | Box |
| Box | ---------> | #1 | -------> | #2 |
----------- ------- -------
Run Code Online (Sandbox Code Playgroud)
“控制箱”可能也可以直接访问框 #2 上的 SSH,但我们不需要它。为此,框 #2 将是侦听 7001 的 iperf 服务器,框 2 将是侦听端口 7002 的客户端。这些可以是任何可访问的端口,我随机选择了这两个。
首先,连接到框 #1。接下来,您需要连接到 Box #2。在此嵌套会话中,您将需要创建两个端口隧道:一个正向和一个反向。执行此操作的 ssh 选项-L7001:localhost:7001用于正向和-R7002:localhost:7002反向。因为 iperf 期望端口位于远程主机上,所以每个隧道必须是对称的(隧道两端的端口号相同)。然后,启动在端口 7001 ( iperf -s -p 7001) 上侦听的 iperf 服务器。
它可能看起来像这样:
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)
------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
开始之后,打开第二个会话到框 #1。在这里,在端口 7001 上启动一个到本地主机的 iperf 客户端,监听端口在 7002(默认监听端口是 5001,与服务器一样)。这意味着客户端将尝试与 localhost:7001 上的 iperf 服务器连接,SSH 抓取并发送到框 #2。然后它启动一个“迷你”iperf 服务器监听 7002。一旦从客户端到服务器的连接被启动,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
Run Code Online (Sandbox Code Playgroud)
客户端完成测试后,您的服务器窗口可能如下所示:
...
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
Run Code Online (Sandbox Code Playgroud)
警告: 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
Run Code Online (Sandbox Code Playgroud)
服务器:
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
Run Code Online (Sandbox Code Playgroud)
我尝试弄乱 TCP 窗口设置、缓冲区的长度、TCP_NODELAY 并使用多个 SSH 会话,但开销仍然存在。我也尝试过 HPN-SSH,但实际上我的性能比常规 SSH 更好,所以我认为我在设置 HPN 时遗漏了一个设置。在单工而不是双工(选项-r/ --tradeoff(单独进行双向测试))中运行 iperf 连接的结果更接近链接速度,但仍然具有显着的 SSH 开销。
话虽如此,如果您需要在这两台机器之间建立桥梁并测量该桥梁的容量,这个解决方案是完美的。如果您尝试测量这些机器之间的原始吞吐量,则这些测试提供的数字将少于(并且可能远少于)链接速度。