Маршрутизатор з наклейкою Wi-Fi 3,000 Mbps усе одно може передавати зашифрований трафік лише з малою часткою цього числа, і жодне з цих чисел не є нечесним. Рейтинг радіо описує найкращу можливу модуляцію бездротового каналу, яку підтримує чипсет; число VPN описує, як швидко один пристрій може проштовхнути зашифровані пакети через процесор маршрутизатора і назовні з вашої лінії доступу. Це різні рівні, різні розміри пакетів і різні методи вимірювання. Сприймайте число на коробці як стелю, до якої ніхто не дістає, а не як прогноз швидкості вашого тунелю.

Крок 1: Нанесіть на карту чотири рівні, які обмежують число

Майже кожна скарга на повільний маршрутизатор, з якою я працював, потрапляє на один із чотирьох рівнів: бездротовий канал, швидкість доступу WAN, шлях пересилання (NAT, міжмережевий екран, відстеження з'єднань) або криптографічний шлях VPN. Вони складаються, і найповільніший рівень визначає результат. Заявлена швидкість Wi-Fi говорить лише про перший рівень і говорить про нього щедро.

Це число походить із кількості потоків, помноженої на ширину каналу й на найвищу модуляцію, яку чипсет може узгодити. Радіо 2x2 на 5 GHz при 80 MHz з 1024-QAM заявляється близько 1,200 Mbps, але Wi-Fi — це спільне напівдуплексне середовище: клієнти по черзі, повторні передачі й керівний трафік спалюють ефірний час, а TCP додає свої накладні витрати. Клієнт, який в ідеальних умовах узгодив максимальну швидкість, зазвичай вимірює помітно менше половини, і ще менше, коли з'являються сусідні мережі.

SymptomTier to suspect first
Wired clients are slow tooWAN access or forwarding path
Only Wi-Fi clients are slowRadio, airtime, or channel width
One stream is slow, four parallel streams add upPer-connection CPU path, not the link
Every stream is slow and one core sits at 100%Crypto path
Fast to LAN hosts, slow to the internetWAN, not the tunnel

Якщо таблиця вказує на радіо, спершу виправте бездротовий бік: діапазон, ширину каналу, відстань. Якщо вона вказує нижче радіо, важливі наступні чотири кроки, і жодна купівля антен цього не змінить.

Крок 2: Зніміть провідну базову лінію, перш ніж торкатися радіо

Поставте ноутбук на Ethernet і спершу виміряйте шлях без тунелю, бо це дає вам знаменник. Запустіть інструмент пропускної здатності на тому боці, на VPS або домашньому сервері, який завершує VPN, і спрямуйте клієнта на його публічну адресу, щоб трафік пройшов через ваш маршрутизатор і лінію доступу.

# on the far host (VPN endpoint)
iperf3 -s

# wired client, direct to the endpoint's public address
iperf3 -c 203.0.113.10 -t 30

# same client, four parallel streams
iperf3 -c 203.0.113.10 -t 30 -P 4

Два числа з цього блоку відповідають на різні питання. Один потік показує стелю на з'єднання, включно з поведінкою вікна TCP і будь-яким формуванням за потоком на шляху. Чотири потоки показують, чи має канал невикористану ємність, бо паралельні потоки можуть заповнити трубу, яку один потік не заповнює.

Тримайте це чесно: той самий хост, час доби й тривалість, і ніщо інше не стрімить у домі. Масова передача на тридцять секунд — правильна одиниця тут, і RFC 6349, рамки тестування пропускної здатності TCP, побудовані саме на цьому міркуванні, бо короткі сплески й дрібні запити лестять каналу. Запишіть базову лінію, перш ніж щось змінити.

Крок 3: Запустіть той самий тест через тунель

Тепер повторіть його до адреси тунелю віддаленої кінцевої точки, з тим самим клієнтом, тривалістю й кількістю потоків, при піднятому тунелі й без іншого трафіку. Відношення двох результатів каже, скільки коштують шифрування й інкапсуляція на цьому обладнанні; абсолютне число каже, чи цього достатньо для завдання.

Стежте за лічильниками під час передачі. На WireGuard wg show повідомляє передані байти на партнера; на OpenVPN файл стану, що пишеться з інтервалом, дає ту саму картину.

watch -n 1 'wg show wg0 transfer'
# OpenVPN: add --status /run/openvpn/server.status 10 to the server config
tail -f /run/openvpn/server.status

Якщо число тунелю близьке до провідної базової лінії, VPN не є вузьким місцем, і можна перестати його звинувачувати. Якщо це лише частка базової лінії, втрата сталася всередині криптографічного й пересильного шляху маршрутизатора, і наступний крок скаже, в якій частині.

Одне попередження: щойно змінюється вихідний IP, деякі сервіси тестування швидкості тихо вибирають інший вимірювальний сервер, тож ви зрештою порівнюєте дві різні цілі. Закріпіть адресу сервера самі.

Крок 4: Читайте процесор як шлях, а не як середнє

Маршрутизатор, що показує 30 відсотків загального процесора, усе ще може бути насиченим: робота одного тунелю зазвичай потрапляє на одне ядро, одну чергу переривань або один потік ядра, тож середнє приховує стелю. Дивіться на числа по ядрах і softirq замість індикатора на панелі.

mpstat -P ALL 1
top -H -p $(pgrep -f 'openvpn')
grep -o -m1 aes /proc/cpuinfo

У цьому виводі важливі три речі. Одне ядро, закріплене близько 100 відсотків, поки інші простоюють, вказує на межу на з'єднання. Високий %soft або зайнятий ksoftirqd на одному процесорі вказує на обробку пакетів на боці приймання, яка не розподіляється по чергах. А відсутній прапорець aes означає, що процесор не має інструкцій AES, тож симетричне шифрування працює в програмному забезпеченні й коштує значно дорожче за пакет.

Реалізація теж важлива. Традиційний примірник OpenVPN у просторі користувача обробляє пакети одного тунелю переважно в одному місці, тож швидкий багатоядерний апарат для цього тунелю може поводитися як одноядерний. WireGuard у ядрі розподіляє роботу між процесорами, а розвантаження каналу даних OpenVPN теж переносить обробку пакетів у ядро, але лише у збірках і на платформах, які це підтримують. Твердження про апаратне прискорення на маркетинговій сторінці не є доказом того, що ваш шлях коду його використовує.

Крок 5: Вирішіть, що змінювати, саме в цьому порядку

Пройдіть список донизу і зупиніться на першому правдивому рядку, бо зміна чогось нижче нього число не зрушить.

1. Провідна пряма пропускна здатність нижча за те, за що ви платите: поговоріть із провайдером, бо тунель не може створити ємність, якої не дає лінія доступу. 2. По кабелю напряму все добре, але одне ядро закріплюється під час тесту тунелю: криптографічний шлях маршрутизатора — це межа. 3. Процесор простоює, але тунель повільний: перевірте MTU і фрагментацію, потім власну ємність віддаленої кінцевої точки. 4. Повільні лише клієнти Wi-Fi: змініть діапазон або ширину каналу й прийміть, що заявлена швидкість ніколи не була числом VPN.

Коли маршрутизатор справді є межею, чесні варіанти — пристрій з інструкціями AES і швидшим шляхом пересилання, тунель на боці ядра, такий як WireGuard, замість тунелю в просторі користувача, або перенесення клієнта на сам пристрій, щоб маршрутизатор перестав шифрувати. Вимкнення автентифікованого шифрування заради перемоги в еталонному тесті не входить до них; це міняє властивість безпеки на число, яке все одно не збіжиться з коробкою.

Перш ніж щось купувати, знову проганьте кроки 2 і 3 на новому пристрої з тим самим сервером і тривалістю, а потім порівнюйте відношення, а не піки.

Схожі статті