March 30, 2020

Test real network speeds between clients/server with iperf3 and Synology

I exchanged my Synology server for a 10Gbit capable model, and after deploying it, I wanted to confirm the actual available speed over my network.

For this matter I use the tool iperf3. It is a great command line interface (CLI) based tool, that supports all varieties of operating systems: from Windows over MacOS and Linux to Android and a lot more distros.

To simply and quickly run it on a Synology NAS, I use docker from the Synology AppStore. So this is how it flows:

1. Install Docker on your Synology NAS over their AppStore

2. Go to your DSM System Control Paned on the Synology and under Applications, Terminal and SNMP activate the SSH service on port 22. please be mindful about this and make sure you are not forwarding this port from your internet firewall/router to your Synology (unless you wanted that to).

3. open a Terminal and ssh into your Synology NAS:

ssh [email protected]

4. Install the iperf3 docker image:

sudo docker run -it --rm -p 5201:5201 networkstatic/iperf3 --help

Now you should see it installing the docker image from the net and after finishing it launching the container.

5. Start iperf3 as listening server on the NAS:

sudo docker run  -it --rm --name=iperf3-server -p 5201:5201 networkstatic/iperf3 -s

Now you should see the following output which means your Synology is waiting for another iperf3 client to start the test to it:

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

CAUTION: if you have the Synology DSM firewall enabled, you need to open port 5201 for iperf to function. Else your client won't be able to connect to it!

6. Go to your client machine, in my case a OSX machine, and open the Terminal.
If you haven't iperf3 installed already, install it via brew:

brew install iperf3

7. initiate the speedtest from your client with:

iperf3 -c 192.168.x.x

192.168.x.x stands for your Synologys IP address.

8. You should get now an output similiar to this (example for a 1Gbit connection:

$ iperf3 -c 192.168.x.x
Connecting to host 192.168.x.x, port 5201
[  5] local 192.168.x.xx port 50685 connected to 192.168.x.x port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  94.5 MBytes   793 Mbits/sec                  
[  5]   1.00-2.00   sec  93.4 MBytes   783 Mbits/sec                  
[  5]   2.00-3.00   sec  90.4 MBytes   758 Mbits/sec                  
[  5]   3.00-4.00   sec  92.8 MBytes   778 Mbits/sec                  
[  5]   4.00-5.00   sec  92.9 MBytes   779 Mbits/sec                  
[  5]   5.00-6.00   sec  92.8 MBytes   778 Mbits/sec                  
[  5]   6.00-7.00   sec  92.6 MBytes   777 Mbits/sec                  
[  5]   7.00-8.00   sec  93.3 MBytes   782 Mbits/sec                  
[  5]   8.00-9.00   sec  92.5 MBytes   776 Mbits/sec                  
[  5]   9.00-10.00  sec  89.0 MBytes   747 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   924 MBytes   775 Mbits/sec                  sender
[  5]   0.00-10.00  sec   924 MBytes   775 Mbits/sec                  receiver

iperf Done.

Thats it! Super simple, quick and reliable to test your network device connections. You can also easily run this from or to a raspberry pi or any other linux machine.

Enjoy and happy testing!