Creare un USB-Over-IP Server con Ubuntu per assegnare le Dongle USB alle virtual machine
Lavorando sempre più in ambienti virtualizzati, spesso ci dimentichiamo delle dipendenze di alcuni software dalle chiavi hardware fisiche, magari utilizzate per anni e dimenticate, prima su porta parallela ed oggi con le più economiche Dongle USB.
La virtual machine, come concetto di base, ha la particolarità di essere completamente “indipendente” dall’hardware dove viene eseguita: posso facilmente spostarla da un hardware fisico ad un altro senza avere particolari problemi nella sua esecuzione.
Questo concetto viene distrutto se alla nostra virtual machine abbiamo legato un dispositivo di tipo fisico, ad esempio una comune Dongle USB.
VMware fino alla versione 4.0 di vSphere non aveva il supporto al passthru per i dispositivi USB: questo impediva di collegare un dispositivo USB, sia esso di tipo Mass Storage che i tipo Dongle, sul server fisico host e farlo vedere al sistema operativo guest virtuale.
Con l’introduzione della versione 4.1 di vSphere questo è possibile, ma in qualche modo leghiamo la nostra Virtual Machine Guest allo specifico host ESX, andando a compromettere fortemente il principio del cluster di Alta Affidabilità e Distribuzione delle risorse essendo la virtual machine pienamente funzionale solo se eseguita su questo host fisico.
Anche su Citrix XenServer il passthru dell’USB non è supportato, o meglio è supportato ma solo per dispositivi Mass Storage, come Storage PenDrive o Hard Disk esterni, niente dongle o altri apparati.
Per avere i benefici di HA e DRS su tutte le nostre virtual machine in un cluster per la virtualizzazione, abbiamo bisogno quindi di dispositivi che rendano le nostre Dongle USB raggiungibili via Network: ecco che ci vengono in aiuto i dispositivi USB Over IP tipo AnywhereUSB oppure vari software commerciali per windows e linux.
In questo articolo volevo spiegare come creare velocemente un server di periferiche USB raggiungibile tramite rete IP utilizzando linux ed il software open source usbip.
Prendiamo un server, anche con caratteristiche hardware datate (ad esempio un server che abbiamo virtualizzato e che non utilizziamo più).
Procediamo con l’installazione di una distribuzione gratuita di linux, ad esempio Ubuntu.
Al termine dell’installazione, impostiamo la rete,configuriamo l’indirizzo ip ed installiamo gli aggiornamenti.
Procediamo quindi con l’installazione del pacchetto usbip presente nei repository di Ubuntu con il comando
apt-get install usbip
oppure
aptitude install usbip
carichiamo quindi i moduli installati nel kernel
modprobe usbip
modprobe usbip_common_mod
e verifichiamo che essi siano caricati correttamente
lsmod | grep usbip
ci verrà risposto così
root@usbipserver:~# lsmod | grep usbip
usbip 15124 0
usbip_common_mod 13605 1 usbip
root@usbipserver:~#
a questo punto, per caricare automaticamente i moduli nel kernel ad ogni riavvio, editiamo il file /etc/modules così:
nano /etc/modules
inserendo le seguenti righe
[…]
usbip
usbip_common_mod
a questo punto possiamo lanciare il demone usbip
usbipd -D
con risposta
root@usbipserver:~# usbipd -D
Bind usbip.ko to a usb device to be exportable!
root@usbipserver:~#
colleghiamo quindi la prima periferica USB al nostro server e laciamo il comando
lsusb
e con il seguente comando verifichiamo che il dispositivo sia effettivamente riconosciuto
usbip_bind_driver –list
vediamo il risultato
root@usbipserver:~# usbip_bind_driver –list
List USB devices
– busid 2-1 (0529:0001)
2-1:1.0 -> usbip
– busid 2-2 (0e0f:0002)
2-2:1.0 -> hub
– busid 2-2.1 (0529:0001)
2-2.1:1.0 -> usbip
Per pubblicare la risorsa USB 0529:0o01 utilizziamo il comando
usbip_bind_driver –usbip 2-1
dove 2-1 è l’identificativo corrispondente.
Ripetiamo quindi i passi per pubblicare le altre risorse USB collegate al nostro server linux.
Adesso vediamo come collegare il disposidivo USB che abbiamo appena pubblicato tramite il server Linux alla virtual machine Windows (in questo esempio Windows Server 2008).
Scarichiamo il pacchetto usbip per windows da questo indirizzo (90Kb)
Estraiamo il contenuto del pacchetto all’interno della virtual machine, ad esempio “c:\usbip”
a questo punto, andiamo ad aggiungere un nuovo dispositivo su windows tramite il wizard del pannello di controllo “Installazione hardware”
Verifichiamo che il dispositivo sia correttamente installato nel sistema
Adesso invece lanciamo il client sulla nostra virtual machine per collegare il dispositivo USB presente sul server Linux con il comando:
usbip.exe -a 192.168.1.1 2-2.1
dove “192.168.1.1” è l’IP del server Linux che abbiamo creato
a questo punto tra i dispositivi connessi alla Virtual Machine Windows Server 2008 comparirà anche la Dongle USB mappata via network
Per rendere il tutto automatico al riavvio, basterà creare un’operazione pianificata con uno script (usbip.cmd) da eseguire all’avvio della virtual machine con contenuti i comandi per il client di USBIP.
Eempio:
con il contenuto
Il sistema è veramente stabile, non mi ha dato nessun tipo di problema ed è una valida alternativa ai costosi dispositivi hardware preposti per questo scopo e ai vari prodotti commerciali.
ATTENZIONE!: ogni periferica USB è ad accesso esclusivo di un singolo client, non è possibile in nessun caso condividerla tra più host.Questo vale per usbip e per gli altri software o hardware in commercio.
Per maggiori informazioni: