giovedì, Novembre 21, 2024

Mapping ed interfacce logiche

Davide Barbato
Davide Barbatohttp://www.studenti.unina.it/~dav.barbato
System Administrator, appassionato di sicurezza e networking, lavora come consulente esterno presso varie aziende nazionali; ha lavorato ultimamente su cluster HA di CentOS ed apparati di videosorveglianza ed al momento svolge consulenza presso aziende e studi privati, combinando l'attivita' lavorativa a quella di ricerca nel campo della sicurezza informatica ed hardening di sistemi e reti.

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.

Articoli correlati

Noleggia una Tesla per il tuo evento ICT!

Categorie