Self Speedtest Server
Собственный сервер проверки скорости канала
Для проверки скорости интернета через Web чаще всего использую 3 сервиса.
- Fast.com
- Speedtest.net
- Yandex Internet Metr
Но не нравится реклама или бывают моменты когда сервера нагружены скорость не совсем достоверно показывается.
В собственной сети использую утилиту iPerf если есть такая возможность, где постоянно надо клиент — серверную часть поднимать (а глобальные сервера iPerf часто имеют небольшую полосу, и тоже часто бывают нагружены). Иногда использую утилиту Mikrotik Bandwidth test.
Решил в домашней песочнице (сервер Proxmox) создать виртуальную машину для этих целей
Задача
Необходимо на домашнем сервере развернуть сервер для проверки скорости на одном контейнере (или виртуальной машине) с доступом по глобальной сети используя доменное имя bt.akmalov.com, планируется использовать следующие методы:
- Проверка скорости по WEB интерфейсу 80 порту.
- iperf3 как сервер
- Mikrotik Tools/bandwidth test
Подготовка
Нет желания для этих целей поднимать виртуальную машину, планирую все развернуть на LXC Ubuntu 21.04
WEB SpeedTest
bt.akmalov.com (80 port — WEB)
Для сервера тестирования скорости через веб интерфейс буду использовать докер образ от Open Source решения LibreSpeed ссылка на github
Это очень легкий сервис, реализованный в Javascript с использованием XMLHttpRequest. Здесь нет ничего лишнего ни флэш ни java.
В целях упрощения установки воспользуюсь Docker контейнером от разработчиков с готовым окружением.
iPerf 3
bt.akmalov.com (5201 port — tcp, udp)
iPerf по умолчанию используют порт 5201 tcp и udp протоколы. Необходимо будет на маршрутизаторе разрешить эти порты и перенаправить на данный контейнер.
Mikrotik bandwidth test
bt.akmalov.com (2000 port — tcp, udp)
Здесь используются порт 2000 tcp и udp протоколы. Нет желания внутри контейнера городить еще микротик. Трафик с этих портов перенаправлю на соседнюю виртуальную машину с CHR (Cloud Host Router) который у меня служит для мониторинга DUDE.
Схема
LibreSpeed (web)
На LXC устанавливаю Docker. И скачиваю официальный образ.
В начале планировал через Docker run запустить, а iperf3 установить на LXC как на схеме. Затем решил iperf3 тоже вынести в Docker контейнер и в этом случаи удобнее использовать docker-compose и одной командной поднять оба сервиса.
Шаблон скопировал прямо с docker-hub
version: "3.7"
services:
librespeed:
image: lscr.io/linuxserver/librespeed
container_name: librespeed
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Yekaterinburg
- PASSWORD=PASSWORD
- CUSTOM_RESULTS=false #optional
- DB_TYPE=sqlite #optional
- DB_NAME=DB_NAME #optional
- DB_HOSTNAME=DB_HOSTNAME #optional
- DB_USERNAME=DB_USERNAME #optional
- DB_PASSWORD=DB_PASSWORD #optional
- DB_PORT=DB_PORT #optional
volumes:
- /path/to/appdata/config:/config
ports:
- 80:80
restart: unless-stopped
Так же здесь можно сохранять историю проверок и результатов в собственную базу данных.
Запускаю и проверяю по IP LXC сервера
По локальной сети работает теперь осталось настроить NGINX для доступа по доменному имени. Раньше в статье показывал как использую Nginx Proxy Manager. Сейчас покажу как там легко и удобно настраивается.
Открываю WEB панель — главное меню
Host -> Add host Заполняю поля — Доменное имя, IP адрес, Port
Проверяю по доменному имени bt.akmalov.com все работает замечательно, результаты сохраняет.
iPerf3
Для меня это самая удобная программа для генерации трафика и тестирования пропускной способности сети.
Сначало хотел скачать пакет iperf3 на LXC машину, запустить как демона, добавить в автозагрузку.
Но намного проще готовый контейнер Docker запустить, тем более уже положено начало в docker-compose продолжаю его заполнение и теперь он выглядит так:
Так же взял с docker-hub
version: "3.7"
services:
librespeed:
image: lscr.io/linuxserver/librespeed
container_name: librespeed
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Yekaterinburg
- PASSWORD=PASSWORD
- CUSTOM_RESULTS=false #optional
- DB_TYPE=sqlite #optional
- DB_NAME=DB_NAME #optional
- DB_HOSTNAME=DB_HOSTNAME #optional
- DB_USERNAME=DB_USERNAME #optional
- DB_PASSWORD=DB_PASSWORD #optional
- DB_PORT=DB_PORT #optional
volumes:
- /path/to/appdata/config:/config
ports:
- 80:80
restart: unless-stopped
iperf3:
image: networkstatic/iperf3
container_name: iperf3-server
entrypoint: ["iperf3","-s"]
ports:
- 5201:5201
restart: unless-stopped
Проверяю как запустились контейнеры
docker ps
Пробрасываю порты и проверяю с внешних ресурсов
Mikrotik bandwidth test
Есть необходимость в Mikrotik BT Server так как в управлении более 100 mikrotik устройств, с совершенно разными каналами связи. VSAT, 3G/LTE, WiFi мост, ethernet и т.д. И там нет возможности использовать web или iperf для проверки.
В данном случаи 2000 порт TCP, UDP перенаправляю на свою виртуальную машину с Mikrotik CHR (Cloud Host Router) и нам нем включаю BT Server.
Если хотим ограничить, можно поставить аутентификацию, тогда необходимо создать пользователя, и группу.
Проверяю на удаленном устройстве по доменному имени.
Итоги
В итоге схема которая была изначально, немного поменялась. Теперь даже удобнее
iperf3-c bt.akmalov.com (передача)
iperf3-c bt.akmalov.com -R (прием)
Данные сервисы использую для своих целей, если вдруг кому то надо пользуйтесь.
Задача со * настроить от спама и лишних генератор трафика.
Если не работают, возможно ваш IP попал в черный список или я уронил сервер
Заморочился) Прикольно конечно)