Introduzione
Quando si fanno consulenze esterne di frequente per molti clienti è spesso necessario ricordarsi le configurazioni di rete di tutte le infrastrutture sulle quali si sta lavorando e diventa noioso annotarsi tutte queste informazioni su file, agendine, fogli vari.
Risulta utile, quindi, avere le varie configurazioni già impostate nel PC ed attivarle solo quando necessarie.
Senza utilizzare network manager di qualsiasi tipo, ecco un modo per mantenere e gestire le vostre configurazioni in modo facile e veloce su sistemi Debian e Debian-based.
Interfacce di rete
Ogni sistema presenta delle interfacce di rete consultabili tramite il comando ifconfig
.
Le sigle che visualizziamo (senza aver mai configurato udev in maniera particolare) sono riferite ad interfacce fisiche, ovvero fisicamente presenti nel nostro PC.
La gestione delle stesse è diretto dal file interfaces che si trova in /etc/network/; un esempio di questo file potrebbe essere:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1
Quando eseguiamo ifup, questo setta automaticamente l’interfaccia di rete specificata in un nome logico per poi utilizzarlo: eth0 verrà usato solo dal kernel ed ifup crea un interfacciamento kernel-user space.
Un modo per utilizzare le diverse impostazioni mostrate in precedenza in una sola volta e richiamarle facilmente quando necessarie è mappare la nostra scheda di rete.
Mappare, in questo contesto, significa assegnare un nome logico all’interfaccia fisica ed assegnare a questi nomi logici le varie impostazioni, in modo da caricare di volta in volta le informazioni desiderate.
Eseguendo semplicemente ifup eth0, ifup crea una interfaccia logica di nome eth0 sulla base dell’interfaccia fisica eth0 appunto, rendendo il mapping trasparente in questo caso. Possiamo invece specificare noi il nome logico da dare all’interfaccia e sfruttarlo per combinare varie impostazioni particolari.
Mapping
La documentazione presente in /usr/share/doc/ifupdown/examples/ dà alcuni esempi riguardo l’interface mapping e vi consiglio di darci uno sguardo per maggiori informazioni.
Sostanzialmente, attivare l’interface mapping è semplice: basta inserire le seguenti righe nel file /etc/network/interfaces.
mapping eth0 script /path/to/config-script.sh map input script logic_iface map input script logic_iface2
dove, ovviamente, al posto di eth0 ci sarà il nome dell’interfaccia da mappare. La riga “script” specifica lo script che svolgerà la funzione di mapping in base agli input che gli arriveranno dalle righe di “map”.
Lo script prenderà in input gli argomenti passati a “map” ed in base a questi assegnerà un nome logico all’interfaccia, anch’esso specificato come parametro nella riga “map” (di solito è l’ultimo parametro). La funzione di mapping utilizza, dunque, uno script, solitamente in bash, che ha come input gli argomenti di “map” ed in base a questi ed al suo codice, associa un nome logico che può essere utilizzato per configurare le interfacce all’interno dello stesso file interfaces.
La logica di mapping, quando richiamata, funziona così:
- se ad ifup non viene specificato un nome logico tramite il simbolo ‘=’, allora il nome dell’interfaccia fisica è usata come logico;
- se il nome logico specificato è presente nel file ‘interfaces’, allora viene eseguito lo script di mapping tante volte quante sono le righe “map”;
- se il nome logico è presente, verrà settata l’interfaccia logica specificata.
Facciamo un esempio banale.
Un possibile scenario è quello di avere una rete LAN a casa che chiameremo home con IP in DHCP ed un’altra in azienda, che chiameremo work, con IP statico.
Volendo semplicemente settare la nostra interfaccia di rete senza troppi problemi, possiamo avvalerci del mapping logico della stessa.
Configuriamo il mapping in questo modo:
mapping eth0 script /usr/local/bin/eth-logic.sh map work map home iface work inet static address 192.168.1.123 netmask 255.255.255.0 gateway 192.168.1.1 iface home inet dhcp
dove eth-logic.sh e’:
#!/bin/bash echo $2
Il primo argomento dello script ($1 in bash) e’ l’interfaccia di rete fisica, mentre il secondo e’ il primo parametro dopo “map” ($2). In questo modo diciamo allo script semplicemente di replicare in uscita, tramite il comando ‘echo’, l’argomento passato a “map” che si traduce, in pratica, nel settare eth0 sia come “work” che come “home”; nelle righe successive al mapping, infatti, abbiamo la configurazione delle interfacce tramite il loro nome logico (“home” e “work” appunto).
Per richiamare una di queste configurazioni è sufficiente utilizzare la seguente sintassi:
~# ifup eth0=home
oppure
~# ifup eth0=work
ed avremo la nostra eth0 up con le impostazioni desiderate.
Possiamo anche decidere di mappare piu’ interfacce semplicemente elencandole nella sezione di mapping come segue
mapping eth0 eth1 script /usr/sbin/my_map_scheme.sh map 00:00:00:aa:aa:aa home map 00:00:00:bb:bb:bb work iface home inet dhcp iface work inet manual up ifconfig $IFACE 0.0.0.0 up up ip link set $IFACE promisc on ... ...
in questo modo impostiamo il mapping dell’interfaccia in base al suo MAC address; nel caso stiamo settando l’interfaccia “work”, notiamo una nuova opzione oltre al classico “static” e “dhcp”: la direttiva “manual”.
Questa direttiva permette di specificare tutti i comandi ed i parametri dell’interfaccia a mano, come per esempio il setting in promisc mode o altre possibilità.
Se non sappiamo il nome dell’interfaccia ma solo il MAC address, potremmo scrivere così:
mapping eth? script /usr/sbin/my_map_scheme.sh map 00:00:00:aa:aa:aa home map 00:00:00:bb:bb:bb work
ed ottenere lo stesso risultato. Lo stesso discorso vale anche per le interfacce virtuali.
Considerazioni e conclusioni
Il primo metodo proposto è solo un esempio e lo script eth-logic.sh è superfluo poichè il mapping può essere eseguito in automatico tramite ifup eth0=nome_logico configurando il file interfaces come descritto; di solito lo script serve per eseguire operazioni molto piu’ complesse.
La documentazione proposta (/usr/share/doc/ifupdown/examples/) contiene moltissimi esempi di come settare il mapping in base agli indirizzi IP, MAC address ed altro. Gli script della documentazione, inoltre, sono molto più complessi ma per comprenderli basta conoscere un po’ di bash scripting e ricordare che il parametro $1 è l’interfaccia di rete fisica.
L’interface mapping risulta molto utile quando si hanno a che fare con due o più reti complesse, dove cioè è necessario utilizzare diversi gateway, netmask, DNS ed altro.