Info
本記事はAkatsuki Games Advent Calendar 2024における22日目の記事です。 昨日の21日目はYuji Sugiyamaさんの記事『「桜井政博のゲームを作るには」を自身の仕事・所属チームに当てはめてみる』でした。桜井さんの有名な動画をもとに、チームで働くということを掘り下げる内容になっていて面白いので、ぜひ読んでみてください。

はじめに 見出しへのリンク

実家など遠隔地で自宅サーバを運用している際、通常であればSSH経由での操作で管理は事足りるのですが、稀にSSHでは困るケースがあります。例えば、以下のような場合です:

  1. 何らかの理由により、SSHが疎通しなくなってしまったので、コンソール経由で操作したい
    • 「電源が切れてしまった」「更新時に何かが起きて正常に起動しない」など……
  2. BIOS/UEFIなど、OSより下のレイヤの設定を変更したい
  3. 遠隔でキーボードやディスクを接続してOSインストールなどをしたい

特に 1 は、気をつけていても意図せず発生することがあります。AWSといったクラウドや VPS を使っている場合はステージング環境での動作確認・仮想コンソール経由での操作ができるので検知や復旧も比較的容易なのですが、大抵の自宅サーバにステージング環境や仮想コンソールは存在しないでしょう。なぜなら、それを実現するためには自費の(金銭的・時間的)コストがかかってしまうからです。

特に備えがない場合、こうしたトラブル時に取ることのできる手段は概ね二つあります:

  • 遠隔地に話が通じる人がいる場合、その人に操作してもらう
  • 遠隔地に赴いて作業する

前者であれば楽に対応ができますが、遠隔地に「話の分かる」人がいることが前提になります。例えば実家の場合は親族に頼んで操作してもらうことになるわけで、電源のON/OFF以上のことをやってもらうのはなかなか難しいと言えます。 後者については生活している場所の近辺であればいいものの、東京と北海道・沖縄クラスに離れている場合だと厳しさを感じずにはいられません。「まあどうしても必要なわけではないし、次帰省した時に直すか…………」と、しばらくの停止を許容して先延ばしにする方が多いのではないでしょうか。

だから「クラウドやVPSみたいに、遠隔でコンソールなどを操作するための機材(リモートKVM)が欲しい」と誰もが一度は思うのです。しかし、このようなエッジケースのトラブルは年に一度起きるか起きないかくらいなので、そんなにコストをかけたくはありません。業務用機器は高すぎて話にならず、 Raspberry Pi を使った PiKVM1 も、一台あたり$300くらいからのスタートになります。 管理するサーバが一台だけならいいですが、複数台になるとコストも無視できないほどかかりますし、滅多に起きないトラブルのための備えとしては非常にコスパが悪いわけです。じゃあ自作するかと言われても、自作したら自作したでその管理をどうするのかという疑問がつきまといます2。そして「いつか欲しいものリスト」に PiKVM を入れて忘れた頃にトラブルが発生し、青ざめたまま盆か正月を迎えるのが我々人類なのです3

しかし、2024年。ニッチなご自宅リモートKVM界隈に期待の新星が現れました。その名を NanoKVM といいます。

期待の新星、NanoKVM 見出しへのリンク

新星こと NanoKVM の良い点はいくつかあるのですが、何といってもその形状と価格でしょう。

以下の写真は、私が実際に購入した NanoKVM (Full版4)になります。一目で分かるように、その体躯は Raspberry Pi 以上に小型です。

開封した中身一覧(NanoKVM Full版)

開封した中身一覧(NanoKVM Full版)

チョコレート菓子ほどのミニサイズ!

チョコレート菓子ほどのミニサイズ!

これらは公式の販売元(AliExpress)5から購入したものですが、お値段はいくらだと思いますか? なんと、送料込みで10142円でした。決済したのが11月頭だったので、当時のレートでドルに直すと$67くらいでしょうか。PiKVMの1/5くらいの価格で一台が手に入ることになります。 そして、今販売ページを見たところ、年末だからかセールで少し安くなっているようです。$60くらいなんじゃないかなと思います。

機能も PiKVM より劣っているわけではなく、ほとんど同等です。詳細は公式の技術仕様6をご確認いただきたいのですが、$300以上する PiKVM V4 とほぼ同じ機能をサポートしていることが分かります。 また、 RISC-V ベースの自社開発マイコンを採用しているだけあって、0.2Aと極めて省電力なのも魅力の一つ。USB-C給電なので、安いACアダプタとケーブルを買えば事足りますし、サーバのUSB端子から常時電源が供給されているようであればケーブルだけでも済みそうです。

