PCIe版NanoKVMの導入

 管理人がメインで利用しているPCは、UCSQの優勝賞品として頂いた Mac Mini (M2 Pro) です。このMac Miniは大変気に入っているのですが、一つだけ困るのがCPUがApple Siliconであり、x86のバイナリが動かないという点です。一般人には無縁だと思いますが、シェルコードなどを駆使するCTFのバイナリ問題にチャレンジするには死活問題であり、このためにx86 = Intel系のCPUを持つPCが必要となります。

 自宅にはIntel CPUのMacbook Pro 2016もあるといえばあるのですが、今となってはさすがに非力です。2025年秋に組み上げた家族共用PC (CPU : Ryzen 8600G / Memory : 64GB) を利用したいところです。色々試行錯誤した結果、最終的にIP-KVMを導入するしかないという結論に至り、PCIe版のNanoKVMを調達・導入したのですが、これがとても良いので本稿で紹介したいと思います。

[20251209追記] ご利用は計画的に!!!

 すでに確認された方も多数いらっしゃるかと思いますが、NanoKVMについて重大なセキュリティリスクがあることが報告されています。一番わかり易いのは以下のXポストのリンク先の記事でしょう。

 このXポストには冷静な反証のコメントも付けられていますが、それを割り引いても怪しさがあることは否定できません (個人的には、こちらの記事に書かれているように “その気になれば悪いことにも使える機能がたまたま残っていただけ” であり、過度に反応し過ぎだと思っていますが)。念の為ではありますが、管理人は以下を除くNanoKVMを起点とする全通信をブロックする設定を自宅NWのNGFW (PaloAlto)に入れました

  • デフォルトゲートウェイのIPアドレスへのping
  • NTPサーバ (sv1.localdomain1.com) へのNTP通信
  • ローカルのDNSサーバへのDNS通信
  • (そのうち追加するかも)

 後述する通り、管理人の接続元と接続先はネットワーク的に非常に “近い” ということもあり、セキュリティを確保しつつ利用できるだろうと思っていますが (一応セキュリティエンジニアですし)、この辺のリスクを正しく理解して回避できる自信がない方は、避けておいたほうが無難といえば無難でしょう。百歩譲って個人利用ならば自己責任で利用するのはありでしょうが、業務で本製品を利用するのは避けるべきでしょう。後述するように、真っ当なサーバ機器であればベンダ謹製のIP-KVMがあるはずです。

(IP-)KVMとは

 KVM = Keyboard, Video, Mouseの略で、大きく “KVMスイッチ” と呼ばれる製品群と “IP-KVM” と呼ばれる製品群に大別されます。細かく言えばもっと細分化できるのですが、超ざっくりで分類するとこのいずれかになるはずです。

KVMスイッチ

 前者は一組のキーボード / ビデオ (モニタ) / マウスを複数台のPC (基本的にサーバ機器) に接続し、接続先を切替ることで複数のPCを一組のキーボード / ビデオ(モニタ) / マウスで操作できるようにする製品です。企業向けだと複数台のサーバが収納されたラックに設置される “(KVM)コンソール” と呼ばれる機器があり、おおむね4〜8台程度の切替に対応する製品が多いと思います (筆者の経験上)。

 ちなみに2〜4台程度の切り替えであれば一般向けの製品も少数存在しています。たとえば管理人が利用しているモニタ (GIGABYTE M28U) にはKVMスイッチ機能が内蔵されており、管理人は会社貸与のノートPC (Dell Latitude) とMacmini (M2 Pro) とを一組のモニタとキーボードで切り替えて利用しています (キーボードはWin / Mac両用のREALFORCE)。このモニタを買う前は、プリンストンのPKV-02DVIという製品を愛用していました (KVMスイッチの中でも珍しいDVI対応の製品)。

IP-KVM

 KVMスイッチが、PCとキーボード / ビデオ(モニタ) / マウスとの通常の接続経路をそのまま利用して電気的に切替を行うのに対し、IP-KVMはそれらのデータをIPトラフィックに変換してネットワーク越しに操作を行います。KVMスイッチは電気的な信号の衰退がありますし、物理的に直結する必要があるので、ケーブル長はせいぜい数メートル程度が限界であるのに対し、IP-KVMは理論的にはIP-Reachableでさえあれば良いので、事実上距離の制限はないというのが大きな特徴です。

 ただし、IP-KVMは法人向けの製品であり、一般ユーザ向けではありません。私のように、隣の部屋のPCの電源をネットワーク越しに投入したいというニーズを持つ一般ユーザは超極少数でしょうが、たとえば同じ建物の別フロアにあるサーバルームに設置された機器を遠隔操作したいというニーズを持つ企業ユーザは一定数いるわけで、IP-KVMは後者のようなニーズに対応した製品なのです。ちなみに、KVMを独自に拡張した高機能な遠隔管理システムをソリューションとして持つサーバ機器メーカもあり、DellのiDRACHPのiLOなどが有名です (管理人は一時期業務で iDRAC を日常的に利用していました)。

