Iperf(at)Work

Iperf(at)Workiperf3 tests from the browser.

Measure bandwidth, retransmissions, jitter and packet loss between two machines without typing a single iperf3 command. The client shows the result live and keeps every test; the server shows who is testing. Runs on Rocky Linux 9, in VMware and in Proxmox, and installs from one package without internet access.

Client172.16.101.60
Server172.16.101.61
IntervalBitrateTransferRetransmissions
0.00–1.00 s936 Mbit/s112 MBytes0
1.00–2.00 s941 Mbit/s112 MBytes0
2.00–3.00 s940 Mbit/s112 MBytes2
Received939 Mbit/s336 MBytes2
A three second test with four parallel streams, as the client shows it.

The client

2.1.0

The web UI where you fill in server, port and test parameters and press Start test. The result arrives line by line, with graph, summary and history. The interface is available in English and Norwegian.

Measures
TCP and UDP, upload, download (-R) or both directions at once (--bidir). 1–128 parallel streams, target bandwidth, IPv4 and IPv6.
Shows
Last interval, average, maximum and progress while the test runs, one graph line per direction and finally a summary with retransmissions or jitter and loss.
Remembers
Every test is saved with its full log. The history can be filtered, every test can be opened, and everything can be exported to CSV.
Advanced
Omit the ramp-up (-O), TCP window (-w), datagram length (-l) and source address (-B) for machines with several network cards.
TCP 80web UI
EN | NOlanguage in one click
CSVhistory export
Read the technical description
The Run test tab: 940 Mbit/s with four streams on a 1 Gbit/s link.

The server

2.1.0

Runs iperf3 -s as systemd services on ports 5201 and 5202, and shows a status page refreshed every three seconds. A machine can also be client and server at the same time.

Listens
One iperf3 server per port (iperf3-server@5201, @5202), for TCP and UDP. Restarted automatically.
Shows
State per port, the number of active connections and who connects, uptime and the server log with a time stamp per line.
Opens
The firewall is set up automatically for the role: the web port, and 5201–5202 tcp and udp on the server.
Secures
Hardened systemd services under their own users, optional password, and the web port only for the management network if you want.
5201TCP and UDP
5202second port
3 srefresh
Read about security
The Server tab: port 5201 has five connections from the client (one control and four streams).

Using them together

Two virtual machines with the traffic passing through the network you want to measure. From package to first result in a few minutes.

  1. Install the server

    sudo ./install.sh server starts iperf3 on 5201 and 5202 and opens the firewall.

  2. Install the client

    sudo ./install.sh client --default-server 172.16.101.61. At the end the installer checks that the server answers.

  3. Run a test

    Open http://172.16.101.60/, choose TCP or UDP, direction and streams, and press Start test.

  4. Compare

    Every test lands in the history with sent and received rate, jitter, loss and retransmissions. Export to CSV for your report.

UDP both ways: one graph line per direction, and jitter and loss for each direction in the summary.

Installation

One offline package with three RPMs: iperf3 3.21 (static), Caddy 2.11.4 and Iperf(at)Work 2.1.0. The installer checks checksums and ports, installs without repositories, sets up the firewall and runs a self test at the end.

Rocky Linux 9 Minimal, VMware or Proxmox VM

$ sha256sum -c Iperf-by-web-2.1.0-offline.tar.gz.sha256
$ tar xzf Iperf-by-web-2.1.0-offline.tar.gz
$ cd Iperf-by-web-2.1.0
$ sudo ./check-prereqs.sh --lang en
$ sudo ./install.sh server --lang en
# on the client: sudo ./install.sh client --default-server 172.16.101.61

Everything needed (Python 3, iproute, systemd) is part of Rocky Linux 9 Minimal. SELinux can stay on. Use VMXNET3 in VMware and VirtIO in Proxmox for realistic results.

VMware appliance with Photon OS

$ tar xzf Iperf-by-web-2.1.0-offline.tar.gz && cd Iperf-by-web-2.1.0
$ sudo ./check-prereqs.sh --lang en
$ sudo ./install.sh client --default-server 172.16.101.61
# Photon has iptables: open 80/tcp (and 5201–5202 on the server)
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

The packages have dependencies that resolve on both Rocky/RHEL and Photon OS, and are installed with rpm when dnf is missing. Python 3 must be present on the appliance.

The web UI uses plain HTTP and should only be reachable from a trusted management network. Restrict it with --admin-net 10.10.0.0/24, and turn on a password with sudo iperf-by-web-ctl password set.

Screenshots

The interface is available in English and Norwegian (EN | NO in the top right corner) and works on mobile too. The pictures here are from the English edition; the Norwegian page shows Norwegian screenshots. Click for full size.

Documents

Everything is in the docs/ folder of the package and is installed in /usr/share/doc/iperf-by-web/. The user manual also opens from the UI.

User manual

Every tab and field, reading the result, typical measurements, troubleshooting and the HTTP API. English and Norwegian.

Installation guide

Platforms, transfer without network, every option, VMware, Proxmox, Photon OS, firewall, upgrade from 2.0.0. English and Norwegian.

Technical description

Architecture, validation, parsing, security, packaging and build (AsciiDoc). Read it here.

Change log

What is new, changed and fixed in 2.1.0, 2.0.0 and 1.0 (Norwegian).

License report

iperf3 (BSD-3-Clause), musl (MIT), Caddy (Apache-2.0) and all 144 Go modules reviewed. No copyleft (Norwegian).

Review report

Code review, security assessment, findings that were fixed, and the results of the self test and installation tests (Norwegian).