Creare un USB-Over-IP Server con Ubuntu per assegnare le Dongle USB alle virtual machine

This entry was posted by on domenica, 20 Marzo, 2011 at


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:

 


Leave a Reply

You must be logged in to post a comment.