
Firecrackerをシンプルに。ミリ秒でセキュアなマイクロVMを起動。インストールからインタラクティブシェルまでを1コマンドで。
🔥 Firecracker microVM サンドボックスツールキット
コマンドラインから、隔離された Firecracker マイクロVMを作成、管理、接続できます。数ミリ秒でサンドボックス化されたVMを起動し、コマンドを実行、ファイルを転送 — SSHは不要です。
--from-image で任意のOCIイメージからrootfsを構築base、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
# DockerイメージからVMを作成
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
# Lint & フォーマット
bun run lint
bun run fmt
bin/ CLIエントリポイント
src/
commands/ CLIサブコマンド
services/ Firecrackerクライアント、エージェントクライアント、VMサービス
lib/ ユーティリティ (jailer、ネットワーキング、シェル、ロギング)
errors/ 型付きエラーシステム
generated/ Firecracker API型定義
agent/ VM内で動作するGoエージェント
docs/ ドキュメントサイト (vmsan.dev)
/30 サブネット (198.19.{slot}.0/30) を持つTAPネットワークデバイスを取得状態は ~/.vmsan/ に保存されます:
~/.vmsan/
vms/ VM状態ファイル (JSON)
jailer/ Chrootディレクトリ
bin/ エージェントバイナリ
kernels/ VMカーネルイメージ
rootfs/ ベースルートファイルシステム
registry/ Dockerイメージrootfsキャッシュ
snapshots/ VMスナップショット
なぜvmsanなのか? Dockerはホストカーネルを共有するため、コンテナエスケープが発生するとゲームオーバーです。gVisorはユーザー空間でシステムコールをインターセプトし、攻撃対象領域を減らしますが、排除するわけではありません。Kata Containersは本物のVM分離を提供しますが、複雑なオーケストレーション(containerd、shimv2、K8s)が必要です。VagrantはフルVMを起動し、30秒以上と数百MBを要します。
vmsanは、Firecrackerの最小限の攻撃対象領域(5万行未満のコード)によりハードウェアレベルの分離を提供し、ミリ秒で起動し、設定不要でインストールしてすぐに使えます。
Published under the APACHE-2.0 license.
Made by @angelorc and community 💛
🤖 automd で自動更新
| コマンド | エイリアス | 説明 |
|---|
create | 新しいマイクロVMを作成して起動 | |
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) |
| 起動時間 | ✅ ~125ms | ✅ ~50ms | ✅ ~5ms | ⚠️ ~200ms以上 | ❌ 30-60秒 |
| セットアップの複雑さ | ✅ 1コマンド | ✅ 低 | ⚠️ 中 | ❌ 高 | ⚠️ 中 |
| セキュリティモデル | ✅ 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出力 | ✅ すべてのコマンド | ⚠️ 一部 | ❌ | ⚠️ 一部 | ❌ |
| メモリオーバーヘッド | ✅ VMあたり約5 MiB | ✅ 約1 MiB | ⚠️ 約15 MiB | ❌ 約30 MiB以上 | ❌ 512 MiB以上 |
| 最適な用途 | 🏆 AIサンドボックス、信頼できないコード、マルチテナント | 一般的なワークロード | K8sセキュリティ強化 | K8sコンプライアンス | 開発環境 |