Чому рейтинг Wi-Fi вашого маршрутизатора не передбачає пропускну здатність VPN
Заявлена швидкість Wi-Fi і виміряна швидкість VPN описують різні рівні. Пройдіть цю впорядковану перевірку, перш ніж купувати швидший маршрутизатор.
Маршрутизатор з наклейкою 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 додає свої накладні витрати. Клієнт, який в ідеальних умовах узгодив максимальну швидкість, зазвичай вимірює помітно менше половини, і ще менше, коли з'являються сусідні мережі.
| Symptom | Tier to suspect first |
|---|---|
| Wired clients are slow too | WAN access or forwarding path |
| Only Wi-Fi clients are slow | Radio, airtime, or channel width |
| One stream is slow, four parallel streams add up | Per-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 internet | WAN, 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 на новому пристрої з тим самим сервером і тривалістю, а потім порівнюйте відношення, а не піки.