Author Archive for marce'

KVM e la Rete

Il processore Intel P9500 montato sul mio piccolo portatilino supporta il set di istruzioni Intel® VT specifiche per una virtualizzazione a livello quasi hardware (anche se non è la z/Architecture :P).

Con gli ultimi Kernel, Linux ha introdotto moduli per questa tecnologia e una versione modificata dell’emulatore QEMU riesce a sfruttare, o almeno ci prova, questa caratteristiche. La Kernel-based Virtual Machine (KVM) supporta una gran quantità di sistemi operativi, ma fortunatamente basta Windows XP a chi, data l’arretratezza della cultura informatica italiana, è obbligato ad usare sistemi Microsoft per piccoli e stupidi lavori, dove nemmeno Wine ti può essere d’aiuto.

Il sistema in sé è molto grezzo e per far scroccare al sistema ospitato la rete di quello ospitante ci sono non pochi passi da compiere. La soluzione base è quella di creare un bridge tra le due connessioni, ma questo approccio può compromettere gli eventuali automatismi di un sistema desktop. Ho optato quindi per la creazione di una rete virtuale e dare al mio sistema delle capacità di routing temporanee.

Ecco lo script kvm-ifup:

/etc/kvm/kvm-ifup
  1. #!/bin/sh
  2.  
  3. switch=$(/bin/netstat -rn | awk '/^0\.0\.0\.0/ { print $NF }')
  4. dns=$(grep nameserver /etc/resolv.conf | cut -f 2 -d " ")
  5.  
  6. /sbin/ifconfig $1 192.168.2.1 netmask 255.255.255.0 up
  7. echo 1 > /proc/sys/net/ipv4/conf/$1/proxy_arp
  8. echo 1 > /proc/sys/net/ipv4/conf/$1/forwarding
  9. echo 1 > /proc/sys/net/ipv4/conf/$switch/forwarding
  10.  
  11. /sbin/iptables -t nat -I PREROUTING 1 -i $1 -p udp -d 192.168.2.1 –dport 53 -j DNAT –to-destination $dns
  12. /sbin/iptables -t nat -I POSTROUTING 1 -o $switch -s 192.168.2.0/24 -j MASQUERADE

L’orribile e oscena tecnica di reindirizzare le query DNS, l’ho presa da tutti i router ultimamente in commercio. Chiedo perdono…

Ed invece lo script kvm-ifdown:

/etc/kvm/kvm-ifdown
  1. #!/bin/sh
  2.  
  3. switch=$(/bin/netstat -rn | awk '/^0\.0\.0\.0/ { print $NF }')
  4.  
  5. /sbin/iptables -t nat -D POSTROUTING 1
  6. /sbin/iptables -t nat -D PREROUTING 1
  7.  
  8. echo 0 > /proc/sys/net/ipv4/conf/$1/proxy_arp
  9. echo 0 > /proc/sys/net/ipv4/conf/$1/forwarding
  10. echo 0 > /proc/sys/net/ipv4/conf/$switch/forwarding
  11.  
  12. /sbin/ifconfig $1 down

Questi due script vengono ovviamente lanciati dall’invocazione del kvm:

  1. modprobe tun; kvm -smp 2 -usb -net tap -net nic winxp_x86.img

Come si può notare, è necessario invocare il comando con i privilegi di root, altrimenti niente caricamento di moduli per l’interfaccia virtuale, niente configurazione di interfacce di rete, niente impostazione del firewall, ecc. ecc… E sul sistema operativo emulato va impostato un indirizzo di classe 192.168.2.0/24 mentre il default gateway e il dns impostati su 192.168.2.1.

Devo risolvere ancora qualche problemino come aggiungere l’audio o una tastiera a 105 tasti visto che freccette, pagina su e giù non vanno.

Tags: , , , ,

Muro di Tubi

Il vecchio e il nuovo. Un album storico che non ha bisogno di presentazioni e l’ultimo lavoro della miglior band “emergente” italiana…

