Iperf – кроссплатформенная консольная утилита с открытым исходным кодом, предназначенная для тестирования пропускной способности сети между двумя узлами. Утилита iperf позволяет генерировать нагрузочный TCP и UDP трафик между хостами. С помощью iperf можете быстро измерить максимальную пропускную способность сети (скорость передачи данных) между сервером и клиентом, провести нагрузочное тестирование канала связи, маршрутизатора, сетевого шлюза (файервола), Ethernet или Wi-Fi сети.
В этой статье мы покажем, как использовать утилиту iPerf (в большинстве случае используется версия iPerf3) для проверки скорости сети между различными узлами: Windows, Linux и VMware ESXi (есть версии iperf для Android, MacOS, RouterOS от MikroTik и других платформ).
Утилита iperf является кроссплатформенной и доступна для всех операционных систем. Iperf работает в клиент- сервером режиме (весь функционал в одном биранике). Утилиту нужно запустить на обоих устройствах, пропускную способность сети между которыми нужно оценить:
- Сервер iperf – запускается на любом устройстве, слушает определенный порт и принимает трафик от клиента. Сервер запускается командой:
iperf3 -s
- Клиент iperf – генерирует тестовый TCP/UDP трафик и отравляет его на сервер. При запуске клиента в качестве параметра указывается имя сервера, где запущен iperf:
iperf3 -c 192.168.123.123
Утилита iPerf для Windows
Скомпилированную версию iPerf для Windows можно скачать с GitHub https://github.com/ar51an/iperf3-win-builds/releases
Есть версии iPerf3 с поддержкой openssl и аутентификации, но в самом простом случае достаточно простой версии. Скачайте и распакуйте архив с последней версией ( iperf-3.19.1-win64.zip в этом примере на диск).
Утилита не требует установки. В архиве всего два файла: cygwin1.dll и iperf3.exe.
Iperf это консольная утилита, которая запускается из командной строки. При запуске iperf3.exe без параметров, она выведет список доступных опций.
Если вы планируете запускать iPerf3 в Windows в режиме сервере (параметр -ы), нужно в Windows Defender Firewal открыть входящий порт 5201 для протоколов TCP и UDP. Можно создать разрешающие правила файервола с помощью PowerShell:
New-NetFirewallRule -DisplayName 'iPerf-Server-Inbound-TCP' -Direction Inbound -Protocol TCP -LocalPort 5201 -Action Allow | Enable-NetFirewallRule
New-NetFirewallRule -DisplayName 'iPerf-Server-Inbound-UDP' -Direction Inbound -Protocol UDP -LocalPort 5201 -Action Allow | Enable-NetFirewallRule
Для Windows есть несколько реализаций графического интерфейса iPerf. Например, Iperf3-Cygwin-GUI и jperf.
Утилита jperf написана на Java (для работы на компьютере должна быть установлена Java-машина). Помимо графических рюшечек к CLI интерфейсу, Jperf умеет в реальном времени строить графики пропускной способности канала связи.
Для использования достаточно указать адрес сервера iPerf и запустить проверку.
Установка iPerf в Linux
В RHEL подобных дистрибутивах (CentOS/RHEL/Fedora) пакет iperf3 включен в состав базового репозитория AppStream. Вы можете установить его стандартной командой yum/dnf:
# dnf install iperf3
В дистрибутивах Debian/Ubuntu для установки iperf3, выполните:
$ sudo apt install iperf3
При установке пакета в Debian он предлагает запустить iperf в виде системного демона. Если вы часто используете тестирование iperf с этим хостом в режиме сервера, подтвердите это.
Если данный Linux хост будет использоваться в качестве сервера iPerf, нужно открыть соответствующие порты:
Debian/Ubuntu:
$ sudo ufw allow 5201/tcp
$ sudo ufw allow 5201/udp
В RHEL дистрибутивах Linux, чтобы открыть порт 5201 в firewalld (или iptables):
# firewall-cmd --permanent --add-port=5201/tcp
# firewall-cmd --permanent --add-port=5201/udp
# firewall-cmd --reload
Запуск iPerf в VMware ESXi
В VMware ESXi 8 утилита iperf3 доступна по умолчанию (как часть vSAN), но из-за ограничений безопасности ее запуск из консоли запрещен.
Чтобы разрешить использовать iPerf в ESXi 8, подключитесь к консоли ESXi по SSH и выполните команды (как для клиента, так и сервера iPerf):
# временно отключить файервол хоста
# esxcli network firewall set --enabled false
# разрешить запуск скопированных бинарников
# localcli system settings advanced set -o /User/execInstalledOnly -i 0
# cp /usr/lib/vmware/vsan/bin/iperf3 /usr/lib/vmware/vsan/bin/iperf3.copy
При запуске сервера iPerf в ESXi его нужно привязывать к интерфейсу vmkernel:
Узнайте IP адрес vmkernel:
# esxcli network ip interface ipv4 get
# cd /usr/lib/vmware/vsan/bin/
# ./iperf3.copy -s -B <vmkernel-IP> -p <port>
Запуск клиента:
# cd /usr/lib/vmware/vsan/bin/
# ./iperf3.copy -c <Server-IP> -u -b 10M -l 1400 -i 1 -t 300 -p <port>
После завершения тестирования, верните исходные настройки файервола и системы безопасности:
# localcli system settings advanced set -o /User/execInstalledOnly -i 1
# esxcli network firewall set --enabled true
Проверка скорости сети с помощью iPerf
Рассмотрим несколько примеров использования iperf для тестирования пропускной способности сети.
Запускаем утилиту iPerf на любом хосте (в нашем случае это Linux) в режиме сервера:
# iperf3 –s
Сервер iPerf3 сразу запускается с поддержкой TCP и UDP и ожидает подключений от клиентов на порту 5201.
Server listening on 5201
Чтобы запустить сервер iPerf в фоновом режиме, добавьте ключ -D:
iperf3 -s -D
# iperf3 -s -w 32768 –p 5203
-w 32768 – зададим размер окна TCP в 32 KB (по умолчанию около 8 Кб)
–p 5203 – порт, на котором ожидает подключения iperf (напоминаю, что iperf2 по умолчанию слушает на порту 5001).
В качестве клиента iPerf у меня выступает компьютер с Windows 11. Откройте командную строку и перейдите в каталог с исполняемым файлом iperf3:
cd c:\tools\iperf
Чтобы запустить тестирование клиентом iPerf, укажите адрес (имя) хоста, где запущен сервер iperf:
iperf3.exe -c 192.168.1.202
Клиент начнет генерировать сетевой трафик и выполнит тестирование канала. С настройками по-умолчанию используется только TCP, тестирование длится 10 секунд, без ограничения максимальной скорости.
- Interval – интервал тестирования (в сек.);
- Transfer – размер переданных данных за это время
- Bitrate – средняя пропускная способность сети за данный период
Если вы запустили сервер iperf с увеличенным размером TCP окна, вы можете использовать следующую команду для получения максимальной нагрузки на сеть:
iperf3.exe -c 192.168.1.202 -P 8 -t 30 -w 32768 -i 5 -f g
- -c 192.168.1.202 – IP адрес сервера iperf;
- -w 32768 — увеличиваем размер TCP окна;
- -t 30 – время в секундах, в течении которого выполняется тестирование (по умолчанию 10 секунд);
- -P 8 — число параллельных потоков (подключений), используется для получения максимальной нагрузки на канал;
- -i 5 – выводить статистику на экран каждые 5 секунд. Параметр удобно использовать при продолжительных тестах (несколько минут, часов);
- -f m — выводить результаты в Мбит/с. Здесь можно использовать атрибуты kmgKMG (килобиты, мегабиты, мегабайты и т.д.).
- -n 1G – количество данных, которые нужно передать на сервер iPerf
В нашем примере тестирование длилось 30 секунд. В итоговом отчете нас интересует значения столбца Bandwidth в последней строке [SUM]. Здесь указаны средняя скорость отправки (sender) и получения данных по сети (receiver).
В нашем случае средняя пропускная способность сети между двумя узлами – 79,7 Мбит/с. Было передано 285 Мб данных (столбец Transfer).
Можно запустить iperf в обратном режиме (сервер отправляет данные, а клиент принимает), для этого на клиенте указывается опция –R.
По-умолчанию утилита генерирует TCP трафик, если вам нужно протестировать скорость сети для UDP пакетов, добавьте на клиенте параметр –u
iPerf: тестирование скорости Интернета
Если вам нужно проверить ваш интернет-канал (предоставляемый провайдером), можно воспользоваться одним из iperf публичных серверов (список доступен здесь):
iperf3 -c speedtest.uztelecom.uz
Также у компании Эр-Телеком (Дом.Ру) во многих городах запущены собственные публичные сервера iperf. Например:
- st.samara.ertelecom.ru
- st.nsk.ertelecom.ru
- st.nn.ertelecom.ru
- st.ufa.ertelecom.ru
- st.chel.ertelecom.ru
iperf3 -c st.nn.ertelecom.ru
Основной недостаток публичных серверов — iperf3 не поддерживает несколько одновременных тестов. Если сервер iperf сейчас выполняет тестирование одним клиентом, то при попытке подключиться к нему с другого вы получите ошибку: iperf3: error — the server is busy running a test. try again later.
Если нужно оценить пропускную способность сети в обоих направлениях (в дуплексном режиме), дополнительно на клиенте нужно указать опцию —bidir:
iperf3.exe -c IP -P 8 -t 30 -w 32768 --bidir
Во время выполнения теста сети iperf вы можете следить за нагрузкой сетевого интерфейс компьютера через Task Manager.
Полный список опций утилиты iperf можно получить так:
iperf3 –-help
Утилита iperf3 при тестировании канала позволяет настраивать параметры времени, буферов и протоколов (TCP, UDP, SCTP), что может быть полезным как для диагностики, так и для тюнинга сетевых соединений. Позволяет выполнить стресс-тестирование канала связи, найти узкие мест в сети, тестирования локальных сетей, Wi-Fi и облачных систем.
Утилита классная. Хорошо помогает замерять скорость между компами, и выяснять проблемы, почему у пользователя что-то там тормозит. Но, иногда возникают проблемы, как объяснить удаленному пользователю запустить «iperf.exe -s». По умолчанию эта утилита не установлена. Но её можно установить на всех компах домена как службу. Я сделал так:
Скриптом через групповую политику скопировал её на всё компы в «%windir%\system32» — пусть всегда под рукой будет.
Чтоб вручную на удаленных компах её не запускать, также скриптом через powershell создал службу с автоматическим запуском:
New-Service -Name «Iperf» -BinaryPathName «%windir%\system32\iperf.exe» -DisplayName ″Iperf″ -Description ″Iperf″
Set-Service -Name «Iperf» -StartupType Auto
Память отожрала ровно 1000кб.
Теперь в любой момент времени можно проверить скорость соединения между компами, и если выясняется, что заявленная скорость ниже, перенаправляю проблему в отдел связи, разбирайтесь, почему связь тормозит.
А вы не думали что таким образом вашу сеть можно заDOS-ить всего одной командой . Если такие тесты требуется часто выполнять довольно часто, хотя бы отмените автозапуск службы. И запускайте ее по-необходимости.
«как объяснить удаленному пользователю запустить «iperf.exe -s».»
Как-то так:
psexec.exe iperf.exe -s
В инструкции для Windows не говорится как использовать программу. Так же там нету примечания, что в брандмауэре Windows на стороне сервера нужно добавить правило для разрешения входящих по TCP :5201. Вообще смысл этой статьи не понятен. Единственно ценная информация это ссылка на официальный ресурс https://iperf.fr
Можно поставить iperf и на esxi из офлайн пакета (_https://www.controlup.com/resources/blog/entry/iperf-on-esxi/)
esxcli software vib install -d /iperf-2.0.5-1-offline_bundle.zip –no-sig-check
Если использовать публичные iperf сервера для тестирования, нужно иметь в виду что один сервер может обслуживать только одного клиента iperf одновременно:
iperf3 -c 107.151.142.227 -p 5201
если сервер занят, появится:
iperf3: error - the server is busy running a test. try again later
PS скрипт для тестирования каналов при помощи iperf, с возможностью тестирования между удаленными хостами (как клиента, так и сервера). Может кому пригодится.
https://drive.google.com/file/d/18HhIe58u5MCuXQ9hGQpcRdSrrbSia-TY/view?usp=sharing
Удивительно, но наилучший результат получил при стандартном размере TCP окна
Игрался с 32Кбайт, пробовал максимальное 64Кбайт, но когда убрал вообще этот параметр — удалось выжать почти 100% пропускной способности (сеть 25Гбит), до этого результаты были 10 и 17Гбит соответственно