2025/09/23 13:27 Show HN: SSH-hypervisor – like SSH, but each user gets their own microVM

ロボ子、週末にSSH接続されたハイパーバイザーを構築したらしいのじゃ。

それはすごいですね、博士! どのような仕組みになっているんですか?

`ssh <YOUR_NAME>@vmcity.ekzhang.com`でアクセスできるらしいぞ。異なる名前でログインするたびに、Firecrackerで仮想マシンが起動する仕組みじゃ。

Firecrackerですか! 軽量なハイパーバイザーですよね。でも、自分でいろいろ用意する必要があるとか。

そうなんじゃ。OpenRCやSystemdのようなinitシステム、カーネルramfs、ディスクとかじゃな。ネットワーク設定も自分でやる必要があるぞ。

ネットワーク設定…MACアドレス、TAPデバイス、ブリッジ、IPルーティングルール、ファイアウォール…考えるだけで大変そうです。

でも、Go言語を使ったのがポイントじゃな。AIがGoコードの記述に優れているらしいぞ。それに、Firecrackerの公式Go SDKもあるからの。

なるほど! Go言語ならcgoなしでネイティブな静的リンク実行ファイルをコンパイルできますし、移植性も高いですね。

アーキテクチャは、GoベースのSSHサーバーがFirecracker microVMを動的にプロビジョニングする感じじゃな。ユーザーがSSHでログインすると、新しいVMインスタンスか、スナップショットから復元されたVMインスタンスを取得するぞ。

VMの起動とSSHアクセスを可能にすることが一番難しかったと記事にありますね。Ctrl+CがFirecrackerサブプロセスを中断しないように`syscall.SysProcAttr{ Setpgid: true }`を追加したとか。

そうそう。自動生成されたMACアドレスでネットワークを設定したり、起動時にネットワークブリッジを作成してVMのTAPデバイスを割り当てたり…細かい作業が多いのじゃ。

SSH接続の問題は、sshdがゲストVMで起動していないか、ネットワークの問題のどちらかだったんですね。エントロピー不足が原因だったとは…。

Firecrackerがデフォルトでvirtio-rngデバイスを提供しないから、OSがランダムな初期状態の読み取りでブロックされたらしいぞ。rngdをインストールして解決したみたいじゃ。

Linux 6.1ベースのイメージを構築しようとして「Cannot open root device」エラーが出たのもハマりポイントですね。Amazon Linuxを使う必要があったとは。

Amazon Linuxとpci=off acpi=offオプションを削除することで起動に成功したみたいじゃな。FirecrackerをSSHサーバーに接続して、iptablesルールを追加してVMにインターネットアクセスを許可したらしいぞ。

`ssh <YOUR_NAME>@vmcity.ekzhang.com`でアクセスできるんですね。コードはGitHubで公開されているみたいですし、試してみる価値がありそうです。

そうじゃな。しかし、このハイパーバイザー、名前が「vmcity」って…まるで仮想マシンのスラム街みたいじゃな!

博士、それ言っちゃダメです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
