KMS, cos'è e come funziona l'attivazione di Windows in rete locale

Come creare un server KMS in ambito locale usando uno script Python. Riservato a coloro che posseggono regolari licenze d'uso di Windows.

Un server KMS utilizzato all’interno della rete locale permette all’azienda di gestire l’attivazione delle singole postazioni risolvendo il problema delle licenze Windows ed evitando che i singoli dispositivi si colleghino con Microsoft.

Il protocollo sviluppato da Microsoft per KMS si basa su un’architettura client-server: ciascun client individua il server KMS da interrogare usando il DNS o una configurazione statica quindi avvia quella che viene chiamata Remote Procedure Call (RPC) per richiedere l’attivazione del sistema.

Per avviare la procedura di attivazione di Windows il client deve utilizzare una chiave GVLK (General Volume License Key) con la quale andrà ad interrogare il server KMS locale anziché un server Microsoft remoto.

Su GitHub, piattaforma di proprietà di Microsoft, è da tempo pubblicato e continuamente aggiornato un interessante progetto opensource chiamato py-kms.
Basato su Python, py-kms emula un server KMS e non impone alcun tipo di restrizione. Come spiegano gli autori del progetto, py-kms è pensato per coloro che hanno acquistato una regolare licenza di Windows ma per qualche motivo l’attivazione non funziona più: ad esempio nel caso di modifiche hardware importanti come la sostituzione della scheda madre con un modello completamente diverso.

Come abbiamo più volte sottolineato, infatti, una licenza d’uso non equivale a un Product Key: chi non fosse in possesso di un regolare Product Key acquistato da Microsoft o presso rivenditori affidabili non può sostenere di possedere alcuna licenza, neppure nel caso in cui la copia di Windows risultasse attivata.
È quindi essenziale rivolgersi a rivenditori affidabili per essere certi di non incorrere in qualunque problema.

Come creare un server KMS locale con py-kms

Il software py-kms, che emula un server KMS, può essere installato su qualunque sistema in grado di eseguire script Python.
È possibile utilizzare anche una macchina virtuale Ubuntu Linux avviata con la piattaforma WSL 2 in Windows 10 o in Windows 11.

In questo caso basta installare Ubuntu 20.04 LTS dal Microsoft Store quindi scegliere Ubuntu 20.04 LTS dal menu Start per avviare la distribuzione Linux con WSL 2.

Nella finestra Linux si deve innanzi tutto digitare il comando ifconfig per rilevare l’indirizzo IP assegnato all’interfaccia di rete virtuale.
Nell’esempio si vede che l’IP è 172.23.250.49.
Nel caso in cui ifconfig non fosse disponibile, è necessario installarlo con il comando sudo apt install net-tools -y.

Dopo aver annotato tale indirizzo IP locale è necessario scrivere quanto segue:

sudo apt update && sudo apt upgrade -y
sudo apt install git python3-tk python3-pip -y
sudo pip3 install tzlocal pysqlite3

Dal browser web bisogna quindi portarsi in questa pagina, fare clic sul pulsante verde Code quindi sull’icona evidenziata in figura.

A questo punto, nella finestra Linux di WSL 2 si può scrivere quanto segue:

git clone indirizzo_github

Al posto di indirizzo_github va incollato l’URL precedentemente copiato negli appunti usando CTRL+V o il tasto destro del mouse.

Si può quindi avviare il server KMS locale scrivendo due semplici comandi:
cd py-kms/py-kms
python3 pykms_Server.py

Lo script Python non mostrerà alcun tipo di output e la finestra resterà come nella figura precedente.

A questo punto si deve premere la combinazione di tasti Windows+X quindi scegliere Windows PowerShell (amministratore) oppure Terminale Windows (Admin) (a seconda che si utilizzi Windows 10 o Windows 11) quindi digitare:

netsh interface portproxy add v4tov4 listenport=1688 listenaddress=0.0.0.0 connectport=1688 connectaddress=indirizzo_ip_ubuntu_WSL

Al posto di indirizzo_ip_ubuntu_WSL è necessario indicare l’indirizzo IP della macchina virtuale Ubuntu Linux in esecuzione in WSL 2 (nel nostro esempio è 172.23.250.49 come visto in precedenza).

Aprire quindi una porta in ingresso su Windows Firewall usando il seguente comando PowerShell:

New-NetFirewallRule -DisplayName "PY-KMS" -Direction Inbound -LocalPort 1688 -Protocol TCP -Action Allow

Con i due comandi appena presentati si è fatto in modo che le richieste di connessione sulla porta TCP 1688 (utilizzata dal server KMS) vengano automaticamente reindirizzate verso l’IP locale assegnato all’interfaccia virtuale di Ubuntu Linux.

Come ultimo passo digitare ipconfig e annotare l’indirizzo IP associato all’interfaccia di rete fisica del sistema che ospita WSL 2.
L’indirizzo IP privato di tale sistema dovrà appartenere all’intervallo di IP scelto per la rete LAN. Nell’esempio è 192.168.1.170. Più avanti dovrà essere sostituito al posto di INDIRIZZO_IP_HOST_REMOTO.
Suggeriamo di assegnare un indirizzo IP locale statico al sistema.

Richiedere l’attivazione di Windows con KMS

Portandosi su un sistema Windows da attivare si deve digitare cmd nella casella di ricerca quindi scegliere Esegui come amministratore.

Al prompt dei comandi si dovrà digitare quanto segue:

slmgr /upk
slmgr /ipk PRODUCT_KEY_GVLK
slmgr /skms INDIRIZZO_IP_HOST_REMOTO
slmgr /ato

La stringa PRODUCT_KEY_GVLK deve essere sostituita con il Product Key generico rilevato da questa pagina e pubblicato da Microsoft stessa.
È fondamentale specificare un codice Product Key corrispondente all’edizione e alla versione di Windows che si sta utilizzando (se si avessero dubbi premere Windows+R quindi digitare winver).
I codici generici per le varie edizioni di Windows 10 sono utilizzabili anche nel caso di Windows 11.

Al posto di INDIRIZZO_IP_HOST_REMOTO va specificato l’indirizzo IP del sistema sul quale si sono installati Ubuntu e py-kms.

Digitando Attivazione nella casella di ricerca di Windows 11 apparirà il messaggio di conferma “Windows è attivato tramite il servizio di attivazione della tua organizzazione“.

Va ricordato che py-kms e il server KMS attivato nell’ambito della propria rete locale possono essere utilizzati solo ed esclusivamente se in possesso di una licenza di Windows regolarmente acquistata.

Per rimanere attivati i client devono rinnovare la loro attivazione collegandosi al server KMS almeno una volta ogni 180 giorni. Affinché tutto funzioni il server KMS deve essere sempre raggiungibile da parte di tutti i client connessi in rete locale.

Con i comandi seguenti, da eseguire in una finestra PowerShell aperta con i diritti di amministratore, si possono eventualmente eliminare le regole di inoltro del traffico attivate in precedenza:
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=1688

Remove-NetFirewallRule -DisplayName "PY-KMS"

Ti consigliamo anche

Link copiato negli appunti