Клієнт повідомляє, що тунель підключається, ping відповідає, сторінка входу завантажується, а потім передавання завмирає в одній і тій самій точці при кожній спробі. Ця картина вже багато говорить: доступність працює, а стійка пропускна здатність ні. Перш ніж відкривати міжмережевий екран, з’ясуйте, чи VPN узагалі бере участь у збої. Пропустіть великий TCP через той самий шлюз без тунелю на шляху; якщо він теж завмирає, OpenVPN ніколи не був причетний.

Гість pfSense з мережевою картою virtio має дуже добру причину збоїти саме в такій формі.

Дрібні пакети проходять, великий TCP зависає

Рукостискання, відповіді DNS і відлуння ICMP малі й зазвичай проходять. Стійкі передавання змушують гостя сегментувати, і саме там виявляється пошкоджений шлях offload. Збій не обов’язково має бути симетричним: вихідний трафік може бути чистим, поки вхідний губиться, або навпаки, тож користувач може увійти і потім застрягти на першій великій відповіді. Оскільки той самий клієнт працює через інший шлюз, вина лягає на найновіший компонент.

Тож перевірте шлюз без тунелю. Достатньо завантаження з LAN у WAN, яке триває кілька секунд, і його треба зробити до будь-яких змін налаштувань, щоб подальше порівняння щось означало.

Що offload насправді обіцяє

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

Узгоджений набір залежить від версії гіпервізора й обраної моделі мережевої карти, а не лише від імпортованої конфігурації.

Один прапорець зберігає virtio

В інтерфейсі pfSense шлях Система, потім Додатково, потім Мережа містить прапорець Вимкнути апаратний offload контрольної суми. Якщо його встановити, гість обчислює контрольні суми програмно, що відповідає тому, що стек FreeBSD за pfSense очікує від паравіртуального пристрою. Дві пов’язані опції на тій самій сторінці охоплюють апаратний offload сегментації TCP і апаратний offload великого приймання. Вдавайтеся до них, коли рукостискання вдаються, а великі передавання ні.

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

Виміряйте ціну, яку ви щойно прийняли

Програмне обчислення контрольних сум переносить роботу в гостя, тож виміряйте пропускну здатність після, а не припускайте, що це нічого не коштує. На малій VM штраф реальний, але він видимий і стабільний, на відміну від тихої втрати. Порівняйте лічильники помилок інтерфейсу й журнал ядра гостя до і після. Гіпервізор, що фільтрує міст, — це окремий збій з іншими доказами, і жоден прапорець offload його не вилікує.

Змінюйте по одній речі за тест і записуйте шлях у меню, позначений прапорець і виміряне число. Хто зіткнеться з наступним перезібраним гостем, захоче всі три.

Інші міжмережеві екрани на базі BSD пропонують еквівалентне керування у власних налаштуваннях інтерфейсу, тож міркування переноситься, навіть коли шлях у меню ні.

Схожі статті