なぜIP-KVMなのか

 一部前述の繰り返しになりますが、私の置かれていた状況とニーズは以下の通りでした。

  • CTF (の勉強) をする上で、Intel CPUが載ったPC (VM) 環境がどうしても欲しい
  • 自室にあるのはM2 ProのMac miniのみ、Intel CPUの機器はない (超非力な9年前のMacbook Proを除く)
  • 居間にある家族共用PC (Radeon 8600G / 64GBの自作WinPC) にVMを立ててRDPして利用したい
  • 居間で就寝している家族がいて、CTF (の勉強) をする時間に物理的に電源を投入しに行くのは困難
  • 接続されているモニタは常時電源onで、PC本体の電源が入るとモニタの電源も入り、眩しくなる
  • 家族共用PCは超静音で、電源投入音や動作音が (就寝の) 問題になることはない

 この状況下で誰もがまず考えるのが、単純にPCを常時電源on状態にしておくという解でしょう。実行に移してみたのですが、共用PCである以上他人に電源を落とされることもありますし、何よりBIOS / OSでどのような電源設定を行っても、長時間操作せずに放置すると最終的にスリープに入ってしまい、RDP接続不可状態になってしまいましたので、これはすぐにNGとなりました。

 次に考えたのが、WOL (Wakeup On LAN) の利用です。WOLはWOL対応のNICに特殊なパケットを送ることで、本体の電源を遠隔からOnにできるという仕組みです。WOLを利用するにはNICとOSが対応している必要があるのですが、最近組んだ家族共用PCのマザーボード (ASRock X870 Steel Legend WiFi) のオンボードのNICも、OSであるWindows 11も対応していました。しかし、いくら試行しても希望の動作 (通電状態ではあるが電源off状態からのPC起動) はできませんでした。おそらくですが、WOLパケットの送信側であるMac miniと、受信側である家族共用PCとが別ネットワーク (ブロードキャストセグメントが違う) であったためだと思われます。WOLは宛先IPとMACアドレスを指定するのですが、ここにどのようなパラメータを与えてもうまくいきませんでした。

 自室のMac miniから家族共用PCはIP Reachableであったため、それではIP-KVMしかないという結論になりました。

製品の選定

 前述の通り、IP-KVMは基本的に一般向けの製品ではなく、企業向けの製品を流用するのはあまりにも高価になります。民生用の製品も存在しないわけではないのですが、少なくとも日本国内では家電量販店に行けば手に入るようなものではなく、AmazonやAliExpress (以下アリエク) で少し “怪しげな” 製品を探すしかないというのが実情になります。

 AmazonとAliExpressに同一製品がある場合、ほとんどの場合前者よりも後者のほうが安価です。これは後者で仕入れたものを前者で転売しているケースがほとんどであるためです。というわけで、このようなニッチかつマイナーな製品の調達先は、少なくとも私の中ではアリエク一択となっています。というわけで、アリエクを数日間さまよい、情報収集をしました。

 個人が手に届くIP-KVMの取り扱いがあるのはさすがですが、アリエクとはいえ選択可能な製品はかなり限られていました。最終的に管理人が購入したのは Sipeedという会社の “NanoKVM PCIe” という製品でした。価格はクーポンが適用されて$46.77でしたが、Legionの記事で紹介したrakuten.comのキャッシュバックが12%あったので、実質$42 ≒ ¥6,500円くらいでした。IP-KVMとしては激安と言っていいでしょう。

 上のページ = 管理人が購入したページはこちらです。興味がある方は見てみてください。ちなみに日本のAmazonでも取り扱っているストアはいくつかあるようですが、POE + Wifi 版で約13,000円と、ほぼ倍の価格でした。

