Skip to main content

Testing Tunnel Performance with iperf3

In this guide, you'll learn how to use iperf3 to test throughput and network behavior over a TUN-over-UDP tunnel. This method allows for more advanced testing than ping, including bandwidth, jitter, and packet loss measurements.

Tunnel Setup

We assume you have a working TUN-based VPN tunnel between two Linux devices:

  • Client (local): 10.0.0.1
  • Server (remote): 10.0.0.2

iperf3 must be installed on both devices. You can install it via:

sudo apt install iperf3

1. Start the iperf3 Server

On the server side (10.0.0.2), run:

iperf3 -s

This starts iperf3 in listening mode, waiting for incoming test sessions.


2. Run a TCP Test

On the client side (10.0.0.1), run:

iperf3 -c 10.0.0.2

Sample Output (TCP):

Connecting to host 10.0.0.2, port 5201
[ 5] local 10.0.0.1 port 45632 connected to 10.0.0.2 port 5201
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 10.5 MBytes 88.0 Mbits/sec
[ 5] 1.00-2.00 sec 10.4 MBytes 87.1 Mbits/sec
...
[ 5] 0.00-10.00 sec 104 MBytes 87.2 Mbits/sec sender
[ 5] 0.00-10.00 sec 104 MBytes 87.1 Mbits/sec receiver

What You’re Measuring (TCP):

  • Throughput (Bandwidth) — how much data can be sent through the tunnel in a sustained way.
  • TCP behavior — includes retransmissions and congestion handling, though not visible by default.

3. Run a UDP Test

UDP tests are great for measuring jitter, packet loss, and latency. However, since UDP is connectionless, you must specify the desired bandwidth.

On the client side (10.0.0.1), run:

iperf3 -c 10.0.0.2 -u -b 10M
  • -u: Use UDP
  • -b 10M: Target bandwidth of 10 Mbps

Sample Output (UDP):

Connecting to host 10.0.0.2, port 5201
[ 5] local 10.0.0.1 port 56789 connected to 10.0.0.2 port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 5] 0.00-1.00 sec 1.19 MBytes 10.0 Mbits/sec 85
[ 5] 0.00-10.00 sec 11.9 MBytes 10.0 Mbits/sec 1000
[ 5] Sent 1000 datagrams
[ 5] Server Report:
[ 5] 0.00-10.00 sec 11.8 MBytes 9.90 Mbits/sec 0.600 ms 0/1000 (0%) sender
[ 5] 0.00-10.00 sec 11.8 MBytes 9.89 Mbits/sec 0.700 ms 0/1000 (0%) receiver

What You’re Measuring (UDP):

  • Bandwidth — how much UDP traffic gets through
  • Jitter — variation in delay between packets
  • Packet loss — important for evaluating reliability of the tunnel

Optional: Reverse Direction Test

To test performance in the reverse direction (server → client), add the -R flag:

iperf3 -c 10.0.0.2 -R

Or with UDP:

iperf3 -c 10.0.0.2 -u -b 5M -R

Optional: Run Longer Tests

To run tests for a longer period (e.g., 30 seconds):

iperf3 -c 10.0.0.2 -t 30

Summary

ProtocolUse CaseKey Metrics
TCPReliable throughput testingBandwidth, congestion effects
UDPReal-time app simulationBandwidth, jitter, packet loss

iperf3 is a powerful tool for validating tunnel performance under different traffic conditions. For deeper analysis, consider capturing packets with tcpdump during the test or combining results with ping latency monitoring.