さらに、こういった AliExpress 経由の機器にありがちな技適問題ですが、少なくとも NanoKVM には無線機能が内蔵されておらず該当しないというのも良いところです7

……と、ここまで美辞麗句を並べてきましたが、スペックが良くても実際に使ってみたらあんまりだったといったケースはつきもの。 きちんと動くのか、実際に私が運用している自宅サーバで使ったところをレポートしていきます。

実際に使ってみる 見出しへのリンク

電源用ヘッダを取り付け 見出しへのリンク

今回私が購入したのはFull版なので、サーバの電源を操作するためのボードとピンが付属しています。これを使ってNanoKVMとマザーボードを接続することで、例えば遠隔地の自宅サーバの電源が落ちてしまったり、完全にフリーズしてしまった時に電源のON/OFFができるようになります。

(2025/01/15 訂正 ここから) 電源操作用のボードにはマザーボードのピン側に差し込むアダプタと、中継用のピンが備え付けられています。アダプタ側をマザーボードに差し込み、ケース側のケーブルを中継用のピンに差し込むことで、ケース側電源ボタンとNanoKVM側の電源操作機能を両立させることができます。 記事作成当初は「ケース付属の電源スイッチのピンを奪ってしまう」と記載しておりましたが、これは誤りでした。不正確な情報についてお詫びするとともに、Zennのコメントにてご指摘いただいたToshitaka Miuraさんにこの場をお借りしてお礼申し上げます。ありがとうございました。

実際に取り付けた際の写真が以下です。

付属のボードに付属したアダプタと、中継用のピン

付属のボードに付属したアダプタと、中継用のピン

中継用のピンに、NanoKVMに付属していたケーブルを用いてケース側のケーブルと接続

中継用のピンに、NanoKVMに付属していたケーブルを用いてケース側のケーブルと接続

アダプタを差し込んだ状態

アダプタを差し込んだ状態

3枚目のアダプタを差し込んだ状態の写真を見ていただくと分かりますが、USBケーブル・ケースによっては写真のように外側へ飛び出てしまう場合があります。 この場合はL字型のUSBケーブルを用意するか、マザーとアダプタをケーブルで結ぶようにするなど、工夫が必要になるかもしれません。なお、私は気合で押し込みました。 (2025/01/15 訂正 ここまで)

今回取り付けた自宅サーバはASRockのN100DC-ITX8を使ったもので、サーバの電源を落としていてもUSBには電力が供給されているようでした。なので、NanoKVMの電源もサーバ側のUSBポートから調達することにします。 ちなみに、NanoKVMには電源供給用のUSB-Cポート、HID通信用のUSB-Cポート、サーバ電源操作用のUSB-Cポートの三つがあるのですが、HID通信用のUSB-Cポートは電源供給も兼ねることができます。なので、マザーボードから電力が供給されるタイプのサーバをお持ちの方は、通信用のUSBケーブルを一本用意するだけで済みそうです(電源操作用ボードには別途USBケーブルが付属しています)。

その他、HDMIケーブルやLANケーブルの接続を終えた結果、以下のようになりました。やや不恰好ですが、試してみる分には良いでしょう。

ケーブルを全て繋げ終えた形態

ケーブルを全て繋げ終えた形態

起動と接続 見出しへのリンク

起動は極めて簡単で、電力供給のあるUSBケーブルを差し込むと自動で立ち上がります。初期化が完了すると、画面上にプライベートIPアドレスが表示されるため、そこに同じLANからブラウザでアクセスすることで管理画面が開きます。80番ポートで待ち受けているのでポートの指定も不要でした。

最初にパスワード設定を求められるので、それを終えて開いた画面が以下になります。自宅サーバ側のコンソールが確認できています。

管理画面の初期表示(コンソール)

管理画面の初期表示(コンソール)

もちろん、そのままキーボード入力が可能です。画面もH.264で配信されているので、サーバ管理用途であればこれ以上ないくらいスムーズに見えます。

SLコマンドを走らせてみた例

SLコマンドを走らせてみた例

電源スイッチの操作(電源の制御)もUIから行えます。VPSでサーバを起動・終了させるのと似た感覚ですね。

管理画面の初期表示(コンソール)