なぜPCIe版を選択したのか

 アリエクで検索すれば分かりますが、NanoKVMにはPCの外側での利用を想定した超小型筐体版と、PC本体に組み込むことを想定したPCIe版の2種類があります。前者について、1年弱前にPC Watchで採り上げられていますが、写真を見ればわかるように、極小の筐体に多数のインターフェースがあるため、結線するとかなりゴチャゴチャします。かなり熱くなるコメントも散見されますし、接続先のPCの筐体内に十分な余裕があるなら、個人的には見た目がスッキリして、PCケース内のエアフローによる冷却が期待できるPCIe版を推します。

 PCIe版の場合、POE (Ethernet経由で電源供給を受けることができる機能) と Wifi のそれぞれの有無によって4種類の製品があるのですが、私が選択したのは両機能がある製品でした。調達検討時点で特に必要性は感じていなかったのですが、価格差は$10程度でしたし、この差額をケチって後で困ることになるのも嫌だったので、あえてありありにしました (後述する通り、やはりいずれも不要でしたが…)。

到着〜PC本体への導入

 注文してから約1週間と少しで、注文した商品は無事到着しました。荷姿は以下のような感じで、かなりコンパクト。専用の箱で送り状にも品名の記載があり、かなりしっかりしている印象を受けます。

 箱の中身は以下の通りでした。肝心のPCIeカードはしっかりとした緩衝材に包まれており、当然ながら破損などは一切ありませんでした (壊すほうが難しそう)。

 左側のバッグの中身は以下の通り。組み上げてわかったのですが、左下のWifiのアンテナと右上から2番目のコードは2セット入っており (破損しやすいのでしょうか…)、好感が持てました。導入に必要なUSBやHDMIケーブルも同梱されていたのはありがたかったです。右上はロープロファイルな環境で利用するブランケットで、こちらを利用する場合はWifiは利用不可となります。右下のシールはちょっと用途がわかりませんでした。ご存じの方がいらっしゃったら教えてほしいです (基盤に貼ると放熱効果があるとか?)…

 組み込み工程の詳細は省きますが、作業を進めている途中で撮ったのが以下の写真です。PCケースとマザーボードを接続している一部の物理配線 (電源 / リセットボタン、HDDランプなど) の間に本機器が割り込むことになるため、一度マザーボードから線を抜いて挿し替える必要があります。ケース内に余裕がある自作PCで、かつ本人がPCの自作に慣れていないと、なかなか厳しい作業になると思います。

 適切に結線すれば、PC本体の電源ボタン・リセットボタンの機能を失うことなく、かつこれらをリモートから操作可能な状態になります。本体のボタンは変わらず利用できるのはありがたいですね (HDDのアクセスランプもNanoKVMを経由しますが、これをNanoKVMでモニタすることはできないようです)。

 結線を終えてPCIeスロットに挿入すると、以下の写真のような感じになります。この写真だとちょうどケーブルに隠れてよく見えませんが、PCIeスロットに挿入する部分があり (上の写真のほうがわかりやすいと思います)、NanoKVM への電源の供給はここから受けることになります。このため、仮にPCとしての電源がoffの状態でも、PC本体に通電していれば動作するということになります。PCIeの空きスロットがない or PCIeスロットがマザーボードにない場合は、マザーボード上のUSBヘッドと直結する、あるいは外部に出ているUSB Tyep-Cポートに接続して給電することになります (そのためのケーブルも同梱)。

 本体外側から見たのが以下の写真です。多くの機能がコンパクトに詰まっているのがわかると思います。結線は全て外してありますが、KVMボードの上からWifiアンテナ、RJ-45コネクタ (100Mbps)、HDMI、USB Type-C x 2 (電源供給用とキーボード / マウス接続用)、0.49インチのOLEDディスプレイが確認できます。この写真では小さくてわかりづらいですが、HDMIとOLEDの間に小さな物理スイッチもあります。

 ここまでくれば、後はケーブルを接続して利用するだけです。実際にどのような機能があるかなどについては、また別の記事としてまとめたいと思っています。

導入してみてわかった注意点

 ここでは、実際にNanoKVMを購入・導入した結果として、事前に知っておきたかった注意点をまとめておきます。

ローカルディスプレイ出力をどうするかが悩ましい (場合がある)

 NanoKVMがネットワーク越しにリモートに出力している画面は、PC本体の画像出力をNanoKVMの画像入力 (HDMI) することによって実現しています。しかし、NanoKVMから外部ディスプレイへの画像出力を行う仕組みはありません。これはつまり、リモートからNanoKVMでPCの画面出力を見えるようにするためには、ローカルのディスプレイ出力を諦めなくてはならないということを意味します。

 PC Watchにもあるように、HDMIスプリッター (分配器) を用意すれば、この問題は回避可能ではあります。しかし、その場合はリモートから操作を始めた時点でローカルディスプレイのスリープが解除され、かつNanoKVMの操作内容がそのままディスプレイにも表示されることになります。前述の通り、管理人は居間のPCを深夜に遠隔操作したかったので、これは容認できません。

 結局管理人がどうしたかというと、NanoKVMでは電源操作をすることだけにして、操作はRDPでログインして行うことにしました (ディスプレイの配線はいじらず、NanoKVMのHDMI端子には何も接続しない)。試してみればわかりますが、NanoKVMでキーボード・マウス操作は確かにできるのですが、RDPのほうが快適なのでこれで問題ないと思っています。

 NanoKVM経由 = ローカルディスプレイへの出力をそのまま転送しているため、たとえば電源投入直後のPOST (Power On Self Test) メッセージの確認やBIOSの操作も可能です。これができなくなるのは少しだけ不便といえば不便ですが、BIOSの設定変更なんてそうそう行うことではありませんし、特に問題にならないと思っています。

