
Доступ к VirtualBox и Hyper-V без агента в гостевой ОС — на примере клиента EvertyDesk Lite
vaalimusic 3 минуты назад Доступ к VirtualBox и Hyper-V без агента в гостевой ОС — на примере клиента EvertyDesk Lite Сложный 8 мин 39 Rust * Системное администрирование * Виртуализация * Open source * Программирование...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. vaalimusic 3 минуты назад Доступ к VirtualBox и Hyper-V без агента в гостевой ОС — на примере клиента EvertyDesk Lite Сложный 8 мин 39 Rust * Системное администрирование * Виртуализация * Open source * Программирование * Кейс Из песочницы В какой-то момент возникла задача: дать админу возможность подключаться к виртуальным машинам прямо на хосте, к которому он уже подключён. Зашёл на физический хост — видишь его VM как живые превью, кликнул — работаешь в консоли VM. И всё это без установки агента внутрь гостевой ОС.
На практике это вылилось в путешествие через три RDP-сервера разной степени «соответствия стандарту», панику внутри чужой библиотеки и один таймаут, который перевернул всю архитектуру. Рассказываю с кодом и набитыми шишками. VM Секция - Rust+EGUIНа практике — это путешествие через три RDP-сервера разной степени «соответствия стандарту», панику внутри чужой библиотеки и один таймаут, который перевернул всю архитектуру.
Технические детали
Зачем agentlessКлассический сценарий: у клиента сломалась сеть в гостевой ОС, или VM ещё на этапе установки, или это Linux без RDP. Агента внутрь не поставить — сети нет. Но гипервизор-то VM видит.
И VirtualBox, и Hyper-V умеют отдавать экран VM через свои механизмы. Значит, можно подключиться «снаружи», со стороны хоста, через API гипервизора. Архитектурно у нас получилось два провайдера: VirtualBox - VRDE (встроенный RDP-сервер) поверх TCP+TLS и Hyper-V Enhanced Session (RDP) через брокер vmms Оба, как видите, в итоге говорят на RDP.
Это и стало ключом к пере использованию кода. VirtualBox: VRDE + ironrdpУ VirtualBox есть VRDE (VirtualBox Remote Display Extension) — встроенный RDP-сервер. Включается одной командой:pub fn enable_vrde(uuid: &str, port: u16, vm_running: bool) -> Дальше нужен RDP-клиент.
Отраслевые последствия
Городить FFI к FreeRDP не хотелось — нашли ironrdp чистую Rust-реализацию RDP от Devolutions. 224-негоциацию, поднимаем TLS, и крутим ActiveStage, который декодирует bitmap-апдейты в RGBA: let outputs = active. process(&mut image, action, &frame)?
; for output in outputs { match output { ActiveStageOutput::GraphicsUpdate(_) => had_update = true, ActiveStageOutput::PointerBitmap(p) => { cursor_shape = Some(p); } // ... } } if Красиво на бумаге. А теперь — реальность.
Шишка N1: VirtualBox шлёт пустой Font MapПервое же подключение упало на финализации:FontPdu decode: not enough bytes provided to decode: received 0 bytes, expected 8 bytesVirtualBox VRDE завершает фазу подключения пакетом Font Map с нулевым телом. По спецификации там должно быть минимум 8 байт, и ironrdp честно отказывается это парсить.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





