Se avete saputo apprezzare Linux come ambiente desktop, sicuramente non rimanete delusi dal suo impiego come server. Sono già tantissimi i server che adottano Linux come sistema operativo ed è proprio questo il suo impiego più naturale.
Sono molteplici i suoi utilizzi in questo ambito, dal cluster al server di posta, dal firewall al web server. Alla sua versatilità si sta aggiungendo con il passare del tempo la ricerca della semplicità cercando di lasciare a tutti la possibilità di una libera personalizzazione secondo le proprie esigenze. Sono per questo nati e continuano ad evolversi degli ambienti grafici e le varie distribuzioni cercano di rendere la vita più semplice agli utenti fornendo loro degli strumenti semplici, spesso uniti a un'interfaccia grafica per un più facile impatto. Chi poi trova più immediati e potenti i classici comandi da console È sempre libero di continuare ad usarli.
In questo articolo approfondiremo uno dei possibili usi del sistema operativo del pinguino guidando passo passo l'utente per la configurazione di una Lan domestica basata su un gateway Linux, indipendentemente dal sistema operativo presente sui client. In questo caso il nostro sistema operativo si dovrà occupare di far condividere la propria connessione a Internet anche agli altri computer della nostra rete domestica. Per far questo avremo bisogno delle seguenti cose:
- Un collegamento
- Dei computer collegati in rete RJ45 incrociato
Prima di continuare È bene spendere qualche parola sul tipo di protocollo che useremo: il Tcp/Ip (cioÈ Transmission Control Protocol/Internet Protocol), lo stesso usato su Internet che garantisce un'elevata affidabilità anche nelle reti molto congestionate. Questo protocollo (nella sua versione 4, ma È in fase sperimentale lo sviluppo di IPv6 nel quale vengono introdotte nuove feature e una diversa gestione degli indirizzi) attribuisce a ogni interfaccia di rete e a ogni computer un indirizzo, detto IP, (della lunghezza di 32 bit, cioÈ un byte) caratterizzato da quattro campi della lunghezza di 8 bit (un byte) separati da un . (punto), ogni campo contenente un numero da 0 a 255 (per un totale di 256 numeri, quanti se ne possono comporre con un byte).
Senza soffermarci troppo (ce ne sarebbe da parlare veramente tantissimo), chiariamo che ogni IP contraddistingue univocamente una determinata interfaccia (per esempio una scheda ethernet) o un determinato computer (per esempio 212.110.12.123 identifica www.html.it). Per far distinzione tra Internet e rete locale sono stati riservato a quest'ultimo dei determinati range di IP a seconda dell'esigenza di chi li usa (se non ci fosse questa distinzione sarebbe probabile che ci siano più interfacce o PC con lo stesso IP sulla Rete).
Gli indirizzi tra il 0.0.0.0 e il 127.255.255.255 fanno parte della classe A (nella quale varia il byte, cioÈ 8 bit, più significativo partendo da sinistra (il primo campo) che identifica la rete di appartenenza, per un totale di 128 reti disponibili (per esempio 0.xxx.xxx.xxx, 1.xxx.xxx.xxx, 2.xxx.xxx.xxx, ecc.) aventi un massimo di 32.554.430 IP ognuna) riservandone una (quella da 10.0.0.0 a 10.255.255.255) per le reti locali.
Alla classe B appartengono invece gli IP da 128.0.0.0 a 191.255.255.255 nella quale sono i 16 bit più significativi da sinistra a contraddistinguere la rete (variano quindi i primi 2 campi per ogni classe), lasciando i restanti 2 campi per le interfacce di ogni rete (formata quindi da 65.025 IP) e riservando 16 reti (da 172.16.0.0 a 172.31.0.0) per le Lan. Infine la restante classe C occupa gli indirizzi da 192.0.0.0 a 223.255.255.255 (questa volta con i 24 bit più significati da sinistra a indicare la rete, ognuna composta da 256 IP) riservando ben 256 reti (da 192.168.0.0 a 192.168.255.0) per le Lan.
Dopo questa breve introduzione al TCP/IP, passiamo ad analizzare cosa fare praticamente per avere tutti i computer connessi alla nostra rete locale su Internet. Nei nostri esempi prenderemo in considerazione una rete appartenente a una Classe C, ritenendo 256 IP più che sufficienti per un uso domestico. Precisamente useremo la rete corrispondente a 192.168.0.XXX, assegnando l'IP 192.168.0.1 al nostro gateway Linux che ci apprestiamo a configurare.
Controlliamo quindi se la nostra scheda di rete È stata già riconosciuta dalla nostra distribuzione con il comando:
Se otteniamo un output
eth0: 3Com PCI 3c900 Boomerang 10Mbps Combo at 0xe400,
00:60:97:52:7e:b3,
IRQ 10
allora abbiamo già caricati nel kernel i driver per la nostra scheda ethernet nessun output
Per sapere a quale modulo riferirsi per la vostra scheda di rete consultate l'ottimo Ethernet-HOWTO
lnxbox1:~# modprobe ne2k-pci
Ora non vi rimane altro che assegnare un indirizzo IP alla vostra scheda di rete. Controlliamo prima che non sia già stato fatto dalla nostra distribuzione con il comando:
lnxbox1:~# ifconfig | less
(con | less passiamo l'output di ifconfig al comando less, per uscire da questo premiamo q)
Se vediamo qualche interfaccia chiamata eth0
Se non È stato fatto dalla nostra distribuzione possiamo provvedere noi ad attribuirle un IP con il comando:
lnxbox1:~# ifconfig eth0 192.168.0.1 up netmask 255.255.255.0
con questo comando abbiamo detto di attivare (up) l'indirizzo 192.168.0.1 per la scheda di rete corrispondente a eth0 avente come netmask 255.255.255.0 (quella per le Classi C), che indica quanti dei 32 bit (in questo caso 8) che identificano un IP verranno riservati per indicare interfacce di rete e quanti per indicare la rete (i restanti 24).
Per controllare che tutto sia andato a buon fine È possibile pingare l'IP della scheda di rete appena attivata con il comando:
lnxbox1:~# ping 192.168.0.1
PING 192.168.0.1 from 192.168.0.1 : 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=703 usec
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=112 usec
64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=111 usec
64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=113 usec
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/mdev = 0.111/0.259/0.703/0.256 ms
interrompendo l'esecuzione del comando con un ctrl+C. Se l'output È simile allora tutto È stato configurato correttamente.
Questa È la sintassi
Per completare l'installazione instradamento
lnxbox1:~# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
dove -net indica la rete a cui appartiene l'interfaccia
A questo punto abbiamo finito di configurare la nostra scheda di rete.
Masquerading
Come già accennato tramite Linux abbiamo la possibilità di far "vedere" internet a tutta la nostra rete locale. In questo modo avremo tutti i nostri computer della Lan in Rete, con un solo modem, una sola linea telefonica e una sola connessione. Ovviamente l'IP pubblico (con IP pubblico intendiamo l'IP su Internet) sarà uguale per tutti i PC, penserà il nostro gateway con installato Linux a smistare i pacchetti a chi li aveva chiesti e a inoltrare quelli ricevuti.
La configurazione del nostro gateway varierà a seconda della versione del kernel presente. Infatti per ogni serie di kernel abbiamo uno strumento diverso che ci permette di agire sul traffico che passa per la nostra rete. Questi sono ipfwadm per il kernel 2.0.XX (non presente su nessuna delle recenti distribuzioni, ma ugualmente presente ancora su alcuni PC per la sua leggerezza), ipchains per il kernel 2.2.XX (presente su alcune distribuzioni che ancora non sono passate al nuovo kernel) e il recentissimo iptables per il kernel 2.4.X (presente nelle ultimissime distribuzioni).
Anche se si sta utilizzando un kernel della serie 2.4 È sempre possibile continuare ad usare sia ipfwadm che ipchains, a patto che vi sia il supporto apposito nel kernel.
È inoltre necessario che sia presente il supporto nel kernel per il masquerading.
Per il kernel 2.0.XX È quindi necessario avere abilitato il supporto alle seguenti feature:
Network firewalls
- IP: Forwarding/gatewaying
- IP: firewalling
- IP: masquerading
- IP: ICMP masquerading
- IP: always defragment
- Per il kernel 2.2.X sono:
- IP: firewalling
- IP: masquerading
- IP: ICMP masquerading
- IP: masquerading special modules support
- IP: always defragment
- FTP protocol support
- MAC address match support
- Multiple port match support
- Packet filtering
- REJECT target support
- MIRROR target support (EXPERIMENTAL)
- Full NAT
- MASQUERADE target support
- REDIRECT target support
- Packet mangling
- TOS target support
- MARK target support
- LOG target support
Network firewalls
Per il kernel 2.4.X
Network packet filtering (replaces ipchains)
Connection tracking (required for masq/NAT)
IP tables support (required for filtering/masq/NAT)
ipchains (2.2-style) support
ipfwadm (2.0-style) support
Molte delle opzioni per il kernel 2.4 non sono strettamente necessarie, ma offrono delle innovazioni e delle interessanti caratteristiche. Ad ogni modo sono sufficienti i moduli: ip_table, ip_conntrack, iptable_nat, ipt_MASQUERADE .
a) Cosa fare con un kernel della serie 2.0.XX
Prima di tutto abilitiamo
Caricate i moduli
lnxbox1:~# modprobe ip_masq_ftp
lnxbox1:~# modprobe ip_masq_irc
A questo punto dobbiamo dire al kernel cosa fare per far condividere la connessione ad Internet a tutti i PC collegati alla rete. Per questo usiamo ipfwadm e diamo i seguenti comandi:
lnxbox1:~# ipfwadm -M -s 7200 10 160
Con questo comando andiamo a modificare quelle che sono le regole di mascheramento dei pacchetti. In particolare con -s cambiamo i valori di timeout per i pacchetti TCP. Il primo parametro (7200 secondi) imposta il timeout per le sessioni TCP, il secondo (10 secondi) quello per il traffico dopo aver ricevuto un pacchetto TCP/IP "FIN" (che indica la fine di una connessione), il terzo (160 secondi) imposta il timeout per il traffico UDP (importante per esempio per gli utenti che usano ICQ).
lnxbox1:~# ipfwadm -F -p deny
Con l'opzione -F andiamo a cambiare le regole per il forwarding. In particolare comunichiamo al kernel di non fare il forward dei pacchetti TCP/IP.
lnxbox1:~# ipfwadm -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0
Con questo comando (c'È sempre l'opzione -F per il forwarding) impostiamo il masquerading
b) Cosa fare con un kernel della serie 2.2.XX
Le cose da fare sono analoghe a quelle per un kernel della serie 2.0. In questo caso si userà al posto di ipfwadm ipchains. Prima di procedere abilitiamo l'ip forwarding
I comandi da dare con ipchains sono molto simili a quelli per ipfwadm:
c) Cosa fare con un kernel della serie 2.4.XX
Con l'avvento del kernel 2.4
Come già detto i moduli da caricare per poter abilitare il supporto al masquerading sono: ip_table, ip_conntrack, iptable_nat, ipt_MASQUERADE.
lnxbox1:~# modprobe ip_tables
lnxbox1:~# modprobe ip_conntrack
lnxbox1:~# modprobe iptable_nat
lnxbox1:~# modprobe ipt_MASQUERADE
Ora eseguiamo i comandi che ci permettono di fare il mascheramento dei pacchetti:
lnxbox1:~#
iptables -t nat -A POSTROUTING -d ! 192.168.0.0/24 -j MASQUERADE
Con questo comando impostiamo il mascheramento iptables
In questo modo permettiamo il forwarding per i pacchetti che hanno come origine (-s) e come destinazione (-d) la nostra sottorete (192.168.0.0/24) e di scartare tutti gli altri (ultimo comando).
A questo punto se tutto È andato bene dovremo essere riusciti a impostare il nostro Linux per funzionare come gateway della nostra rete locale.
Per automatizzare le cose È comunque sempre conveniente mettere tutti i comandi in uno script (per esempio con nome masq) da rendere eseguibile con:
e metterlo quindi in una directory del path (per esempio /usr/bin o /usr/local/bin) in modo da richiamarlo quando ne abbiamo la necessità, oppure inserirlo in uno script di avvio a seconda della distribuzione usata (per esempio uno sotto /etc/rc.d) oppure in /etc/ppp/ip-up che viene caricato in automatico appena ci si collega a Internet usando il PPP (come con i provider).
4) Configurare i client
La configurazione dei client ovviamente varia con il sistema operativo
Per quel che riguarda la configurazione di un client con Linux
In questo caso la sintassi È:
Per inserire il DNS da usare bisogna modificare il file /etc/resolv.conf (per esempio con un editor di testo come vi, joe, pico, emacs, gedit, kwrite, ecc.) seguendo la sintassi:
nameserver XXX.XXX.XXX.XXX
nameserver XXX.XXX.XXX.XXX
dove al posto di XXX.XXX.XXX.XXX ci sta l'indirizzo IP del DNS del nostro provider primario (prima riga) o secondario (seconda riga).
In questo articolo