WifiはAP限定でクライアントに離れない (たぶん)

 管理人は、自宅ネットワークの構成変更を伴う物理接続は面倒という理由で、Wifi経由でNanoKVMに接続しようと目論んでいました。しかし、試行錯誤の結果、NanoKVMに組み込まれているWifi機能は自分自身がAPとして接続を受けることのみが可能で、自分が子機として既存のWifiに接続することはできないということが判明しました。

 IP-KVMを導入する場合、接続元と接続先はかなり離れた距離にあるはずです。接続先にWifiで接続できる範囲からIP-KVMを利用するとは考えにくいので、正直この仕様はどうかなと思いました。頑張ればWifiクライアントになれるのかもしれませんが、少なくとも公式のWikiのどこにもそのような記載は見当たりませんでした (セットアップ時に利用することを想定しているようです)。

Ethernet接続にの利用にはDHCPサーバが欲しい (楽するには)

 それではということで有線接続に切り替えたのですが、こちらは試行錯誤するまでもなく、同一ネットワーク上にDHCPサーバが必要であることがすぐに分かりました。一応初期値のIPはあるようなので (今となっては試せませんが….)、クロスケーブルでPCを直結 (最近はこんな事する人も少ないと思いますが…) することは可能で、そこからSSH接続して設定ファイルをいじれば任意のIPを設定することは可能ですが、面倒といえば面倒なので、DHCPを利用する方が楽だと思います。

 IP-KVMを自宅に導入しようというような酔狂な人であれば、DHCPサーバを立てる機器や心得はあると思いますが、ちょっと手間といえば手間です。NanoKVMがサーバ的に利用されることを考えると、NanoKVMのMACアドレスに対して常時同一IPが割り当てられるよう設定することが必須となるでしょう。

中華製品特有のリスクはある (かもしれない)

 IP-KVMは、制御したいPCに直結する必要があります。接続するネットワークも、自ずと一番奥深い場所になるでしょう。その一方で、アップデートを行う必要があるため、インターネットに出ることができる設定も与えられることになります。

 あまり考えたいことではありませんが、こちらの記事で指摘されているようなリスクを頭の片隅においておく必要はあると思っています。少なくともPCIe版のNanoKVMのOSはオープンソースではあるのですが、先の記事で指摘されているようにある時突然悪性コードが混入される可能性もゼロではありません。可能であれば、NanoKVM自身を起点とする外部通信のログを時々チェックして、不必要な通信 (Tailscaleなどを利用しない限り、アップデート以外の通信は不要なはず) はファイアウォールなどでドロップするのが望ましいでしょう。

ニッチなニーズに応える製品

 若干残念な点や懸念点はありますが、管理人が当初目標としていた別の部屋のPCの電源を物理的に投入するという目的は、見事に叶いました。POEやWifiははっきり言って不要でしたが、それもいい経験だったということで本人的には納得しています (価格差も大したことはありませんし)。

 前述の通り現状では電源操作しかできませんが、今後リモートで画面を出す必要に迫られたら、自宅でPCを利用する人に “使い終わったらディスプレイの電源を切る” ということを徹底してもらえばいいかなと思っています。現実的に、すぐ近くに寝ている人がいて、かつディスプレイのスリープが切れたとしても、それで目を覚ますことはたぶんないと思っています (寝ている人とディスプレイの位置・高さ関係や、個人差はあるかもしれませんが)。

 私の設置環境ではこのような制約はできてしまいましたが、これはむしろ特殊な状況で、ほとんどの場合はNanoKVMに画面出力を奪われる or ローカル / リモートに同じ画面が出力されても、問題になることはないでしょう。詳細は次の記事に譲りますが、USB接続を介してリモートにあるISOイメージをマウントするなど、サーバ管理者であればぜひ欲しい機能もあるので、ニーズに合えばコスパはとても高いと思います。

コメントする