Акмалов Артур

Собственный SpeedTest Server Proxmox

speedtest server proxmox

Self Speedtest Server

Собственный сервер проверки скорости канала

Для проверки скорости интернета через Web чаще всего использую 3 сервиса.

  • Fast.com
  • Speedtest.net
  • Yandex Internet Metr

Но не нравится реклама или бывают моменты когда сервера нагружены скорость не совсем достоверно показывается.

В собственной сети использую утилиту iPerf если есть такая возможность, где постоянно надо клиент — серверную часть поднимать (а глобальные сервера iPerf часто имеют небольшую полосу, и тоже часто бывают нагружены). Иногда использую утилиту Mikrotik Bandwidth test. 

Решил в домашней песочнице (сервер Proxmox) создать виртуальную машину для этих целей

Задача

Необходимо на домашнем сервере развернуть сервер для проверки скорости на одном контейнере (или виртуальной машине) с доступом по глобальной сети используя доменное имя bt.akmalov.com, планируется использовать следующие методы:

  1. Проверка скорости по WEB интерфейсу 80 порту. 
  2. iperf3 как сервер
  3. 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 попал в черный список или я уронил сервер

Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Айдар

Заморочился) Прикольно конечно)