管理画面の初期表示(コンソール)

また、今回は試しませんでしたが、仮想ディスクをマウントさせる機能もここから制御できるようです。

マウントさせるディスクイメージの転送方法

マウントさせるディスクイメージの転送方法

このように、ほぼセットアップ不要でリモートKVM環境ができあがりました。

外部から接続する 見出しへのリンク

とはいえ、このままではLAN内からしか管理画面にアクセスできません。 VPN用の機器を別途設置している方はそちらからアクセスすれば良いですが、ポート開放ができない等の理由で外部からLANへ直接アクセスする手段がないのも十分あり得ます。

NanoKVM はそうしたケースにも対応していて、 Tailscale9 のクライアント機能を持っています。これを設定してあげれば、ポート開放ができない環境でも Tailscale (P2P) で操作できます。これであれば遠隔地それぞれにVPN機器を設定する必要もないですし、ポート開放もしなくて済むのでセキュアです。

……と書いておいて恐縮なのですが、僕の環境にはすでにVPNが設置されているのと、 Tailscale の設定は簡単すぎてわざわざ書くほどではないので、今回はそういう設定がありますという記載のみとさせてください。

Tailscaleの設定もメニューから可能

Tailscaleの設定もメニューから可能

NanoKVMの課題 見出しへのリンク

ここまでの説明を読んで「超いいじゃん、さぞかし便利に使い倒しているんでしょうな」と思われた方もいらっしゃると思いますが、結論、僕の環境では試験的に使う程度に留めようと考えています。メインで運用している環境にはまだ組み入れられないかなといった所感です。 理由は大きく分けて二つあります。

(課題1) 設定や構成のセキュリティが甘い 見出しへのリンク

Info

2025/01/15 追記 2025/01/10 にリリースされた v2.1.4 にて、パスワード変更が root ユーザーにも反映されるようになったようです。 デフォルトでSSHサーバが有効であり続けるべきかには議論があると思いますが、クリティカルな問題は緩和されたと考えて良いと思います。 アップデートがお済みでない方は更新されることをお勧めします。 https://github.com/sipeed/NanoKVM/commit/d7ca7c453d821ad099bf79b463969419041279cb

また、2025/01/14 にリリースされた v2.1.5 では、 Tailscale 使用時にメモリ不足(OOM)で不安定になる問題への暫定的な対策が含まれています。こちらも併せて更新されると良さそうです。 https://github.com/sipeed/NanoKVM/commit/85f6447a16cc2591c6459b7d3dfda4d4cb75e98c

以下の文章は、執筆時点で最新だった v2.1.2 のものです。

これは指摘せざるを得ません。 例えば、記事中で「管理画面の初回アクセス時にパスワードの設定が求められる」と書きました。これだけ見るとセキュアに感じますが、しかし NanoKVM では root ユーザでログイン可能なSSHサーバが最初から稼働しており、その root パスワードは変更されません。で、肝心の初期値はというと……まさかの root なわけです10

$ ssh [email protected] 
The authenticity of host '192.168.10.169 (192.168.10.169)' can't be established.
ED25519 key fingerprint is *REDACTED*.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.169' (ED25519) to the list of known hosts.
[email protected]'s password: 
# id
uid=0(root) gid=0(root) groups=0(root),10(wheel)
root:root でお手軽管理!(ではない)

いやいや、これを変えないと意味ないじゃん……。一見脆弱性に見えるのですが、User Guide11にも記載があるので、単に不親切な仕様なようでした。なお、普通の Linux と同様、パスワードはrootログイン後に passwd コマンドで変更できます。 おそらく今後修正が入るんだろうなと思いつつ、このレベルの問題が残っているのを見ると、他にもマズい設定が入っていそうだなと直感的に考えてしまうわけですね。

また、販売している企業は明確とはいえ、 AliExpress が公式販売チャンネルである機器のファームウェアやバイナリを信用しきれるか? といったところもあります。Tailscale にしても、自前のCDNから配布している古いクライアントを使用しているようでした12。こういう雑なところを見ると、サーバ管理の一部を担う重要なポジションの製品としてはシュッと成熟しきれていないのかなと感じます。

また、ファームウェアの透明性については、OSSを用いてファームウェアをビルドする非公式の取り組みがあるようなので一定透明性も担保できそうです13。が、 xz のような件もあるので、この取り組みをそのまま信じ切っていいのかは微妙なところ。物量的に全て自前でレビューするのも難しいでしょうから「信用をどこに置くか?」を考えないといけません。

