
Firecracker упрощён. Запускайте безопасные микроВМ за миллисекунды — от установки до интерактивной оболочки одной командой.
🔥 Инструментарий для песочницы Firecracker microVM
Создавайте, управляйте и подключайтесь к изолированным microVM с помощью Firecracker прямо из командной строки. Загрузите изолированную VM за миллисекунды, выполняйте команды, передавайте файлы — без SSH.
--from-imagebase, node22, node24, python3.13--json для скриптов и автоматизации--from-image)curl -fsSL https://vmsan.dev/install | bash
Эта команда загружает и устанавливает всё в ~/.vmsan/:
node22, node24, python3.13) загружаются как предварительно собранные артефактыПри установке стандартного релиза встроенные среды выполнения загружаются с https://artifacts.vmsan.dev/ и не требуют Docker. При установке из исходников среды выполнения собираются локально.
curl -fsSL https://vmsan.dev/install | bash -s -- --uninstall
Если вы хотите собрать из исходников:
# Установка зависимостей
bun install
# Сборка агента внутри VM
cd agent && make install && cd ..
# Сборка CLI
bun run build
# Связывание локальной сборки
mkdir -p ~/.vmsan/bin
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Создать и запустить VM
vmsan create --runtime node22 --memory 512 --cpus 2
# Создать VM из Docker-образа
vmsan create --from-image node:22-alpine
# Список всех VM
vmsan list
# Выполнить команду внутри VM
vmsan exec <vm-id> ls -la
# Интерактивное выполнение с PTY
vmsan exec -i <vm-id> bash
# Подключиться к оболочке запущенной VM
vmsan connect <vm-id>
# Загрузить файл в VM
vmsan upload <vm-id> ./local-file.txt /remote/path/file.txt
# Скачать файл из VM
vmsan download <vm-id> /remote/path/file.txt ./local-file.txt
# Создать снимок запущенной VM
vmsan snapshot create <vm-id>
# Список снимков
vmsan snapshot list
# Восстановить VM из снимка
vmsan create --snapshot <snapshot-id>
# Остановить VM
vmsan stop <vm-id>
# Удалить VM
vmsan remove <vm-id>
| Флаг | Описание |
|---|---|
--json | Вывод структурированного JSON |
--verbose | Показать подробный отладочный вывод |
vmsan.toml (планируется в 0.5.0)nftables с атомарным применением правил для сетевой изоляции (начиная с 0.2.0)# Сборка
bun run build
# Связывание локальной сборки
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Режим разработки (слежение)
bun run dev
# Запуск тестов
bun run test
# Проверка типов
bun run typecheck
# Линтинг и форматирование
bun run lint
bun run fmt
bin/ Точка входа CLI
src/
commands/ Подкоманды CLI
services/ Клиент Firecracker, клиент агента, сервис VM
lib/ Утилиты (jailer, сеть, оболочка, логирование)
errors/ Система типизированных ошибок
generated/ Определения типов API Firecracker
agent/ Go-агент, работающий внутри VM
docs/ Сайт документации (vmsan.dev)
/30 (198.19.{slot}.0/30)Состояние сохраняется в ~/.vmsan/:
~/.vmsan/
vms/ Файлы состояния VM (JSON)
jailer/ Директории chroot
bin/ Бинарный файл агента
kernels/ Образы ядер VM
rootfs/ Базовые корневые файловые системы
registry/ Кэш rootfs Docker-образов
snapshots/ Снимки VM
Почему vmsan? Docker использует общее ядро хоста — побег из контейнера означает полный компрометацию. gVisor перехватывает системные вызовы в пользовательском пространстве, уменьшая поверхность атаки, но не устраняя её полностью. Kata Containers обеспечивает настоящую изоляцию VM, но требует сложной оркестрации (containerd, shimv2, K8s). Vagrant запускает полноценные VM, которые загружаются 30+ секунд и потребляют сотни мегабайт.
vmsan даёт вам аппаратный уровень изоляции с минимальной поверхностью атаки Firecracker (< 50 тыс. строк кода), загружается за миллисекунды и требует нулевой настройки — установил и работай.
Опубликовано под лицензией APACHE-2.0.
Сделано @angelorc и сообществом 💛
🤖 автообновлено с помощью automd
| Команда | Алиас | Описание |
|---|
create | Создать и запустить новую microVM | |
list | ls | Список всех VM |
start | Запустить остановленную VM | |
stop | Остановить запущенную VM | |
remove | rm | Удалить VM |
exec | Выполнить команду внутри запущенной VM | |
connect | Открыть интерактивную оболочку для VM | |
upload | Загрузить файлы в VM | |
download | Скачать файлы из VM | |
network | Обновить сетевую политику на запущенной VM | |
snapshot | Управление снимками VM (создать, список, удалить) | |
doctor | Проверить системные предварительные требования и работоспособность установки |
| vmsan | Docker | gVisor | Kata Containers | Vagrant |
|---|
| Уровень изоляции | ✅ Аппаратный (KVM) | ❌ Общее ядро | ⚠️ Ядро пространства пользователя | ✅ Аппаратный (QEMU/CH) | ✅ Аппаратный (VBox/VMware) |
| Время запуска | ✅ ~125 мс | ✅ ~50 мс | ✅ ~5 мс | ⚠️ ~200 мс+ | ❌ 30-60 с |
| Сложность настройки | ✅ Одна команда | ✅ Низкая | ⚠️ Средняя | ❌ Высокая | ⚠️ Средняя |
| Модель безопасности | ✅ Jailer + seccomp + cgroups + выделенное ядро | ⚠️ Пространства имён + cgroups | ⚠️ Фильтрация системных вызовов | ✅ Полная VM + вложенные контейнеры | ✅ Полная VM |
| Сетевая изоляция | ✅ Встроенные политики (разрешить/запретить/своя) | ❌ Вручную (iptables) | ⚠️ Наследуется от Docker | ❌ Вручную | ⚠️ NAT/мост |
| Поддержка Docker-образов | ✅ --from-image | ✅ Родная | ✅ Через runsc | ✅ Через containerd | ❌ |
| Интерактивная оболочка | ✅ WebSocket PTY | ✅ exec | ✅ exec | ✅ exec | ✅ SSH |
| Передача файлов | ✅ Встроенная загрузка/скачивание | ✅ cp | ✅ cp | ✅ cp | ⚠️ Общие папки / SCP |
| Вывод JSON | ✅ Все команды | ⚠️ Частично | ❌ | ⚠️ Частично | ❌ |
| Накладные расходы по памяти | ✅ ~5 МиБ на VM | ✅ ~1 МиБ | ⚠️ ~15 МиБ | ❌ ~30 МиБ+ | ❌ 512 МиБ+ |
| Лучше всего подходит для | 🏆 Песочницы ИИ, недоверенный код, мультитенант | Общие рабочие нагрузки | Усиление безопасности K8s | Соответствие требованиям K8s | Среды разработки |