KMS認証サーバを作ってみる。

Windows 10 のKMSホストキーをゲットした。仮想PCソフトを駆使してKMS認証サーバーを普通のPC1台だけでできる限り手間をかけずに構築した覚え書き。

※これはKMS PicoやKMS Toolsなどの怪しいツールの使い方ではない。MSDN(VL版)でMSに電話して入手した正規のキーによるもの。不正なライセンス認証を行いたいならば、この先読む必要なし。

MSDN(VS)サブスクリプションの期間が間もなく終了する。節約のため更新はしないので、この先は取得したツールとライセンスでしばらく過ごさなければならない(MSDNはサブスクリプション終了後も取得したライセンスキーは使っても良い契約になっている)。Visual Studioは静的VLキーなので問題ないとして、Windowsクライアント類が問題になる。物理マシンはそうそう交換するわけでは無いので20回くらいWindows10ProかEnterpriseの認証ができれば困ることは無いが、仮想マシンは作成しては捨てていくような使い方をしているからいずれ上限に達するはず。マシン構成が記述されたファイル、VMwareであれば.vmxとディスクイメージ(空でも良い)を保管しておけば認証回数をカウントアップせずにアクティベーションできるが、自由度が低いし、正直管理が面倒。

インターネット接続無しでも仮に自宅にKMS認証サーバがあれば半年に一度以上認証をかけ続けることで正規ライセンス認証が通った状態を保てる。それは知っているがKMS認証サーバにはクライアントPC25台以上という一般家庭においては途方もない要件が課されているので躊躇していた。今回MSDNサブスクリプションが終了する記念にWindows10とWindows Server 2019のKMSホストキーをもらうことに無事成功したから、面倒なのをあきらめてKMS認証サーバを立てることにした。

次のシチュエーションでKMS認証サーバを構築するミッション。

・認証サーバはVMWare Workstation 14上のWindows 8.1 Pro 32ビット版を使う。
Windows10は年一回の大型更新が面倒なため、すでに延長サポートに入ったWin8.1を採用。リソースを抑えたいので32ビット版を選択。KMSキーはWindows 10用のものだがWin8.1でもアップデートを入れるとホストキーを適用して自機以外のWin10の認証を行うことができる。

・宅内LANのDNS、DHCPはいじらない。AD(Active Directory)も構成しない。
そもそもブロードバンドルータのDNSリレーとDHCPしか使ってないので複雑なことはできない。

・認証を開始させるため、VMWareの仮想PCを使って25台以上のクライアントWindowsをとにかく認識させる。
しきい値を超えて認証を開始しだしたらイメージを保存して認証サーバに「永遠の命を与える」。これが今回の目標。KMSホストキーは6台10回までという厳しい制限が課されているから一度のホストキー認証も無駄にはできない。今のところMSDNサブスクリプション契約終了後もキーの認証は行えるが、MSの気が変わってTechNetみたいに終了後はキーを無効にされるかもしれないし。

・あまり手間はかけたくない。

先に結果だけ。認証サーバの「Win81ProKMSSvr」がWin10Pro Workstationを認証したところ。

Win10KMSActivate

やりかた (細かいところは順次追記予定)

1.VS事務局に電話をして「MSDNサブスクリプションでWINDOWS 10のKMSホストキー欲しい。」と伝える。

2.数日後VLSCにKMSホストキーが表示されるので控える。

3.KMS認証サーバにするためWindows 8.1 ProをVMWareのゲストに1インスタンス作成。

・Retail、MAKキーの登録は不要。
・名前は「Win81ProKMSSvr」(何でもよい)。
・VMWareの簡易インストール設定で自動ログオンを有効にしておく。
・メモリ2GB、CPU 2コアくらいで十分。
・IPアドレスは固定。ここでは192.168.10.10/24にした。宅内LANの状況に合わせる。
・Windowsファイアウォールで認証サービスを有効にする。

後はWindows Updateをひたすら行う。(RetailキーやMAKキーはいれなくてもよい) インスタンスはC:\VM以下に作成。

4.KMSホストキーをインストール。
管理者コマンドプロンプトで slmgr /ipk

5.KMSホストキーのオンライン認証を行う。
管理者コマンドプロンプトで slmgr /ato

※仮想マシンでKMSサーバーを作りたいだけならここで終了。

6.クライアントWindowsとしてWindows 8(8.0)Pro 32ビット版を1インスタンス作成。

・名前は「Win8ProVLKMSCli」(後のバッチファイル内で指定する)。
・VMWareの簡易インストール設定で自動ログオンを有効にしておく。
・メモリ2GB、CPU 2コアくらい。
・Windows Updateは不要。
・IPアドレスはDHCPで配布。
Win8を使うのはリソースの要件が8.1や10より低いことと、Vistaや7より仮想マシン上での動作が軽いため。