(課題2) 対抗馬が出てきている 見出しへのリンク

NanoKVM に全振りできないもう一つの理由ですが、 JetKVM14 という製品がまもなく出てきそう、というのがあります。 こちらは KickStarter でのクラウドファンディングなので製品としてまだ怪しいものの、一台あたり$69と NanoKVM とほぼ同じ価格です。目標金額にはすでに到達済みでまもなく出荷開始とのこと。全ソフトウェアを可能な限り GPL でリリースすると明言していますし15、デザインも一段オシャレでイケているときました。 安定して生産できるようになれば、 NanoKVM よりも洗練されていそうだなと感じます。先行きがまだ見通せないので評価できないのが難点ですが。

いずれにせよ、 NanoKVM が風穴を開けた安価なリモートKVMの分野について、有力な対抗馬がまもなく現れそうというのは大きいです。

まとめ 見出しへのリンク

自宅サーバはあくまでロマンであり「光熱・通信・材料費、管理する気力を含むランニングコストを考えると、大抵の場合は既存サービスやVPSを使った方が安いし早いし安全セーフティー」と言われ始めて五千年くらいが経った気がしています。 そんな世界でも NanoKVM のような革命児が生まれてきているのは、素直に嬉しいし楽しいものです。

すでに記載した通り、私はメイン環境への NanoKVM の投入には躊躇してしまっていますが「多少リスクを取ってでも気軽にサーバを管理したい」「僕と同様、試験的な環境で触って遊んでみたい」といった方にはうってつけの製品だと思います。何より安くて小さいので、ダメだった時のショックもさほど大きくないのです。 少なからず需要があるオーシャンなので、ご紹介した JetKVM のような対抗馬も含め、今後の発展に期待が持てるところです。ひょっとすると、数年後には自宅サーバ界のデファクトスタンダードな存在になっているのかもしれませんね。


ライセンス 見出しへのリンク

本記事の内容は、特記なき限りCreative Commons Attribution 4.0 International Public License16のもとで自由に利用することができます。ただし、別のライセンスが示されている部分についてはそちらに従ってください。 なお、Zennにて同一の内容17を掲載しています。

Info
明日はHajime Sannoさんの記事になります。お楽しみに!

  1. https://pikvm.org/ ↩︎

  2. NASにせよ何らかのサーバにせよ、自作すると「既製品より安上がり!」と最初は思うのですが、労力のかかるハード・ソフトのメンテナンスをサボると動かなくなることが多々あり、既製品のありがたみを感じるところまでがセットではないでしょうか。その上で、何を自作するべきかを考えられるようになってくると深みが増す印象です。 ↩︎

  3. 実家が遠いと、帰省のタイミングは大抵お盆か正月になりがち。 ↩︎

  4. NanoKVMにはFull版とLite版がありますが、Full版には電源操作用のピンヘッダやディスプレイなどが付いてきます。 ↩︎

  5. https://ja.aliexpress.com/item/1005007369816019.html ↩︎

  6. https://github.com/sipeed/NanoKVM/blob/main/README_JA.md#%E6%8A%80%E8%A1%93%E4%BB%95%E6%A7%98 ↩︎

  7. 公式ページによれば、 NanoKVM で採用されているのは無線機能を省いた LicheeRV Nano E のようです。 ↩︎

  8. https://www.asrock.com/mb/Intel/N100DC-ITX/index.jp.asp ↩︎

  9. https://tailscale.com/ ↩︎

  10. GitHubでもIssueとして挙げられています : https://github.com/sipeed/NanoKVM/issues/198 ↩︎

  11. https://wiki.sipeed.com/hardware/en/kvm/NanoKVM/user_guide.html ↩︎

  12. https://github.com/sipeed/NanoKVM/blob/93ce6009c6cceb0d7f2b57b6cd7d3239935d0dc8/server/service/network/tailscale.go#L71 ↩︎

  13. https://github.com/scpcom/LicheeSG-Nano-Build ↩︎

  14. https://jetkvm.com/ ↩︎

  15. https://jetkvm.com/docs/getting-started/open-source ↩︎

  16. https://creativecommons.org/licenses/by/4.0/legalcode.ja ↩︎

  17. https://zenn.dev/flfymoss/articles/2024-12-22-play-with-nanokvm ↩︎