November 29

Быстрый способ проверить скорость VPN соединения с помощью SSH

Быстрый способ проверить скорость VPN соединения с помощью SSH

Исходный сайт представленного материала: r4ven.me

Приветствую!

Короткая заметка про то, как проверить скорость Download/Upload с помощью SSH в Linux. Подобная диагностика бывает полезна при анализе проблем, связанных с передачей данных по защищенным каналам связи, таким как VPN.

Присоединяйтесь к нашему каналу в телеграм: t.me/r4ven_me, уведомления о новых постах приходят туда в день публикации. А если у вас есть вопросы или просто желание пообщаться по тематике – заглядывайте в чат: t.me/r4ven_me_chat.

Демонстрация из статьи выполнялась в среде дистрибутива Linux Mint Debian Edition 6 (Debian 12). Все аналогичным образом будет работать и в других дистрибутивах Linux.

Подготовка

Для работы нам понадобятся:

Из списка выше доустановить потребуется лишь утилиту pv (крайне полезная вещь). Она есть в стандартных репозиториях:

sudo apt update && sudo apt install pv

Проверка скорости

Сразу стоит отметить, что скорость передачи данных может зависеть от:пропускной способности сети;производительности CPU, так как SSH использует шифрование;настроек SSH, таких как алгоритмы шифрования.

В моем примере для подключения используется имя пользователя на удаленном сервере – ivan и адрес хоста – vpn.r4ven.me (можно указать IP). Замените эти значения в командах на свои.

Отключите VPN и проверьте скорость download с помощью команды:

Будьте осторожны с командой dd! Чтобы случайно не перезаписать важные данные.

ssh [email protected] dd if=/dev/zero bs=1M count=1024 | pv | cat > /dev/null
Для остановки проверки используйте сочетание клавиш Ctrl+c.

И теперь скорость upload:

dd if=/dev/zero bs=1M count=1024 | pv | ssh [email protected] 'cat > /dev/null'

Затем включите VPN и выполните обе команды снова. Если без туннелирования трафика скорость значительно выше, значит факторы, влияющие на скорость передачи данных на самом сервере, где развернут VPN. Если скорость низкая в обоих случаях, вероятно дело в канале до сервера.

Что вообще делают эти команды

1-я команда (Download)

  • ssh [email protected] dd if=/dev/zero bs=1M count=1024 – генерирует поток нулевых данных (из /dev/zero) на удалённом сервере с помощью утилиты dd размером 1 ГБ (1024 блока по 1 МБ) и отправляет их через SSH-соединение;
  • | pv – на локальной машине с помощью механизма перенаправления измеряет скорость получения по SSH данных;
  • | cat > /dev/null – перенаправляет поток данных, проходящий через pv в псевдоустройство (черную дыру), исключая нагрузку на диск.

2-я команда (Upload)

  • dd if=/dev/zero bs=1M count=1024 – генерирует поток нулевых данных (/dev/zero) на локальной машине также с помощью утилиты dd (1 ГБ);
  • | pv – измеряет скорость передачи данных;
  • | ssh [email protected] 'cat > /dev/null' – передает данные через SSH на удалённый сервер также в черную дыру.

Таким образом выполняется синтетическая проверка, которая просто утилизирует канал не создавая при этом никаких файлов.

Если при включенном VPN маршрут до удаленного сервера идет не через туннель

В такой ситуации попробуйте временно добавить маршрут вручную, а после проведения проверок удалить. Но только если удаленный сервер – это не сам сервер VPN!

Вот пример команд:

# проверка маршрута
ip route get <IP_address>

# добавление маршрута через серетвой интерфейс tun0
ip route add <IP_address> dev tun0

# удаление добавленного ранее маршрута
ip route del <IP_address> dev tun0

Где <IP_address> – IP адрес сервера, а tun0 – это виртуальный сетевой интерфейс вашего туннельного соединения на локальной машине. Замените значения на свои. Узнать их можно с помощью команд:

# ip адрес
ping -c1 vpn.r4ven.me | head -1 | awk -F'[()]' '{print $2}'

# список интерфейсов
ip address

На почитать