7.クライアントWin8の設定を行う。複製時にCMIDを変更してKMS認証を行うためのスクリプトと仕掛けを組む。

7-1.KMSサーバのアドレスを登録
仮想マシン内で slmgr /skms 192.168.10.10 を実行。(アドレスはKMS認証サーバ(Win8.1)のアドレスに合わせる)

7-2.CMIDリセット用スクリプトの配置
[Win8の仮想マシン内に置くC:\TEMP\rearm.bat]

if exist c:\temp\out.txt goto end
cscript c:\windows\system32\slmgr.vbs /rearm > c:\temp\out.txt
schtasks /Delete /TN rearm /F >> c:\temp\out.txt
shutdown /r /t 0
:end

rearm.batファイルを仮想Win8内に配置したら、同じ仮想マシン内の管理者コマンドプロンプトでタスクを登録する。

schtasks /Create /TN rearm /TR c:\temp\rearm.bat /RU SYSTEM /SC ONSTART /RL HIGHEST /NP /F

8.クライアントWin8のスナップショット(VMWareの機能)を作成。
スナップショット名は「newclient」

9.VMwareのリンククローン機能でクライアントWin8を25インスタンス複製する。ここで使うスクリプトが手抜きポイント。

[物理マシンに置くclientvm.bat]

set path=C:\Program Files (x86)\VMware\VMware Workstation;%path%
set num=01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
goto %1
goto end

:create
for %%n in (%num%) do (
	md C:\VM\Win8ProVLKMSCli-Lnk%%n
	vmrun -T ws clone C:\VM\Win8ProVLKMSCli\Win8ProVLKMSCli.vmx -snapshot=newclient C:\VM\Win8ProVLKMSCli-Lnk%%n\Win8ProVLKMSCli-Lnk%%n.vmx -cloneName=Win8ProVLKMSCli-Lnk%%n linked
)
goto end

:startstop
for %%n in (%num%) do (
	vmrun -T ws start C:\VM\Win8ProVLKMSCli-Lnk%%n\Win8ProVLKMSCli-Lnk%%n.vmx
	choice /t 80 /c:c /d:c /m:Waiting...
	vmrun -T ws stop C:\VM\Win8ProVLKMSCli-Lnk%%n\Win8ProVLKMSCli-Lnk%%n.vmx
)
goto end

:deleteVM
for %%n in (%num%) do (
	vmrun -T ws deleteVM C:\VM\Win8ProVLKMSCli-Lnk%%n\Win8ProVLKMSCli-Lnk%%n.vmx
)
goto end

:end

このバッチファイルを使って物理マシン(VMWareホストマシン)で clientvm.bat create とするだけで25台分のリンククローンのインスタンスができる。

10.クライアントWin8の起動→終了を25インスタンス分行う。スクリプトは同じもの。この間もKMS認証サーバのインスタンスは動かしておく。

clientvm.bat startstop でVM起動→OS起動→rearm.batによる自動再設定→OS再起動→自動ログオン→VMシャットダウンが順次行われる。VMシャットダウンの待ち時間80秒はバッチのchoice /t 80のところで指定されているので物理マシンの速度に応じて調整する。

11.KMS認証サーバ側で状態を確認する。「現在の数」が25以上になり、クライアントWin8が認証を受けていたら完成。
slmgr /dlv

12.KMS認証サーバのインスタンスを保存する。クライアントWin8のインスタンスは要らない子と思って削除せず、2か月に1度くらい動かして「現在の数」を維持する。

削除したければclientvm.bat deleteVM で25個のリンククローンがすべて消える。

物理マシン25台なんて一般家庭ではなかな用意できないが仮想マシンを使えば実に簡単。サーバ1+クライアント25インスタンスを同時起動する必要は無いのでマシンパワーもそれほど必要ない。

※実際にはこの手順外でKMSサーバは宅内LAN側NIC(DHCPクライアント)と閉じた仮想NWにつながるNIC(ローカル固定IP)の2I/F構成にして、25インスタンスのKMSクライアントは閉じた仮想NW経由でKMSサーバにつなぐようにしている。KMSクライアントがインターネットにつながるのがなんとなく嫌だし。この状態でも25台の仮KMSクライアント以外の物理マシンは宅内LANにつながるNIC側からつなぐことで認証が行える。

後から気づいたが、「現在の数」は一か月ほど経って認証されないものがあると減っていくので月一程度でこのスクリプトを動かして「現在の数」を維持する必要がある。もしくは180日に一度クライアントを認証するそのときに「現在の数」を回復するためにスクリプトを動かすかどちらか。まあ、タクススケジューラにスクリプトを登録しておけばノータッチの放置プレイで30分程度で終わる作業なのでそれほど負担でもない。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中