Consentire sessioni RDP multiple in Windows 10 tramite la libreria RDP Wrapper
In questo post analizzerò un approccio per consentire la sessioni RDP multiple tramite la RDP Wrapper Library un progetto sviluppato con la finalità di supportare Remote Desktop Host e sessioni RDP concorrenti su sistemi a funzionalità ridotta per uso domestico. Va però precisato fin da subito che tale approccio non è supportato e che a mio avviso viola le condizioni di licenza di Windows (sebbene in questa discussione Is this legal? #26 vi siano pareri contrastanti). Avevo analizzato l’accesso in modalità multiutente ad un sistema Windows 10 nell’articolo Considerazioni sul licensing dei Remote Desktop Services (RDS) (disponibile in formato PDF al seguente https://ermannog.github.io/docs/articles/licensing/2019-07/Considerazioni%20sul%20licensing%20degli%20RDS.pdf) in cui riportavo le seguenti conclusioni:
Dalla lettura dell’EULA di Windows 10 è possibile concludere che nel caso si voglia accedere remotamente al sistema in modalità multiutenza per scopi diversi dall’assistenza remota, anche con strumenti di terze parti, occorre possedere una licenza per ogni utente che esegue l’accesso.
In ogni caso l’utilizzo della RDP Wrapper Library potrebbe tornane utile in scenari di test e/o demo.
L’RDP Wrapper Library opera come un layer tra i servizi Service Control Manager e Terminal Services in modo da non modificare il file termsrv.dll. Inoltre questo approccio risulta meno sensibile a modifiche introdotte dagli aggiornamenti di sistema, ma va precisato che alcuni aggiornamenti possono impedire il funzionamento in quanto RDP Wrapper Library avvia termsrv con parametri differenti che potrebbero venire modificati da un aggiornamento.
L’RDP Wrapper Library compensa eventuali modifiche introdotte tramite aggiornamenti di sistema mediante l’aggiornamento al file rdpwrap.ini la cui ultima versione è disponibile al seguente link https://github.com/stascorp/rdpwrap/blob/master/res/rdpwrap.ini, il file rdpwrap.ini parametrizza l’utilizzo dei servizi di desktop remoto di sistema, in particolare termsrv.dll, da parte dei componenti della RDP Wrapper Library.
L’ RDP Wrapper Library può essere utilizzata in Windows Vista e successivi (Windows 2000, XP e Windows Server 2003 non sono supportati) in qualunque edizione e consente sia l’accesso in console che tramite sessione remota, per alcune considerazioni sul numero di sessioni concorrenti si veda la discussione Limit connected users #192.
Installazione
Per eseguire l’installazione basta avviare il file install.bat. Per impostazione predefinita l’installazione richiede l’accesso a Internet per scaricare il file rdpwrap.ini più recente, per evitare la connessione a Internet è possibile rimuovere il flag -o nel file rdpwrap.ini.
Tramite il file RDPConf.exe è possibile impostare alcune configurazioni e visualizzare la versione del servizio, nel nostro esempio l’RDP Wrapper è stato installato su un Windows 10 Enterprise LTSC aggiornato alla build 17763.1192
Come indicato nella videata RDP Wrapper Configuration sarà necessario aggiornare il file rdpwrap.ini in quanto la versione 10.0.17763.771 non è supportata. E’ possibile reperire il file rdpwrap.ini aggiornato alla versione 10.0.17763.771 nella seguente discussione RDP Wrapper 17763.771 Listening, still getting “Another user is signed in..” error. #923 e più precisamente dal link https://github.com/stascorp/rdpwrap/files/3702885/rdpwrap.zip, per aggiornare il file rdpwrap.ini utilizzare la seguente procedura:
- Arrestare il servizio TermService ad esempio tramite il comando net stop termservice
- Sostituire il file %ProgramFiles%\RDP Wrapper\rdpwrap.ini
- Avviare il servizio TermService ad esempio tramite il comando net start termservice
- Riavviare il sistema
Dopo l’avvio del sistema con il file rdpwrap.ini verificare tramite RDPConf.exe che non vi siano problemi e la versione risulti supportata:
Per quanto riguarda le varie opzioni di seguito una rapida spiegazione delle principali:
- Single session per user: se abilitata consente di utilizzare lo stesso account per una sola connessione senza distinzione che si tratti di accesso remoto o locale, per utilizzare lo stesso account contemporaneamente deselezionare l’opzione.
- Hide users on logon screen: forza gli utenti a digitare esplicitamente anche il nome utente dell’account da utilizzare, oltre alla password.
- Authentication Mode: permette di scegliere la modalità di autenticazione, per ottenere la massima sicurezza è consigliabile attivare Network Level Authentication, ma le altre scelte possono essere utilizzate se il client non riusce a connettersi.
- Session Shadowing Mode: specifica i privilegi da utilizzare durante la sessione e la capacità di accedere a sessioni diverse da quella dell’account in uso.
Di seguito un esempio di tre connessioni ad una macchina virtuale Windows 10 Enterprise LTSC aggiornato alla build 17763.1192: una connessione alla console e due connessioni via RDP con due utenti:
Considerazioni sull’aggiornamento del file rdpwrap.ini
Il punto debole di RDP Wrapper Library è ovviamente la necessità di avere il file rdpwrap.ini aggiornato dal momento che gli aggiornamenti di sistema possono modificare il file termsrv.dll. Un primo posto dove ricercare aggiornamenti del file è il repository della soluzione https://github.com/stascorp/rdpwrap dove oltre a poter scaricare il file più recente dal seguente https://github.com/stascorp/rdpwrap/blob/master/res/rdpwrap.ini (che però al momento è formo al 2018-10-10) è possibile ricercare negli Issues file rdpwrap.ini aggiornati da utenti per specifiche versioni (ad esempio per la versione 10.0.17763.771 è disponibile anche la seguente discussione 10.0.17763.771 #886).
Inoltre sempre sul repository https://github.com/stascorp/rdpwrap nella discussione Automatic RDP Wrapper installer and updater (autoupdate.bat **bugfix) #860 viene proposta una soluzione per l’aggiornamento automatico del file rdpwrap.ini
Un altro repository dove trovare porzioni aggiornate per specifiche versioni di sistema operativo da aggiungere al file rdpwrap.ini è https://github.com/fre4kyC0de/rdpwrap dove però le sezioni per la versione 10.0.17763.x non funzionano probabilmente perché fornite con l’indicazione UNTESTED offsets:
“none I have no possibilty to check, if these patches actually work. I cannot support versions just supported by Enterprise or Server editions as I cannot produce the files I need.”
Esiste anche il seguente fork del repository https://github.com/tmaguire/rdpwrap che ha rilasciato una modifica per utilizzare un file rdpwrap.ini più aggiornato e che contiene ad esempio le impostazioni per la versione 10.0.17763.771 (non ho avuto modo però di testare tale versione):
Nel caso ci si volesse cimentare nella ricerca degli offset corretti da inserire nel file rdpwrap.ini per una determinata versione di sistema operativo, ovvero per una determinata versione del file termsrv.dll è possibile fare riferimento al video tutorial How to find offsets for new termsrv.dll versions – Practical reverse engineering (for RDP Wrapper) che illustrano come procedere.
Conclusioni
L’RDP Wrapper Library può risultare sicuramente utile in situazioni di test o sviluppo per evitare di mettere in piedi un’infrastruttura Remote Desktop Services che non offrirebbe una User Experience uguale a Windows 10 e che verrebbe poi dismessa dopo breve tempo. Come già detto va però precisato che tale soluzione non è né supportata né rispetta il licensing, inoltre va gestita ogni qualvolta gli aggiornamenti di sistema modificano il file termsrv.dll.
Per ulteriori approfondimenti si veda anche il post Allowing Multiple RDP Sessions In Windows 10 Using The RDP Wrapper Library di Ehi Kioya.
[Update 01]
Dal momento che ho avuto feedback sull’articolo circa gli aspetti legati al licensing vorrei aggiungere alcune precisazioni in merito.
Come ho scritto all’inizio del post nel mio articolo Considerazioni sul licensing dei Remote Desktop Services (RDS) (disponibile in formato PDF al seguente https://ermannog.github.io/docs/articles/licensing/2019-07/Considerazioni%20sul%20licensing%20degli%20RDS.pdf) riportavo le seguenti conclusioni:
Dalla lettura dell’EULA di Windows 10 è possibile concludere che nel caso si voglia accedere remotamente al sistema in modalità multiutenza per scopi diversi dall’assistenza remota, anche con strumenti di terze parti, occorre possedere una licenza per ogni utente che esegue l’accesso.
Questo significa che se vengono acquistate le necessarie RDS CAL l’utilizzo di RDP Wrapper Library non viola le condizioni di licensing, ovviamente Microsoft non supporterà questa soluzione.
Va comunque precisato che anche quando di adottano soluzioni di terze parti che consentono la condivisione del desktop basandosi su sistemi Windows client o server occorre acquistare le necessarie RDS CAL per non violare le condizioni di licenza oltre a comprare le necessarie licenze del prodotto di terze parti. Inoltre anche nel caso di un prodotto di terze parti che consente la condivisione del desktop basandosi su sistemi Windows Microsoft non offrirà supporto, ma il supporto sarà fornito dal vendor stesso, ovviamente un prodotto di terze parti molto probabilmente offrirà a differenza di RDP Wrapper Library un supporto con tempi certi di risoluzione di eventuali issues e funzionalità aggiuntive come ad esempio l’accesso tramite interfaccio web in Html 5 ed altre.
Attenzione che un fornitore ha tentato di installarlo su uno dei server che amministro per un cliente, ma l’antivirus l’ha bloccato come PUA.
State attenti che quelle cose POTREBBERO essere bloccati dagli AV.
Ciao Luigi,
certo può succedere che gli antivirus rilevino RDP Wrapper come un potenziale minaccia, ma in questo caso basta configurare nell’antivirus le corrette esclusioni come indicato nel Know issues sulla pagina https://github.com/stascorp/rdpwrap :
“If Terminal Services hangs at startup, try to add rdpwrap.dll to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
sc config TermService type= own”
Ieri avevo scaricato il pacchetto ma non c’erano i file .exe, oggi non è più attivo il link per il dowload del pacchetto master.
Ciao Gio,
a quanto pare da qualche ora il repository è stato disabilitato a causa di una violazione dei termini di servizio di GithHub.. speriamo che gli amministratori del repository chiariscano con GitHub presto la questione che ha portato alla disabilitazione..
Per quanti sono interessato al progetto in attesa che amministratori del repository https://github.com/stascorp/rdpwrap chiariscano con GitHub le motivazioni che hanno portato alla disabilitazione del repository è possibile scaricare il progetto dal seguente repository che è un fork del progetto originale e che ha già anche rilasciato una versione successiva con un file rdpwrap.ini più aggiornato (che contiene ad esempio le impostaizoni per la versione 10.0.17763.771):
https://github.com/tmaguire/rdpwrap
Sia Chrome sia Firefox impediscono il download della versione 1.6.3 da https://github.com/tmaguire/rdpwrap segnalando presenza di malware. C’ò una fonte più affidabile?
Ciao Marco,
in realtà Chrome e Firfox bloccavano RDP Wrapper Library anche se scaricata dal sito ufficiale https://github.com/stascorp/rdpwrap il motivo è che tale eseguibile potrebbe venire utilizzato da un attaccante… se un attaccante prendesse possesso del browser potrebbe scaricarsi RDP Wrapper e installarlo sul sistema per assicurarsi poi un accesso RDP contemporaneo alla sessione console… quindi i browser lo bloccano
Ciao, grazie per l’impegno. ho installato su windows 7 prof. e tutto funziana correttamente. Purtroppo devo cambiare S.O. ed ho installato windows 10 32 bit prof. (il 32 bit sono obbligato per far girare un programma indispensabile) seguo le procedure ma niente lavora solo un utente!!! Ho fatto un elenco delle fasi:
1 – scarico i file “RDPWrap-v1.6.2.zip” ed il file “rdpwrap.zip”
2 – scompatto i due file nelle relative cartelle “RDPWrap-v1.6.2” ed “rdpwrap”
3 – lancio Install.bat con i privilegi di amministratore
4 – disattivo il collegamento LAN
4 – aggiungo l’eccezione della cartella “C:\programmi\RDPWrap” nell’antivirus (windows)
5 – copio i 6 file dalla cartella “RDPWrap-v1.6.2” nella cartella “C:\programmi\RDPWrap”
6 – lancio Uninstall.bat con privilegi di amministratore da “C:\programmi\RDPWrap”
7 – copio il file rdpwrap.ini da “rdpwrap” alla cartella “C:\programmi\RDPWrap”
8 – rilancio Install.bat con i privilegi di amministratore
9 – riavvio il pc
10 – riattivo la LAN
11 – lancio RDPConf e verifico le scelte.
A questo punto lancio il “RDPCheck.exe” e tento di entrare con un account diverso e precedentemente creato mi dà il seguente errore:
“Il numero di connessioni consentite a questo computer è limitato e tutte le connessioni disponibili sono già in uso. Provare a connettersi in seguito o rivolgersi all’amministratore di sistema.”
E’ da 4 gg che ripeto la procedura, ho verificato il tutto più volte. Ho installato windows 10 prof 32bit su un nuovo HD …. stesso risultato.
Sbaglio da qualche parte? Possibile che i file siano sbagliati per il 32 bit e vadano bene solo per 64bit?
Potete aiutarmi in qualche modo?? sono in un vicolo cieco!! Grazie
Ciao Leonardo,
non dovrebbero esserci problemi con i 32 bit.
La prcedura è
-Installate avviando install.bat
– Arrestare il servizio TermService ad esempio tramite il comando net stop termservice
– Sostituire il file %ProgramFiles%\RDP Wrapper\rdpwrap.ini
– Avviare il servizio TermService ad esempio tramite il comando net start termservice
– Riavviare il sistema
– Tramite RDPConf.exe verificare che non vi siano problemi e la versione risulti supportata
Se RDPConf.exe riporta problemi significa che il file rdpwrap.ini non è corretto per la versione
Tu che edizione e versione di Windows 10 hai?
Grazie!! ho installata la versione 2004. adesso sono lontano dal pc ma nel pomeriggio vedo di essere più preciso dandoti anche la build.
Nel caso fosse la 19041.329 vedi questa discussuione dove vengono suggeriti file rdpwrap.ini che per alcuni utenti hanno funzionato
https://github.com/stascorp/rdpwrap/issues/1087
Grazie sempre. Ti farò sapere. Ciao
Salve stesso problema delle connessioni
Il numero di connessioni consentite a questo computer è limitato e tutte le connessioni disponibili sono già in uso. Provare a connettersi in seguito o rivolgersi all’amministratore di sistema.”
Arrivo alla login ma poi da quel messaggio ho gia una connessione attiva la seconda la rigetta
nella voce licenza dice non supportato
Win 10 pro
Ciao Massimo,
significa che il file rdpwrap.ini che stai utilizzando non gestisce correttamente la tua versione di Windows 10, prova a cercare tra gli issues (https://github.com/stascorp/rdpwrap/issues/) se trovi indicazioni su come moficare l’ini o se tra i vari link che ho inserito nell’articolo riesci a trovare l’ini per la tua specifica versione
Salve
E’ possibile cambiare la porta di default? La default è la 3389. Se cambio porta nella config di RDP WRAPPER la devo cambiare anche sul registro di sistema di Windows? Vi ringrazio in anticipo
Non ho mai provato a cambiare la porta tramite RDPConf.exe, ma credo che non faccia altro che intervenire sulla chiave di registro.
[…] 7. Consentire sessioni RDP multiple in Windows 10 tramite la … […]
ciao, ho un problema con un software del “medioevo” che la ditta non produce piu. vorrei poter utilizzare la macchina dove funziona sempre in modalita server e aprire sessioni rdp da eventuali pc che ne hanno bisogno per consultare. posso farlo con rdpwrapper? il pc dove gira il programma puo restare disponibile anche in locale?
Ciao
si il PC consente sia la connessione in console che quelle remote
[…] 7. Consentire sessioni RDP multiple in Windows 10 tramite la … […]
[…] 7. Consentire sessioni RDP multiple in Windows 10 tramite la … […]