Tags: , , , , ,

La Grande Sorella Alice

Qualche giorno fa ho riattivato l’Alice Gate 2 Plus Wi-Fi poiché il canale wireless era morto sotto i colpi incessanti di un broadcast pesante. Odiando le configurazioni castrate e soprattutto non fidandomi della Telecom e dei suoi prodotti, avevo deciso di cambiare il modem con un D-Link DSL-2640B dato che supporta i multi-virtual-path.

Son riuscito a farlo andare disattivando il dhcp quando il decoder viene acceso (operazione tra l’altro da ripetere ogni volta) ma il segnale della tv in multicast veniva propagato anche sulla linea wireless.

Tornando ad Alice SolaGate, quando per sbaglio ho digitato male un indirizzo sulla barra di firefox, m’è comparsa non la solita pagina d’errore di “Address not found” ma una bella pagina di Alice che mi avvisava dell’errore.

Come diavolo si permettono di inserire la LORO pubblicità, i LORO servizi non richiesti nella MIA connessione?

Allora provando un firmware che villantava lo sbloccaggio di tale affare, in modo da settarmi come risolutori DNS altri servers, cosa scopro?!

  1. Una violazione immane della GPL che presto provvederò a segnalare: il firmware infatti contiene un kernel linux e busybox;
  2. una connessione “management” nascosta;
  3. un controllo remoto attivo (spero utilizzato solo per aggiornare i firmware, ma chissà…)
  4. la segnalazione di una backdoor.

Ho trovato quindi un firmware di un dispositivo della US Robotics, accuratamente modificato che rimuove tutte questi piccoli fastidi…

Per la HomeTv basta creare il secondo PVC e mapparlo sulla porta verde (copio la guida presente anche sul repository dei fw).

1 - creare una connessione WAN aggiuntiva di tipo LLC Bridged sul VCC 8/36:
* Internet -> WAN Setup -> Add
* VPI 8, VCI 36, UBR without PCR, Next
* Type of network protocol Bridging, encapsulation LLC/SNAP - BRIDGING, Next
* spunta su Enable bridge service, Service name br_8_36, Next
* Apply
* Finish

2 - assegnare l’interfaccia appena creata alla porta eth0 :
* LAN -> Mapped Interfaces -> Add
* Group name IPTV, spostare dall’elenco di sinistra all’elenco di destra eth0 e nas_8_36, Save

PS. Mi tengo una copia del firmware (USR/Alice Gate Firmware) qui nel blog, non si sa mai.

Tags: , , ,

Gentoo: Filesystem crittografato con LUKS e EVMS

Ho subito installato la Gentoo sul mio bel protatilino nuovo.

Dato che però il sistema viene fornito di base con lettore di impronte digitali e smartcard, perché non mettere l’intero sistema operativo su una bella partizione crittografata accessibile solamente se le credenziali sono confermate?! Risposta: perché sono un cretino che non sa quanto male mi sto per fare.

Prima di tutto ho avuto bisogno di una Ubuntu su disco esterno e un ciddì della Gentoo. La prima (ovviamente beta) per aver un sistema completo di rete, desktop e quant’altro visto i devices troppo recenti del portatile, mentre la seconda per supplire alla mancanza di EVMS della prima.

