pfSense на Virtio: TCP замирает, пока не отключён offload
Виртуализированный pfSense отвечает на ping, а затем замирает на большом TCP. Отключите путь offload контрольной суммы virtio и измерьте цену, а не меняйте сетевую карту.
Клиент сообщает, что туннель подключается, 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 предлагают эквивалентное управление в собственных настройках интерфейса, поэтому рассуждение переносится, даже когда путь в меню нет.