I passi da compiere:

  1. Boot della Ubuntu da disco esterno usb
  2. Copiare il file image.squashfs dal ciddì della gentoo sul disco e montarlo con
    1. mount -o loop image.squashfs /mnt/livecd
  3. Eseguire evmsn
  4. Nella sezione Disk Segment:
    1. Brasare tutto il disco dove installare il sistema (sda nel mio caso)
    2. Creare una partizione normale primaria e bootabile per la cartella /boot (~128 Mb)
    3. Creare partizione globale (il resto del disco - anche primaria) sulla quale mettere LVM2
    4. Creare container LVM2 (nome master)
    5. Creare le varie regioni in LVM2 (ho un disco da 160 Gb)
      • slash da 20 Gb (partizione root)
      • swap da 6 Gb
      • portage 5 Gb (/usr/portage)
      • ccache 2.5 Gb (/var/tmp/ccache)
      • tmpportage 7 Gb (/var/tmp/portage)
      • home 100 Gb (/home)
      • varcache 1 Gb (/var/cache)
    6. Per ogni regione, creare un corrispettivo Volume EVMS. Attenzione: mai dare nome “root” altrimenti all’avvio si sovrascrivono e succede un macello.
    7. Se non salva e dice che non trova il device, bisogna riavviare con il ciddì della Gentoo e usare l’evmsn da lì, salvare e riavviare.
  5. Generare le chiavi per le partizioni (anche se ne basterebbe una sola - uuencode è nel pacchetto sharutils):
    1. for i in slash swap home tmpportage ccache portage varcache; do
    2. head -c 256 /dev/random | uuencode -m - | head -n 2 | tail -n 1 > $i;
    3. done
  6. Formattare le partizioni con LUKS:
    1. for i in slash swap home tmpportage ccache portage varcache; do
    2. cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/evms/$i /path/to/keys/$i;
    3. done
  7. Aprire le partizioni:
    1. for i in slash swap home tmpportage ccache portage varcache; do
    2. cryptsetup -d /path/to/keys/$i luksOpen /dev/evms/$i decrypt-$i
    3. done
  8. Formattare i vari decrypt-* con i filesystems, montare le varie cartelle, continuare con l’installazione seguendo l’handbook.
  9. Ricordarsi di copiare le chiavi sul disco e impostare /etc/conf.d/dmcrypt per usarle e decryptare le partizioni.

Per la mia installazione ho scelto di utilizzare xfs per slash, ext2 per boot, portage e varcache, jfs per la home e reiserfs per ccache. Scelte motivate da fattori apparenti di performance.

Per il boot invece ho utilizzato il comando genkernel dove nella cartella /usr/share/initramfs c’è l’overlay per il software v86d così da utilizzare un framebuffer recente in attesa che i driver per la intel vengano rilasciati:

  1. genkernel –evms –luks –splash=natural_gentoo –initramfs-overlay=/usr/share/initramfs/ –all-initrd-modules –menuconfig –save-config –no-clean –kernel-config=… all

E i parametri di grub per il boot sono stati:

  1. intel_iommu=off video=uvesafb:1440×900-32,mtrr:3,ywrap root=/dev/ram0 init=/linuxrc crypt_root=/dev/evms/slash root_key=rootkey root_keydev=/dev/evms/boot real_root=/dev/mapper/root splash=verbose,theme:natural_gentoo console=tty1 quiet doevms nodetect doload=aes-x86_64,cbc,sha256_generic,dm-crypt,ahci,sd_mod,ext2,xfs

Dove intel_iommu=off è relativo ad un bug del kernel presumo poi nodetect per evitare i caricamenti dei moduli inutili e infine doload racchiude i moduli necessari per l’avvio della macchina.

Tags: , , ,

Dell Latitude E6400

Che spettacolo.

L’ho preso con processore P9500, schermo LED a risoluzione 1440×990, disco fisso da 7200 giri a 160 Gb (è un Segate Momentus 7200.2), tastiera retroilluminata, lettore di impronte…

Però ho dimenticato il Bluetooth e il GPS. Mi sa tanto che tra un po’ li prenderò, tanto sul sito ci sono le comode istruzioni per il montaggio…

Sto installando la Gentoo Linux e sembra quasi tutto supportato tranne il maledettissimo lettore di impronte :(

Sembrerebbe un device usb Broadcom con id 0a5c:5801. Sul forum della comunità Dell dicono si tratti di un Broadcom USH, ma non ho la più pallida idea di cosa si tratti e di come farlo andare (addirittura alcuni dicono che si possa usare per l’autenticazione pre-boot, ma nel BIOS niente a riguardo :( )

Tags: , ,