Linux NET-3-HOWTO, Linux Networking.
Terry Dawson (autore principale), VK2KTJ, Alessandro Rubini
(manutentore). Traduzione: Alessandro Rubini
[email protected], Riccardo Fabris
[email protected].
v1.4, Agosto 1998
Il sistema operativo Linux vanta un supporto per la rete a livello
kernel scritto quasi completamente da zero. Le elevate prestazioni
dell'implementazione tcp/ip delle versioni del kernel pi� recenti lo
rendono un'alternativa significativa anche ai migliori fra i sistemi
operativi similari. Questo documento si propone di descrivere come
installare e configurare il software di rete di Linux e gli strumenti
associati.
1. Cambiamenti dalla versione 1.3 (Aprile 1998)
Aggiunte:
Traffic Shaper (limitatore di banda)
Plip per i nuovi kernel
Correzioni/Aggiornamenti:
Indirizzo del manutentore del netkit
Riviste le descrizioni dei nomi di dominio (domain name)
Riordino generale delle sezioni
Sono indicate le differenze tra 2.0 e 2.2, sebbene alcune
informazioni sul 2.2 siano mancanti
Corretti molti riferimenti a documenti esterni
Da aggiungere:
Descrivere i nuovi algoritmi di routing
Aggiungere le opzioni di compilazione del kernel per IPV6
Descrivere le voci in /proc/sys/net/*
Parlare della periferica "WanRouter"
Descrivere i nuovi comandi firewall dei 2.2
2. Introduzione.
Il documento NET-FAQ originale fu scritto da Matt Welsh e da me, al
fine di rispondere alle domande poste pi� frequentemente a proposito
del supporto di rete per Linux, quando il "Linux Documentation
Project" non era ancora formalmente partito. Questo documento copriva
le versioni di sviluppo iniziali del Networking per il kernel Linux.
Il documento NET-2-HOWTO ha rimpiazzato la NET-FAQ ed � stato uno dei
primi documenti HOWTO dell'LDP, coprendo quella che � stata chiamata
la versione 2, e successivamente versione 3, del software di rete per
il kernel Linux. Questo documento a sua volta rimpiazza il NET-2-HOWTO
e si occupa solo della versione 3 del software.
Le versioni precedenti di questo documento sono diventate molto
ingombranti a causa dell'enorme mole di materiale esistente
sull'argomento. Per circoscrivere questo problema sono stati scritti
un certo numero di HOWTO a proposito di specifici argomenti di
networking. Questo documento fornisce i puntatori a tali documenti
dove necessario e copre le aree non ancora coperte da altri documenti.
Nell'Aprile del 1998 Terry ha lasciato il suo ruolo di manutentore a
causa dei suoi impegni di lavoro. Io, Alessandro Rubini, sono nuovo in
questo ruolo ma cercher� di fare del mio meglio per riuscirci.
2.1. Commenti
Apprezzo sempre i commenti e in particolare i contributi di valore.
Mandate pure tutti i commenti e i contributi al mio indirizzo
[email protected] <mailto:
[email protected]>.
3. Come usare questo documento (HOWTO sul NET-3-HOWTO ?).
Questo documento � organizzato con metodo top-down. Le prime sezioni
presentano materiale informativo che pu� essere saltato da chi non sia
interessato; successivamente appare materiale generico che occorre
essere sicuri di aver capito prima di procedere oltre; il resto del
documento � composto da tre sezioni principali che si occupano di
tecnologie specifiche: informazioni circa Ethernet e IP, tecnologie di
largo impiego nell'hardware dei PC e tecnologie di uso ristretto.
Si suggerisce quindi di percorrere il documento nel seguente modo:
Leggere le sezioni generiche
Queste sezioni si applicano a tutte, o quasi tutte, le
tecnologie descritte pi� avanti, ed � quindi molto importante
comprenderle. Del resto ci si attende che molti dei lettori
abbiano gi� confidenza con tale materia.
Osservare la propria rete
Occorre sapere come � progettata la propria rete, o come lo
sar�. Occorre anche sapere esattamente quali tipi di tecnologie
hardware verranno utilizzate.
Leggere la sezione
direttamente ad una rete locale o a Internet" Questa sezione
descrive una configurazione Ethernet di base e le varie
funzionalit� offerte da Linux per le reti IP, come il
firewalling, l'instradamento di rete avanzato e cos� via.
Leggere la sezione successiva se si � interessati a reti locali
a basso costo o a connessioni telefoniche" La sezione descrive
PLIP, PPP, SLIP e ISDN, che sono le tecnologie maggiormente
diffuse nell'ambito PC.
Leggere le parti specifiche alle proprie esigenze
Se si ha bisogno di qualcosa di diverso da informazioni su IP
e/o hardware comunemente diffuso, la sezione finale si occupa
dei dettagli specifici dei protocolli non-IP e di hardware di
comunicazione particolare.
Configurare la rete
Bisogna provare a configurare la rete in pratica e prendere
scrupolosamente nota di ogni problema incontrato.
Cercare ulteriore aiuto se necessario
Se si incontrano problemi che questo documento non aiuta a
risolvere, si legga la sezione relativa a dove trovare aiuto e
dove far presenti gli errori.
Divertirsi!
Il networking � divertente, bisogna saperlo apprezzare!
3.1. Convenzioni usate in questo documento
Non verranno usate convenzioni speciali, si faccia per� una
particolare attenzione al modo in cui sono espressi i comandi.
Seguendo il classico stile di documentazione Unix, ogni comando da
digitare sulla linea di comando di una shell � preceduto da un prompt.
Questo HOWTO adopera "user%" quale prompt per i comandi che non
richiedono privilegi di superutente, e "root#" come prompt per i
comandi che necessitano di essere lanciati da `root'. La scelta di
usare "root#" anzich un semplice "#" � volta a prevenire confusioni
con esempi tratti da script di shell, dove il segno "#" � usato per
definire una linea di commento.
Quando vengono indicate opzioni di compilazione del kernel, esse sono
rappresentate nel formato usato da menuconfig. Dovrebbero risultare
comprensibili anche a chi (come me) non ha confidenza con menuconfig.
Nel caso ci siano dei dubbi con l'annidamento delle opzioni, lanciare
una volta il programma suddetto non pu� che essere d'aiuto.
Da notare che ogni link ad altri HOWTO � locale per agevolare la
navigazione all'interno della propria copia locale dei documenti LDP,
ove si stia usando la versione html di questo documento. In caso
risulti mancante qualche documento, si sappia che qualunque HOWTO pu�
essere recuperato da sunsite.unc.edu (nella directory
/pub/Linux/HOWTO) e dai suoi numerosi mirror.
4. Informazioni generali sul networking di Linux.
4.1. Una breve storia dello sviluppo del supporto di rete nel kernel
Linux.
Sviluppare partendo da zero un'implementazione della pila di
protocolli tcp/ip dalle prestazioni buone quanto le altre
implementazioni esistenti non � stato un lavoro semplice. La decisione
di non basarsi su una delle implementazioni esistenti � stata presa in
un momento in cui sembrava che le implementazioni esistenti sarebbero
finite sotto una licenza pi� restrittiva a causa della sentenza di
U.S.L., e quando c'era tanto entusiasmo da volerlo fare diversamente
dagli altri e magari anche meglio di quello che era stato gi� fatto.
Il primo volontario che ha guidato lo sviluppo del codice di rete nel
kernel � stato Ross Biro <
[email protected]>. Ross ha implementato un
insieme di funzionalit� semplice ed incompleto ma usabile per la
maggior parte dei bisogni. Queste procedure erano distribuite insieme
ad un driver per la scheda di rete WD-8003. Questo fu sufficiente a
far s� che molte persone iniziassero a provare e sperimentare il
software, e alcuni riuscirono pure a connettere delle macchine ad
internet con questa configurazione. Ma nel frattempo la richiesta di
software di rete da parte della comunit� Linux stava crescendo, cos�
che a un certo punto la domanda pressante che gravava su Ross ed il
suo coinvolgimento personale in termini di tempo superarono a suo
giudizio i vantaggi che ne derivavano. Ross lasci� quindi il suo posto
alla guida del gruppo di programmatori. Gli sforzi di Ross per far
partire il progetto e la responsabilit� che si era preso di produrre
davvero qualcosa di utile nonostante la situazione fosse controversa,
sono state le cose che hanno catalizzato tutto il lavoro futuro, e
sono state perci� una componente essenziale del successo del prodotto
attuale.
Orest Zborowski <
[email protected]> ha scritto la prima interfaccia di
programmazione per i socket BSD all'interno del kernel Linux. Questo �
stato un grande passo in avanti, e ha permesso di far funzionare sotto
Linux molte delle applicazioni di rete esistenti senza cambiamenti
notevoli.
All'incirca nel medesimo momento Laurence Culhane
<
[email protected]> ha sviluppato i primi driver per supportare
il protocollo SLIP all'interno di Linux. Questo ha permesso a molte
persone che non avevano accesso a reti di tipo Ethernet di provare il
nuovo software di rete. Ancora una volta, qualcuno prese questo
driver e lo mise al lavoro per collegarsi ad Internet. Questa
possibilit� diede a molti un'idea delle possibilit� che si sarebbero
potute realizzare se Linux avesse avuto un supporto di rete completo,
ed accrebbe il numero di utenti che provavano ed usavano il software
esistente.
Un'altra persona che ha lavorato attivamente nel compito di costruire
il supporto per la rete � stata Fred van Kempen,
<
[email protected]>. Dopo un periodo di incertezza che aveva
seguito l'abbandono di Ross dalla posizione di coordinatore dello
sviluppo, Fred aveva offerto il suo tempo e le sue capacit� e aveva
accettato il ruolo senza alcuna opposizione. Fred aveva dei piani
ambiziosi per la direzione che il software di rete di Linux avrebbe
dovuto prendere, e si prepar� a progredire in queste direzioni. Fred
ha prodotto una serie di programmi di rete chiamati `NET-2' che molte
persone sono state in grado di usare proficuamente (il codice `NET'
era quello di Ross). Fred ha introdotto un certo numero di innovazioni
nell'agenda dello sviluppo, come l'interfaccia dinamica per le
periferiche, il protocollo AX.25 per le radio amatoriali e
un'implementazione del networking progettata pi� modularmente. Il
codice NET-2 di Fred fu usato da un numero molto elevato di
entusiasti, ed il loro numero cresceva in continuazione mentre si
diffondeva la voce che questa implementazione funzionava bene. Il
software di rete a questo punto esisteva ancora sotto forma di un
ampio numero di modifiche da applicare alla distribuzione ufficiale
del kernel, non essendo ancora stato incluso in tale distribuzione. I
documenti NET-FAQ e successivamente NET-2-HOWTO descrivevano la
procedura (allora abbastanza complessa) per avere tutto quanto
funzionante. L'impegno di Fred era volto allo sviluppo di innovazioni
all'implementazione di rete convenzionale e questo gli prendeva tempo.
La comunit� di utenti stava diventando impaziente aspettando qualcosa
che funzionasse in modo affidabile e che soddisfacesse l'80% degli
utenti. Come era successo con Ross, la pressione su Fred come
coordinatore del progetto crebbe considerevolmente.
Alan Cox <
[email protected]> propose una soluzione al problema
che avrebbe dovuto risolvere le controversie. Egli propose di prendere
il codice NET-2 di Fred e di sistemarlo, rendendolo affidabile e
stabile cos� da soddisfare gli utenti impazienti, nel contempo avrebbe
alleggerito la pressione su Fred permettendogli di continuare il suo
lavoro. Alan si mise a far ci� con un certo successo e la sua
versione del codice di rete per Linux prese il nome di
`Net-2D(ebugged)'. Il codice funzionava in maniera affidabile in molte
configurazioni comuni e la base degli utenti era contenta. Alan
chiaramente aveva idee e capacit� proprie da mettere nel progetto e in
molte delle discussioni relative alla direzione che il codice NET-2
stava prendendo. Si svilupparono allora due diverse scuole di pensiero
nella comunit� Linux: una che seguiva la filosofia "farlo funzionare
subito, migliorarlo in seguito" e un'altra che diceva "farlo meglio
subito". Linus fece la parte dell'arbitro e incluse il codice di Alan
nella distribuzione ufficiale del kernel. Questo pose Fred in una
posizione difficile. Ogni sviluppo innovativo avrebbe mancato della
larga base di utenti che testassero ed usassero attivamente il codice,
e questo avrebbe significato un rallentamento e certe difficolt� nello
sviluppo. Fred continu� a lavorare per un breve periodo e alla fine
abbandon�, cos� Alan si trov� ad essere il nuovo leader dello sviluppo
del supporto di rete nel kernel di Linux.
Donald Becker <
[email protected]> ha rivelato presto le sue
capacit� negli aspetti di pi� basso livello del networking, e ha
prodotto un grosso campionario di driver per schede di rete: quasi
tutte quelle incluse nei kernel attuali sono state sviluppate da
Donald. Ci sono state altre persone che hanno contribuito in maniera
significativa, ma il lavoro di Donald � stato notevole, per cui merita
una menzione particolare.
Alan ha continuato a migliorare il codice NET-2-Debugged per un certo
tempo, mentre lavorava nell'implementazione di alcune delle cose nella
lista delle priorit� che non erano ancora state affrontate. Prima che
il sorgente del kernel 1.3.* diventasse maturo, il codice di rete nel
kernel era passato alla distribuzione NET-3, sulla quale sono basate
le versioni attuali. Alan ha lavorato su molti aspetti del codice di
rete e ha migliorato il codice in molte direzioni con l'aiuto di un
certo numero di altre persone di talento nella comunit� Linux. Alan ha
prodotto i dispositivi di rete dinamici e le prime implementazioni
standard di AX.25 e IPX. Alan ha continuato a giocare col codice,
ristrutturandolo e migliorandolo lentamente fino allo stato in cui si
trova oggi.
Il supporto per PPP � stato aggiunto da Michael Callahan
<
[email protected]> e Al Longyear <
[email protected]>. Anche
questa � stata un'innovazione significativa per aumentare il numero di
persone che usano Linux attivamente nel networking.
Jonathon Naylor <
[email protected]> ha contribuito migliorando in
maniera significativa il codice AX.25 di Alan, aggiungendo il supporto
per i protocolli NetRom e Rose. La capacit� di usare AX.25, NetRom e
Rose � un fatto significativo in se, poich� nessun altro sistema
operativo pu� vantare il supporto nativo per tutti questi protocolli.
Naturalmente, ci sono state altre centinaia di persone che hanno
contribuito significativamente allo sviluppo del software di rete per
Linux. Alcune di queste le incontrerete pi� avanti nelle sezioni
relative alle singole tecnologie, altre persone hanno fornito moduli,
driver, correzioni di errori, suggerimenti, risultati di test e
supporto morale. In ognuno di questi casi ciascuno pu� dire di aver
giocato la sua parte e di avere offerto quello che poteva. Il codice
di rete del kernel � un esempio eccellente dei risultati che si
possono ottenere dallo stile di lavoro anarchico della comunit� Linux.
Se questo non vi ha ancora meravigliato, lo far� presto: lo sviluppo
non si � fermato.
4.2. Dove trovare altre informazioni riguardo al Networking in Linux
Ci sono vari posti in cui si possono trovare delle buone informazioni
riguardo all'uso delle reti in Linux.
Alan Cox, il coordinatore attuale del codice di rete nel kernel, ha
una pagina WWW che contiene informazioni sullo stato attuale e sul
nuovo sviluppo del supporto di rete per Linux. La sua pagina �:
www.uk.linux.org <
http://www.uk.linux.org/NetNews.html>.
Un'altra risorsa interessante � un libro scritto da Olaf Kirch,
intitolato "Network Administrators Guide". � un lavoro del Linux
Documentatation Project <
http://sunsite.unc.edu/LDP/> e pu� essere
letto interattivamente presso Network Administrators Guide, versione
HTML <
http://sunsite.unc.edu/LDP/LDP/nag/nag.html>. Oppure pu� essere
scaricato tramite ftp in vari formati dall'archivio ftp dell'LDP su
sunsite.unc.edu LDP ftp archive
<
ftp://sunsite.unc.edu/pub/Linux/docs/LDP/network-guide/>. Il libro
di Olaf � molto completo e fornisce una buona panoramica di alto
livello della configurazione di rete sotto Linux.
Esiste un newsgroup dedicato alla rete e argomente connessi nella
gerarchia di gruppi relativi a Linux. �: comp.os.linux.networking
<news:comp.os.linux.networking>
C'� una mailing list alla quale ci si pu� iscrivere, nella quale si
possono chiedere informazioni a proposito del networking sotto Linux.
Per iscriversi occorre mandare un messaggio di posta elettronica:
To:
[email protected]
Subject: anything at all
Message:
subscribe linux-net
Nelle varie reti IRC si trovano spesso dei canali #linux sui quali si
possono trovare persone in grado di rispondere a domande
sull'argomento.
Ogni volta che si presenta un problema bisogna ricordare di includere
il maggior numero possibile di dettagli riguardo ai problemi. In
particolare, occorre includere la versione del software che si sta
usando, in particolare la versione del kernel, la versione dei
programmi come pppd e dip, e la natura esatta del problema che si �
verificato. Questo vuol dire prendere nota della sintassi esatta di
ogni messaggio di errore ricevuto, e di tutti i comandi che si stanno
invocando.
4.3. Dove trovare informazioni di rete non correlate a Linux
Per chi sta cercando informazioni introduttive e pratiche sul
networking tcp/ip in genere, io raccomando di dare un'occhiata ai
seguenti documenti:
tcp/ip introduction
questo documento esiste sia in versione testo
<
ftp://athos.rutgers.edu/runet/tcp-ip-intro.doc> sia in versione
postscript <
ftp://athos.rutgers.edu/runet/tcp-ip-intro.ps>.
tcp/ip administration
questo documento esiste sia in versione testo
<
ftp://athos.rutgers.edu/runet/tcp-ip-admin.doc> sia in versione
postscript <
ftp://athos.rutgers.edu/runet/tcp-ip-admin.ps>.
Per chi sta cercando informazioni pi� dettagliate su tcp/ip raccomando
caldamente:
Internetworking with TCP/IP, Volume 1: principles, protocols
and architecture, by Douglas E. Comer, ISBN 0-13-227836-7,
Prentice Hall publications, Third Edition, 1995.
[tradotto in italiano per Jackson Libri N.d.T.]
Per chi vuole imparare come scrivere applicazioni di rete in un
ambiente compatibile a Unix, raccomando altrettanto caldamente:
Unix Network Programming, by W. Richard Stevens, ISBN
0-13-949876-1, Prentice Hall publications, 1990.
Una seconda edizione di questo libro sta per apparire sugli scaffali
delle librerie; la nuova edizione � composta da tre volumi: sito web
di Prentice-Hall <
http://www.phptr.com/> per ulteriori informazioni.
Si pu� anche provare a guardare nel newsgroup comp.protocols.tcp-ip
<news:comp.protocols.tcp-ip>.
Una fonte importante di informazione prettamente tecnica riguardo a
Internet e alla suite di protocolli tcp/ip sono gli RFC. RFC � un
acronimo che significa `Request For Comment' ed � il modo
convenzionale per pubblicare e documentare gli standard sui protocolli
Internet. Ci sono svariati archivi di RFC, molti di questi sono siti
ftp mentre altri forniscono accesso via WWW con un motore di ricerca
che permette di cercare le parole chiave in un database associato agli
RFC.
Un possibile luogo ove trovare gli RFC � il database RFC di Nexor
<
http://pubweb.nexor.co.uk/public/rfc/index/rfc.html>.
5. Informazioni generali sulla configurazione di rete.
� piuttosto importante conoscere e capire le seguenti sottosezioni
prima di provare a configurare in pratica la propria rete. Questi sono
principi fondamentali che si applicano indipendentemente dall'esatta
natura della rete che si intende costruire.
5.1. Da dove devo partire?
Prima di iniziare a costruire o configurare la propria rete occorrono
alcune cose. Le pi� importanti di queste sono:
5.1.1. Sorgenti aggiornati del kernel.
Siccome il kernel che si sta usando al momento potrebbe non avere
ancora il supporto per i tipi di rete o di schede di interfaccia che
si desidera usare, probabilmente occorrono i sorgenti del kernel, in
modo da essere in grado di ricompilare il kernel con le opzioni
appropriate.
I sorgenti pi� recenti si possono sempre ottenere da ftp.kernel.org
<
ftp://ftp.kernel.org/pub/linux/kernel>.
Meglio ricordarsi che ftp.kernel.org viene seriamente sovraccaricato:
un modo preferibile di ottenere i sorgenti aggiornati � scaricare le
patch invece degli interi file sorgente in tar; meglio ancora cercare
di utilizzare mirror del sito ftp principale, come ftp.funet.fi
<
ftp://ftp.funet.fi//mirrors/ftp.kernel.org/pub/linux/kernel>;
ricordarsi inoltre che ogni sito Linux di solito fornisce sorgenti del
kernel aggiornati.
Normalmente i sorgenti del kernel saranno scompattati da tar nella
directory /usr/src/linux. Per informazioni riguardo a come si
applicano le modifiche (patch) e come si ricompila il kernel si legga
Kernel-HOWTO <Kernel-HOWTO.html>. Per informazioni su come si
configurano i moduli del kernel si legga "Modules mini-HOWTO". Inoltre
il file README che si trova nei sorgenti del kernel e la directory
Documentation sono molto istruttivi per il lettore motivato.
A meno di trovare indicazioni differenti, io consiglio di utilizzare
la distribuzione stabile del kernel (quella con un numero pari come
seconda cifra nel numero di versione). Le distribuzioni dei kernel di
sviluppo (quelle con la seconda cifra dispari) possono presentare
differenze strutturali o altri cambiamenti che possono causare
problemi quando usati con altro software di sistema. Se non si �
sicuri di essere in grado di risolvere questo tipo di problemi, anche
considerando il rischio che ci siano altri errori nel software, allora
� bene non usare le versioni dispari.
D'altra parte, alcune delle funzionalit� ivi descritte sono state
introdotte nel corso dello sviluppo dei kernel 2.1, per cui �
necessario fare una scelta: si pu� rimanere al 2.0, aspettando che
esca il 2.2 e qualche distribuzione aggiornata e completa di ogni
programma di supporto, o passare ai 2.1 ed aggiungere in proprio i
vari programmi di supporto necessari per utilizzare al meglio le nuove
funzionalit�. Al momento della stesura di questo paragrafo,
nell'Agosto 1998, � gi� stato rilasciato il 2.1.115 e si pensa che non
manchi molto al rilascio del 2.2 [al momento della traduzione sono gi�
uscite alcune distribuzioni con i nuovi kernel 2.2, tra le quali
Debian 2.1 N.d.T.].
5.1.2. Gli strumenti di rete aggiornati
Gli strumenti di rete (i "network tools") sono i programmi che si
usano per configurare le periferiche di rete di Linux. Questi
programmi permettono per esempio di assegnare gli indirizzi alle
periferiche e configurare l'instradamento.
La maggior parte delle moderne distribuzioni di Linux contengono gi�
gli strumenti di rete, se perci� si � installato il proprio sistema da
una distribuzione senza aver ancora installato gli strumenti di rete,
occorre farlo.
Se il proprio sistema non � stato installato da una distribuzione,
occorre recuperare i sorgenti e compilare i programmi da se. Questo
non � difficile.
Gli strumenti di rete sono attualmente distribuiti da Bernd Eckenfels
e sono disponibili presso: ftp.inka.de
<
ftp://ftp.inka.de/pub/comp/Linux/networking/NetTools/>, sito che �
presente in mirror anche su ftp.uk.linux.org
<
ftp://ftp.uk.linux.org/pub/linux/Networking/base/>.
Occorre essere sicuri di scegliere la versione pi� appropriata per il
kernel che si intende usare e di seguire le istruzioni di
installazione che si trovano nel pacchetto.
Per installare e configurare la versione corrente al momento della
stesura di questo documento occorre invocare i seguenti comandi:
user% tar xvfz net-tools-1.33.tar.gz
user% cd net-tools-1.33
user% make config
user% make
root# make install
Inoltre, se si intende configurare un firewall o utilizzare la
possibilit� di mascheramento dei pacchetti ("IP masquerading") occorre
il comando ipfwadm, la cui versione aggiornata si pu� recuperare da:
ftp.xos.nl <ftp:/ftp.xos.nl/pub/linux/ipfwadm>. Ancora una volta,
esistono diverse versioni del programma, e bisogna prendere la
versione che meglio si adatta al proprio kernel. Da notare che le
funzionalit� di firewall di Linux sono cambiate durante lo sviluppo
dei 2.1. Quanto si dice si applica solo alle versioni 2.0 del kernel.
Per installare e configurare la versione cui ho accesso in questo
momento occorre invocare:
user% tar xvfz ipfwadm-2.3.0.tar.gz
user% cd ipfwadm-2.3.0
user% make
root# make install
Notare che se si utilizza una versione 2.2 (o uno degli ultimi 2.1)
del kernel, ipfwadm non � lo strumento giusto per configurare il
Firewall IP. Questa versione del NET-3-HOWTO attualmente non si occupa
della nuova configurazione del firewall.
5.1.3. Programmi Applicativi di Rete.
Gli applicativi di rete sono i programmi come telnet e ftp, unitamente
ai programmi server associati. David Holland
<
[email protected]> coordina la distribuzione dei pi� comuni di
questi. Tale distribuzione si pu� ottenere ftp.uk.linux.org
<
ftp://ftp.uk.linux.org/pub/linux/Networking/base>.
Nel Marzo 1997 il pacchetto � stato suddiviso in pacchetti distinti
pi� piccoli, ma nel Maggio 1997 i programmi fondamentali sono stati
incorporati in un pacchetto chiamato netkit-base-0.10. Potrebbe
essere necessario procurarsi il pacchetto di base e/o pacchetti
addizionali.
Per installare e configurare la versione corrente al momento della
stesura di questo documento occorre invocare i seguenti comandi:
user% tar xvfz netkit-base-0.10
user% cd netkit-base-0.10
user% more README
user% vi MCONFIG
user% make
root# make install
5.1.4. Indirizzi.
Gli indirizzi IP sono composti da 4 byte. La convenzione usata per
scrivere gli indirizzi � chiamata `dotted decimal notation', che
significa "notazione decimale con i punti". In questa forma ogni byte
� convertito in un numero decimale (tra 0 e 255) scartando gli zeri
prefissi a meno che il numero sia zero, ogni byte � poi separato da un
carattere `.'. Per convenzione ogni interfaccia di un calcolatore o
router ha associato un indirizzo IP. In certe circostanze � permesso
assegnare lo stesso indirizzo a tutte le interfacce di un singolo
calcolatore, ma solitamente ogni interfaccia avr� un indirizzo
diverso.
Le reti IP sono sequenze di indirizzi IP contigui. Tutti gli indirizzi
all'interno di una rete hanno un certo numero di cifre del loro
indirizzo in comune. La porzione di indirizzo comune all'interno della
rete si chiama "network portion" (porzione di rete) dell'indirizzo.
Le cifre rimanenti si chiamano "host portion". Il numero di bit che
vengono condivisi tra tutti gli indirizzi all'interno della rete �
chiamato "netmask" ed il suo ruolo � determinare quali indirizzi
appartengono alla rete cui la maschera � applicata e quali no.
Consideriamo il seguente esempio:
----------------- ---------------
Host Address 192.168.110.23
Network Mask 255.255.255.0
Network Portion 192.168.110.
Host portion .23
----------------- ---------------
Network Address 192.168.110.0
Broadcast Address 192.168.110.255
----------------- ---------------
Ogni indirizzo sottoposto ad un'operazione di "AND bit-a-bit" con la
sua maschera di rete dar� l'indirizzo della rete cui appartiene. La
maschera di rete � perci� sempre il numero pi� basso all'interno
dell'intervallo di indirizzi che formano quella rete, e ha sempre la
parte di host dell'indirizzo pari a zero.
L'indirizzo di broadcast � un indirizzo speciale cui tutti gli host
della rete ascoltano, in aggiunta al loro proprio indirizzo. Questo
indirizzo � quello cui vengono mandati i pacchetti che devono essere
ricevuti da tutti i calcolatori della rete. Certi tipi di dati, come
le informazioni di instradamento e i messaggi di errore vengono
trasmessi all'indirizzo di broadcast in modo che tutti i calcolatori
sulla rete li possano ricevere contemporaneamente. Ci sono due
standard comunemente usati su come debba essere un indirizzo di
broadcast. Il pi� comunemente accettato stabilisce che debba essere
usato come indirizzo di broadcast l'indirizzo pi� alto possibile della
rete. Nell'esempio precedente questo sarebbe 192.168.110.255. Per
qualche ragione alcuni siti hanno adottato la convenzione di usare
l'indirizzo zero come indirizzo di broadcast. In pratica non fa molta
differenza quale viene usato, ma bisogna assicurarsi che ogni host
sulla rete sia configurato con lo stesso indirizzo di broadcast.
Per ragioni amministrative, ad un certo punto durante lo sviluppo
iniziale del protocollo IP sono stati formati alcuni gruppi di
arbitrari di indirizzi e le reti sono state raggruppate in quelle che
sono chiamate classi. Le classi caratterizzano le dimensioni delle
reti che si possono allocare. Queste classi offrono un numero di
dimensioni fisse di rete che possono essere allocate. Gli intervalli
scelti per le varie classi sono:
----------------------------------------------------------
| Network | Netmask | Network Addresses |
| Class | | |
----------------------------------------------------------
| A | 255.0.0.0 | 0.0.0.0 - 127.255.255.255 |
| B | 255.255.0.0 | 128.0.0.0 - 191.255.255.255 |
| C | 255.255.255.0 | 192.0.0.0 - 223.255.255.255 |
|Multicast| 240.0.0.0 | 224.0.0.0 - 239.255.255.255 |
----------------------------------------------------------
La scelta di quali indirizzi usare per la propria rete dipende da cosa
esattamente si sta facendo. Per ottenere gli indirizzi di cui si ha
bisogno si pu� procedere in uno dei seguenti modi:
Installare una macchina Linux su una rete IP esistente
Se si desidera installare un calcolatore su una rete esistente
si deve contattare chi amministra tale rete e chiedere loro le
seguenti informazioni:
� L'indirizzo IP da assegnare al calcolatore
� L'indirizzo IP di rete
� L'indirizzo IP di broadcast
� La netmask
� L'indirizzo del router
� L'indirizzo del "name server".
Dopo di che bisogna configurare l'interfaccia di rete Linux in
base a quei numeri. Non � possibile inventare dei numeri e
sperare che la configurazione funzioni.
Costruire una rete nuova che non si connetter� mai a Internet
Se si sta preparando una rete privata e non si ha intenzione
nemmeno in futuro di connettere tale rete ad Internet, allora si
pu� scegliere qualunque indirizzo. Ciononostante, per ragioni di
sicurezza e di coerenza ci sono alcuni indirizzi di reti IP che
sono stati riservati specificamente a questo fine. Essi sono
specificati nell'RFC1597 come segue:
-----------------------------------------------------------
| RESERVED PRIVATE NETWORK ALLOCATIONS |
-----------------------------------------------------------
| Network | Netmask | Network Addresses |
| Class | | |
-----------------------------------------------------------
| A | 255.0.0.0 | 10.0.0.0 - 10.255.255.255 |
| B | 255.255.0.0 | 172.16.0.0 - 172.31.255.255 |
| C | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 |
-----------------------------------------------------------
Occorre innanzitutto decidere quanto grande deve essere la nuova
rete, e poi scegliere gli indirizzi di cui si ha bisogno.
5.2. Dove bisogna mettere i comandi di configurazione?
Ci sono differenti approcci sotto Linux per le procedure di
inizializzazione del sistema. Dopo che il kernel � partito, viene
sempre eseguito un programma chiamato `init'. Il programma init poi
legge il suo file di configurazione chiamato /etc/inittab ed inizia il
processo di boot. Esistono versioni di init leggermente differenti,
quantunque si stia convergendo verso lo stile System V (Five),
sviluppato da Miguel van Smoorenburg.
Malgrado il fatto che il programma init sia sempre lo stesso, la
configurazione di boot del sistema � organizzata in modi diversi nelle
varie distribuzioni.
Solitamente il file /etc/inittab contiene una voce che assomiglia a:
si::sysinit:/etc/init.d/boot
Questa riga specifica il nome dello script di shell che gestisce
praticamente la sequenza di boot. Questo file � in qualche modo simile
al file AUTOEXEC.BAT in DOS.
Di solito ci sono altri script che vengono chiamati dallo script di
inizializzazione, e spesso la rete � configurata all'interno di uno di
questi.
La seguente tabella pu� essere usata come guida per il proprio
sistema:
--------------------------------------------------------------------
Distrib. | Interface Config/Routing | Server Initialization
--------------------------------------------------------------------
Debian | /etc/init.d/network | /etc/rc2.d/*
--------------------------------------------------------------------
Slackware| /etc/rc.d/rc.inet1 | /etc/rc.d/rc.inet2
--------------------------------------------------------------------
RedHat | /etc/rc.d/init.d/network | /etc/rc.d/rc3.d/*
--------------------------------------------------------------------
Si noti che Debian e Red Hat usano un'intera directory per ospitare
gli script che attivano i servizi di sistema. Gli script di solito non
contengono al loro interno le informazioni di configurazione
necessarie. Ad esempio nei sistemi RedHat gli script di
inizializzazione (boot script) si aspettano di trovarle nei file
presenti in /etc/sysconfig. Se si vogliono comprendere i dettagli del
processo di boot, suggerisco di dare un occhiata a /etc/inittab e alla
documentazione associata a init. Linux Journal sta per pubblicare un
articolo sulla inizializzazione del sistema, e a questo documento
verr� aggiunto un puntatore ad esso non appena sar� disponibile sul
web.
La maggior parte delle distribuzioni moderne includono un programma
che permette di configurare la maggior parte dei tipi diffusi di
interfacce di rete. Se si ha una di queste, allora bisognerebbe
controllare se tale programma fa quello di cui si ha bisogno prima di
tentare una configurazione manuale.
-----------------------------------------
Distrib | Network configuration program
-----------------------------------------
RedHat | /usr/bin/netcfg
Slackware | /sbin/netconfig
-----------------------------------------
5.3. Creazione delle interfacce di rete.
In molti sistemi Unix le periferiche di rete hanno il loro posto nella
directory /dev. Questo non succede in Linux, dove i dispositivi di
rete sono creati dinamicamente via software e quindi non hanno bisogno
della presenza di file speciali.
Nella maggior parte dei casi i dispositivi di rete sono creati
automaticamente dal driver durante la sua inizializzazione dopo che
l'hardware � stato riconosciuto. Per esempio, il driver per la rete
ethernet crea le interfacce eth[0..n] sequenzialmente, nell'ordine in
cui le schede ethernet vengono riconosciute. La prima scheda che viene
trovata prende il nome eth0, la seconda eth1, eccetera.
Ciononostante in alcuni casi, come succede per slip e ppp, i
dispositivi di rete vengono creati a seguito di operazioni svolte da
un programma. Si applica la stessa regola di numerazione sequenziale,
ma le periferiche non sono create automaticamente all'accensione del
sistema. La ragione di questo � che, a differenza di quello che
accade per le schede ethernet, il numero di periferiche slip o ppp pu�
cambiare durante la vita della macchina. Questi casi vengono
analizzati in maggior dettaglio nelle sezioni successive.
5.4. Configurazione delle interfacce di rete.
Dopo aver recuperato tutti i programmi di cui si ha bisogno e tutti
gli indirizzi e le informazioni sulla rete, si pu� procedere alla
configurazione delle proprie interfacce di rete. Quando si parla di
configurazione dell'interfaccia si intende il processo di assegnazione
degli indirizzi appropriati alla periferica e all'assegnazione di
valori appropriati per gli altri valori configurabili di un
dispositivo di rete. Il programma pi� comunemente usato per questo
compito � il comando ifconfig (interface configure).
Normalmente viene invocato un comando simile al seguente:
root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
In questo esempio si � configurata una scheda ethernet `eth0' con
l'indirizzo IP `192.168.0.1' e una maschera pari a `255.255.255.0'.
La parola `up' finale significa che l'interfaccia deve essere
attivata, ma pu� di solito essere omessa, dato che � l'opzione di
default.
Il kernel assume alcuni valori di default quando un'interfaccia viene
configurata. Per esempio, si pu� specificare l'indirizzo di rete e
quello di broadcast per un'interfaccia, ma se questo non viene fatto,
come nell'esempio precedente, il kernel far� delle scelte ragionevoli
per i valori da assegnare in base alla maschera di rete fornita; se
non viene fornita una maschera di rete si baser� sulla classe della
rete associata all'indirizzo IP. Nell'esempio appena visto il kernel
assegner� un indirizzo di rete `192.168.0.0' e un indirizzo di
broadcast `192.168.0.255' in base alla netmask specificata nel
comando.
Si possono passare al comando ifconfig molte altre opzioni. Le pi�
importanti di queste sono:
up questa opzione attiva l'interfaccia (ed � l'impostazione di
default).
down
questa opzione la disattiva.
[-]arp
questa opzione abitita o disabilita l'uso del protollo ARP
("Address Resulution Protocol") per questa interfaccia.
[-]allmulti
questa opzione abilita o disabilita la ricezione di tutti i
pacchetti multicast. Il multicast permette di associare speciali
indirizzi hardware di destinazione a gruppi di calcolatori, in
modo che tutti gli appartenenti al gruppo ricevano certi
pacchetti. Questa opzione pu� essere importante se si usano
applicazioni come la videoconferenza ma normalmente non viene
usata.
mtu N
questo parametro permette di assegnare il valore MTU ("Maximum
Transfer Unit") per questa periferica.
netmask addr
questo parametro permette di specificare la maschera relativa
alla rete cui questa interfaccia appartiene.
irq addr
questo parametro funziona solo con certi tipi di hardware e
permette di scegliere la linea interruzione usata dall'hardware
di questa interfaccia.
[-]broadcast [addr]
questo parametro permette di abilitare la ricezione di pacchetti
di broadcast e assegna l'indirizzo di broadcast per questa
interfaccia, oppure disabilita la ricezione di tali pacchetti.
[-]pointopoint [addr]
questo parametro permette di assegnare l'indirizzo della
macchina che sta all'altro capo di una connessione punto-a-
punto, come accade per slip e ppp.
hw <type> <addr>
questo parametro permette di assegnare l'indirizzo hardware di
certi tipi di schede di rete. Questo � spesso inutile per per le
interfaccie ethernet, ma � comodo per altri tipi di rete, come
AX.25.
Il comando ifconfig pu� essere usato per agire su tutte le interfacce
di rete. Alcuni programmi utente come pppd e dip configurano
automaticamente le periferiche di rete quando le creano, e in questi
casi l'uso manuale di ifconfig diventa inutile.
5.5. Configurazione del risolutore dei nomi (name resolver).
Il `Name Resolver' fa parte della libreria standard di Linux. La sua
funzione principale � quella di fornire un servizio che converta i
nomi dei calcolatori, quelli comprensibili all'uomo come
`ftp.funet.fi', in indirizzi comprensibili alle macchine, come
128.214.248.6.
5.5.1. Cosa compone un nome?
Anche chi ha familiarit� con i nomi degli host che costituiscono
Internet potrebbe non comprendere come sono costituiti. I nomi di
dominio (domain name) di Internet sono inerentemente gerarchici, hanno
cio� una struttura ad albero. Un `dominio' (domain) � una famiglia,
un gruppo di nomi. Un dominio pu� essere suddiviso in vari
`sottodomini'. Un `dominio pricipale' (toplevel domain) � un dominio
che non � un sottodominio. I domini principali sono specificati
nell'RFC 920. I domini principali pi� comuni sono:
COM
Organizzazioni commerciali
EDU
Organizzazioni educative
GOV
Organizzazioni governative
MIL
Organizzazioni militari
ORG
Altre organizzazioni
NET
Organizzazioni connesse a Internet
Identificativo nazionale
questi sono codici di due lettere che rappresentano la nazione.
Per ragioni storiche la maggior parte dei domini che appartengono ai
domini principali non nazionali sono stati usati da organizzazioni con
sede negli Stati Uniti, malgrado gli Stati Uniti abbiano anche un
proprio dominio nazionale `.us'. Questo non � pi� vero per i domini
.com and .org, che vengono comunemente usati da societ� e
organizzazioni non statunitensi.
Ognuno di questi domini pricipali ha i suoi sottodomini. I domini
principali basati sui nomi di nazione sono spesso suddivisi in
sottodomini come com, edu, gov, mil e org. Questo non succede in
Italia, ma per esempio esistono i sottodomini com.au e gov.au per le
organizzazioni commerciali e governative in Australia; da notare che
questa non � una regola generale, dato che le linee effettive di
condotta dipendono dalle autorit� che gestiscono a livello locale
l'assegnazione dei nomi.
Il livello successivo di divisione spesso rappresenta il nome
dell'organizzazione. I sottodomini ulteriori possono essere di diversa
natura; spesso il livello successivo � basato sulla suddivisione
interna della organizzazione, ma pu� essere basato su qualsiasi
criterio che sia considerato ragionevole e significativo all'interno
dell'organizzazione.
La parte pi� a sinistra del nome � sempre il nome univocamente
assegnato ad un calcolatore, e si chiama `hostname'. La parte di nome
che sta alla destra del "hostname" si chiama `domainname', e il nome
completo si chiama `Fully Qualified Domain Name', abbreviato FQDN.
Usando l'host di Terry come esempio, il FQDN �
`perf.no.itg.telstra.com.au'. Questo significa che il suo "hostname" �
`perf', e il "domain name" � `no.itg.telstra.com.au'. Il suo "domain
name" � composto da un dominio principale basato sul nome della sua
nazione, l'Australia, e poich� il suo indirizzo di posta elettronica
appartiene ad un organizzazione commerciale c'� `.com' come
sottodominio. Il nome della compagnia � (era) `telstra', e la sua
struttura di nomi interna � basata sulla struttura gestionale, in
questo caso il calcolatore appartiene al gruppo di tecnologia delle
informazioni (Information Technology Group), sezione operazioni di
rete (Network Operations).
Di solito, i nomi sono un po' pi� brevi; ad esempio il mio ISP
(Internet Service Provider = fornitore di accesso a internet) si
chiama `systemy.it' e la mia organizzazione senza scopo di lucro si
chiama `linux.it', senza nessun sottodominio com e org , cos� che il
mio host personale si chiama `morgana.systemy.it' e
[email protected] �
un indirizzo di posta elettronica valido. Da notare che chi
amministra un dominio pu� registrare nomi di singoli host come anche
sottodomini; ad esempio il LUG a cui appartengo usa il dominio
pluto.linux.it, poich� i titolari di linux.it hanno acconsentito a
creare un sottodominio per il LUG.
5.5.2. Quali informazioni sono necessarie.
Per accedere al servizio di risoluzione dei nomi occorre sapere a
quale dominio appartiene il proprio calcolatore. Il software di
risoluzione dei nomi offre il servizio di traduzione dei nomi facendo
delle richieste ad un `Domain Name Server' (di solito chiamato
semplicemente `name server'), per cui occorre anche conoscere
l'indirizzo di un name server locale che offra questo servizio.
Per configurare il proprio calcolatore occorre sistemare tre file, che
descriver� uno alla volta.
5.5.3. /etc/resolv.conf
Il file /etc/resolv.conf � il file di configurazione principale per
accedere al servizio di risoluzione dei nomi. Il suo formato �
abbastanza semplice: si tratta di un file di testo con una parola
chiave (direttiva) per linea. Le direttive comunemente usate sono tre:
domain
questa direttiva specifica il nome del dominio locale.
search
questa direttiva specifica una lista di domini da consultare in
alternativa.
nameserver
questa direttiva, che pu� essere usata pi� di una volta,
specifica l'indirizzo IP di un name server a cui rivolgersi per
la risoluzione dei nomi.
Per esempio, /etc/resolv.conf potrebbe essere qualcosa di simile a:
domain maths.wu.edu.au
search maths.wu.edu.au wu.edu.au
nameserver 192.168.10.1
nameserver 192.168.12.1
Questo esempio specifica che il dominio di default da usare per i nomi
non qualificati (cio� gli hostname senza un dominio associato) �
maths.wu.edu.au, e che se l'host non viene trovato in quel dominio
bisogna provare direttamente anche il dominio wu.edu.au. Il file
specifica anche due name server, ciascuno dei quali pu� essere
consultato dal software di risoluzione per risolvere un nome.
5.5.4. /etc/host.conf
Il file /etc/host.conf � quello dove si dichiarano alcuni elementi che
governano il comportamento del codice di risoluzione dei nomi. Il
formato di questo file � descritto in dettaglio nella pagina del
manuale di `resolv+'. In quasi tutti i casi queste due linee sono
tutto quello che serve:
order hosts,bind
multi on
Questa configurazione dice al codice di risoluzione dei nomi di
controllare il file /etc/hosts prima di tentare una ricerca attraverso
un name server, e dice di ritornare tutti gli indirizzi definiti per
un host descritto in /etc/hosts, invece che ritornare solo il primo.
5.5.5. /etc/hosts
Il file /etc/hosts � quello che contiene i nomi e gli indirizzi IP dei
calcolatori locali. Se un host appare in questo file non occorre
interrogare un name server per conoscere il suo indirizzo IP. Lo
svantaggio di questo tipo di approccio � che occorre aggiornare questo
file ogniqualvolta l'indirizzo IP relativo ad un calcolatore cambia.
Solitamente, in un sistema ben gestito le uniche voci che appaiono in
questo file sono una per l'interfaccia di loopback e una per il nome
del calcolatore stesso.
# /etc/hosts
127.0.0.1 localhost loopback
192.168.0.1 this.host.name
� possibile specificare pi� di un nome di calcolatore per linea, come
dimostrato dalla prima voce qui sopra, che � il modo convenzionale per
dare un nome all'interfaccia di loopback.
5.5.6. Attivare un name server
Se si desidera far girare un name server locale, lo si pu� fare
facilmente. Si prega di fare riferimento al DNS-HOWTO <DNS-HOWTO.html>
e a ogni documento incluso nella propria versione di BIND (Berkeley
Internet Name Domain).
5.6. Configurazione dell'interfaccia di loopback.
L'interfaccia `loopback' � un tipo speciale di interfaccia che
permette ad un calcolatore di effettuare connessioni con se stesso. Ci
sono diversi motivi per cui capita di aver bisogno di farlo; per
esempio quando occorre verificare il funzionamento di programmi di
rete senza interferire con nessun altro sulla rete. Per convenzione �
stato assegnato all'interfaccia di loopback l'indirizzo IP
`127.0.0.1'. Perci�, indipendentemente dal calcolatore sul quale si
lavora, se si apre una connessione telnet a 127.0.0.1 si raggiunger�
sempre la macchina da cui si � partiti.
La configurazione dell'interfaccia di loopback � semplice, ed � una
cosa che bisogna assicurarsi di fare (ma da notare che di solito tale
compito � svolto dagli script standard di inizializzazione).
root# ifconfig lo 127.0.0.1
root# route add -host 127.0.0.1 lo
Il comando route verr� trattato pi� estesamente nella prossima
sezione.
5.7. Routing.
Il "routing", ovvero le questioni relative all'instradamento dei
pacchetti, costituisce un argomento ampio. Si possono facilmente
scrivere grossi libri su queste tematiche. La maggior parte delle
persone, comunque, hanno necessit� di instradamento abbastanza
semplici, mentre poche altre hanno esigenze pi� complicate. Tratter�
qui solo i concetti fondamentali dell'instradamento dei pacchetti.
Suggerisco a chi � interessato ad avere informazioni pi� dettagliate
di consultare i manuali elencati all'inizio di questo documento.
Inizierei con una definizione. Cos'� l'instradamento IP? Questa � la
definizione che uso io:
L'instradamento IP (routing) � il procedimento attraverso il
quale un calcolatore con connessioni di rete multiple decide
dove trasmettere i pacchetti IP che ha ricevuto.
Potrebbe essere utile illustrare questa definizione con un esempio.
Immaginiamo un tipico router in un ufficio, che abbia una connessione
PPP verso Internet, un certo numero di segmenti ethernet che collegano
le postazioni locali e un secondo collegamento PPP verso un altro
ufficio. Quando il router riceve un pacchetto da una qualsiasi delle
sue connessioni di rete, il meccanismo usato per determinare su quale
interfaccia deve essere spedito il pacchetto � proprio il routing.
Anche gli host pi� semplici hanno bisogno di instradare i pacchetti,
tutti gli host di Internet hanno infatti due interfacce di rete: una �
quella di loopback descritta prima e l'altra � queslla usata per
comunicare col resto della rete; questa pu� essere una ethernet oppure
un collegamento su porta seriale PPP o SLIP.
Bene, ma come funziona l'instradamento? Ogni host mantiene una lista
di regole di instradamento, chiamata "routing table". Questa tabella
contiene delle voci che sono in genere formate da almeno tre campi: il
primo � l'indirizzo di destinazione, il secondo � il nome
dell'interfaccia attraverso la quale instradare il pacchetto, e il
terzo � l'indirizzo IP opzionale di un'altra macchina che si incarichi
di decidere il prossimo passo che il pacchetto deve fare attraverso la
rete. In Linux la tabella di instradamento pu� essere visualizzata
usando il seguente comando:
user% cat /proc/net/route
oppure uno dei seguenti:
user% /sbin/route -n
user% /bin/netstat -r
Il procedimento di instradamento � abbastanza semplice: viene ricevuto
un pacchetto, viene esaminato il suo indirizzo di destinazione (a chi
� destinato quel pacchetto) e tale indirizzo viene confrontato con
tutte le voci della tabella. La voce che meglio rispecchia l'indirizzo
di destinazione viene poi usata per la ritrasmissione del pacchetto,
attraverso l'interfaccia specificata dalla voce. Se poi il campo
`gateway' di questa voce � valido il pacchetto viene passato a tale
host attraverso l'interfaccia specificata; in caso contrario si assume
che l'indirizzo di destinazione sia sulla rete connessa
all'interfaccia scelta.
Per manipolare la tabella esiste un comando specifico. Questo comando
riceve degli argomenti sulla linea di comando e li converte in
chiamate di sistema che richiedono al kernel di aggiungere, rimuovere
o modificare le voci della tabella di routing. Tale comando si chiama
`route'.
Passiamo ora ad un semplice esempio, immaginando che voi siate
connessi ad una ethernet e che vi sia stato detto che la rete � una
classe C con indirizzo 192.168.1.0; immaginiamo inoltre che
l'indirizzo 192.168.1.10 sia stato assegnato alla vostra macchina, e
che 192.168.1.1 sia il router connesso al resto di Internet.
Il primo passo da fare � configurare l'interfaccia come descritto in
precedenza. A questo fine si user� un comando tipo:
root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
Adesso occorre aggiungere nella tabella di routing una voce che dica
al kernel che tutti i pacchetti destinati a calcolatori con indirizzi
del tipo 192.168.1.* devono essere spediti sull'interfaccia ethernet.
Il comando per dire ci� sar�:
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
Si noti l'uso dell'argomento `-net', che dice al programma "route" che
questa voce si riferisce ad un'intera rete. L'altra possibilit� �
quella di specificare una regola di tipo `-host', cio� una regola di
instradamento specifica ad un singolo indirizzo IP.
La regola di instradamento appena mostrata � quella che permette di
stabilire connessioni con tutti gli host del proprio segmento
ethernet. Ma come si fa a connettersi a tutte le macchine che non
sono sul proprio ramo ethernet?
Dover aggiungere regole di instradamento per tutte le possibili reti
sarebbe un lavoro molto difficile; perci� esiste un trucco per
semplificare questo compito. Il trucco si chiama "regola di
instradamento di `default'". La regola "di default" si riferisce a
tutti gli indirizzi di destinazione, ma in modo "blando", cosicch se
esiste un'altra voce nella tabella che si riferisce all'indirizzo di
destinazione del pacchetto, questa voce verr� usata al posto di quella
di default. L'idea della regola di default � semplicemente quella di
dire "e tutto il resto deve andare qui". Nell'esempio di cui ci
stiamo occupando si user� un comando come:
# route add default gw 192.168.1.1 eth0
L'argomento `gw' dice al comando `route' che l'argomento seguente �
l'indirizzo numerico, o il nome, di una macchina che fa da gateway, o
router, cui devono essere spediti tutti i pacchetti ai quali questa
regola si applica, ai fini di un ulteriore instradamento.
Perci�, la vostra configurazione completa sar�:
root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add default gw 192.168.1.1 eth0
Guardando attentamente i file di configurazione di rete che si trovano
sulle macchine Linux troverete che almeno uno di essi sar� molto
simile a quello appena mostrato. Questo tipo di configurazione � molto
diffuso.
Vediamo ora una configurazione dell'instradamento leggermente pi�
complicata. Immaginiamo di configurare il router che abbiamo visto
prima, quello con la connessione PPP verso Internet e i segmenti
ethernet verso i calcolatori nell'ufficio. Immaginiamo che il router
abbia tre segmenti ethernet e un collegamento PPP. La nostra
configurazione di routing sar� qualcosa come:
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add -net 192.168.2.0 netmask 255.255.255.0 eth1
root# route add -net 192.168.3.0 netmask 255.255.255.0 eth2
root# route add default ppp0
Ognuna delle workstation sulla rete locale user� la forma pi� semplice
presentata prima, solo il router deve specificare separatamente le
informazioni relativa a ciascun tratto della rete locale, perch� per
le workstation il meccanismo della regola di default si occuper� di
tutte le sottoreti, lasciando al router il compito di suddividere
correttamente i pacchetti. Ci si pu� chiedere perch� la regola di
default appena vista per il router non specifichi un `gw'. La ragione
� semplice: i protocolli su linea seriale come PPP e SLIP hanno sempre
e solo due calcolatori sulla loro "rete": uno ad ogni estremo.
Specificare il calcolatore che si trova all'altro estremo del cavo
come `gateway' � inutile e ridondante, poich� non esistono altre
possibilit�, e per questo motivo non occorre esplicitare il gateway
per questo tipo di connessioni. Altri tipi di rete, come ethernet,
arcnet o token ring, richiedono invece che si specifichi il numero del
gateway, poich� queste reti permettono a molti calcolatori di essere
collegati insieme.
5.7.1. Allora a cosa serve il programma routed?
La configurazione di routing descritta fino adessso si applica bene a
situazioni di rete semplici, dove c'� sempre solo un singolo percorso
possibile per una data destinazione. Se la propria rete � pi�
complessa, le cose diventano pi� complicate. Fortunatamente per la
maggior parte delle persone questo non � un problema.
Il problema principale con il cosiddetto `instradamento manuale' o
`instradamento statico' come quello appena descritto � che se un
calcolatore o un collegamento all'interno della propria rete smette di
funzionare, l'unico modo (se possibile) per dirigere i pacchetti su di
un'altra strada consiste nell'intervenire a mano ed eseguire i comandi
appropriati. Naturalmente questo � impegnativo, lento, poco pratico e
rischia di fallire. Sono state sviluppate varie tecniche per
correggere automaticamente le tabelle di routing in caso di problemi
sulla rete quando ci siano percorsi alternativi. Tutte queste tecniche
sono raggruppate sotto il nome di "protocolli dinamici di
instradamento".
Pu� essere capitato a tutti di sentir nominare i protocolli dinamici
pi� usati. I pi� comuni probabilmente sono RIP (Routing Information
Protocol) e OSPF (Open Shortest Path First). Il protocollo RIP �
molto comune nelle reti piccole, come le reti di organizzazioni di
dimensione medio-piccola, o reti situate in un unico edificio. OSPF �
pi� moderno e pi� in grado di gestire grosse configurazioni di rete, e
pure pi� adatto ad ambienti dove esistono molti percorsi possibili
attraverso la rete. Le implementazioni pi� diffuse di questi
protocolli sono `routed' (per RIP), e `gated' (per RIP, OSPF e altri
protocolli). Il programma `routed' di solito fa parte delle
distribuzioni di Linux, oppure si pu� trovare incluso nel pacchetto
`NetKit' descritto all'inizio.
Un esempio di dove e quando serva usare un protocollo di instradamento
dinamico potrebbe somigliare al seguente:
192.168.1.0 / 192.168.2.0 /
255.255.255.0 255.255.255.0
- -
| |
| /-----\ /-----\ |
| | |ppp0 // ppp0| | |
eth0 |---| A |------//---------| B |---| eth0
| | | // | | |
| \-----/ \-----/ |
| \ ppp1 ppp1 / |
- \ / -
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\ /
ppp0\ /ppp1
/-----\
| |
| C |
| |
\-----/
|eth0
|
|---------|
192.168.3.0 /
255.255.255.0
Ci sono qui tre router: A, B e C. Ognuno di essi � connesso ad una
ethernet che porta una rete di classe C (netmask 255.255.255.0). Ogni
router ha anche una connessione PPP verso ognuno degli altri due
router. La rete forma un triangolo.
Dovrebbe essere chiaro che la tabella di routing per il router A
dovrebbe essere presente qualcosa come:
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
root# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
Questa situazione funzionerebbe bene, finch� non si interrompesse il
collegamento tra il router A e il router B. Se la connessione si
interrompe, la tabella di instradamento mostrata non permetterebbe ai
calcolatori sul segmento ethernet A di raggiungere calcolatori sul
segmento B, perch� i loro pacchetti sarebbero rediretti da A sulla
connessione ppp0, che � momentaneamente caduta. I calcolatori sulla
rete A possono comunque continuare a parlare ai calcolatori sulla rete
C, e questi ultimo possono continuare a parlare con i calcolatori
sulla rete B, poich� il collegamento tra B e C � ancora funzionante.
Ma allora, se A pu� parlare a C, e C pu� ancora parlare a B, perch�
non potrebbe A mandare i suoi pacchetti a B attraverso C? Questo �
esattamente il tipo di problemi che viene affrontato dai protocolli
dinamici come RIP. Se ognuno dei router A, B e C facesse girare un
programma demone di instradamento, allora le loro tabelle di routing
sarebbero corrette automaticamente per riflettere in nuovo stato della
rete ogniqualvolta uno dei collegamenti della rete si interrompesse.
Configurare questa rete � semplice: occorre fare solo due cose su
ognuno dei router. In questo caso, per A bisogna invocare:
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# /usr/sbin/routed
Il demone `routed' trova automaticamente le interfacce di rete attive
nel momento in cui viene invocato, e successivamente manda dei
messaggi e ascolta le risposte su ogni interfaccia di rete, in modo da
poter determinare la routing table ed aggiornarla.
Questo termina la breve spiegazione dell'instradamento dinamico e dove
� il caso di usarlo. Se si vogliono pi� informazioni al proposito
occorre riferirsi alle fonti di informazione elencate all'inizio di
questo documento.
I punti importanti relativi all'instradamento dinamico sono:
1. � necessario eseguire un demone per gestire un protocollo di
instradamento dinamico solo quando la propria macchina Linux ha la
possibilit� di selezionare tra piu d'un percorso possibile per una
stessa destinazione.
2. Il programma di instradamento dinamico modifica automaticamente la
tabella di intradamento perch� rispecchi i cambiamenti della rete.
3. RIP ben si presta alla gestione di reti piccole e medie.
5.8. Configurazione dei servizi di rete e dei programmi server.
I programmi "server" ed i servizi di rete sono quei programmi che
permettono ad un utente remoto di utilizzare la macchina Linux locale.
I programmi server attendono le connessioni entranti su di una porta
di rete. Le porte sono un mezzo per indirizzare un particolare
servizio su di un particolare calcolatore e sono il modo in cui un
calcolatore server pu� distinguere tra una connessione entrante di
tipo telnet ed una di tipo ftp. L'utente remoto stabilisce una
connessione di rete con la macchina server e il programma server
(anche detto "daemon" di rete) che sta attendendo una connessione su
quella porta accetta la connessione ed inizia a funzionare. Ci sono
due modi di utilizzare i servizi di rete, entrambi usati comunemente
nella pratica. Questi modi sono:
standalone (da solo)
. Il programma di rete ascolta una porta specifica di rete e
quando avverte una connessione in ingresso la gestisce da solo
per fornire il servizio richiesto.
dipendente dal server inetd
Il server inetd � un programma-demone speciale di rete che si
occupa di gestire le connessioni in ingresso. inetd fa uso di un
file di configurazione che gli dice quale programma deve essere
invocato quando viene ricevuta una connessione entrante su una
particolare porta. Una porta pu� essere configurata per entrambi
i protocolli, tcp o udp. Le porte stesse sono descritte in un
altro file, di cui si parler� presto.
Ci sono due file importanti che occorre configurare per usare inetd:
/etc/services assegna dei nomi simbolici ai numeri delle porte, mentre
/etc/inetd.conf � il file di configurazione per il programma inetd.
5.8.1. /etc/services
Il file /etc/services � un semplice database che associa ad ogni
numero di porta comprensibile alla macchina un nome comprensibile
all'uomo. Il suo formato � molto semplice: il file � un testo ciascuna
riga del quale rappresenta una voce del database. Ogni voce � composta
da tre campi separati da un numero qualunque di spazi bianchi (spazi o
caratteri `tab'). I campi sono:
nome porta/protocollo alias # commento
nome
� una singola parola che rappresenta il servizio che si sta
descrivendo.
porta/protocollo
questo campo � diviso in due sottocampi.
porta
un numero che specifica il numero di porta sulla quale il
servizio � reso disponibile. La maggior parte dei servizi
comunemente usati hanno un numero assegnato loro. Questi
numeri sono descritti nel RFC-1340.
protocollo
questo sottocampo � o "tcp" o "udp".
� importante notare che un valore pari a 18/tcp � molto
differente da 18/udp e che non ci sono ragioni tecniche per cui
un servizio debba esistere su entrambe le porte. Normalmente si
usa il buon senso, e il database contiene entrambe le voci solo
se un servizio � disponibile sia attraverso tcp che attraverso
udp.
alias
altri nomi che possono essere usati per indicare questo
servizio.
Tutto il testo che appare in una riga dopo un carattere `#' � trattato
come commento.
5.8.1.1. Un file /etc/services di esempio.
Tutte le distribuzioni recenti di Linux contengono un buon file
/etc/services. Nel caso occorra configurare un calcolatore da zero,
questa � una copia del file /etc/services fornito con una vecchia
distribuzione Debian <
http://www.debian.org/>:
# /etc/services:
# $Id: services,v 1.3 1996/05/06 21:42:37 tobias Exp $
#
# Network services, Internet style
#
# Si noti che attualmente la politica dello IANA � di assegnare
# un singolo numero di porta per entrambi TCP e UDP; perci� la maggior
# parte delle voci sono duplicate, anche se il protocollo non funziona
# con UDP.
# Aggiornato dall'RFC 1340, ``Assigned Numbers'' (Luglio 1992).
# Non sono incluse tutte le porte, solo le pi� comuni.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp # message send protocol
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
# 24 - private
smtp 25/tcp mail
# 26 - unassigned
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource location
nameserver 42/tcp name # IEN 116
whois 43/tcp nicname
re-mail-ck 50/tcp # Remote Mail Checking Protocol
re-mail-ck 50/udp # Remote Mail Checking Protocol
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
mtp 57/tcp # deprecated
bootps 67/tcp # BOOTP server
bootps 67/udp
bootpc 68/tcp # BOOTP client
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
gopher 70/udp
rje 77/tcp netrjs
finger 79/tcp
www 80/tcp http # WorldWideWeb HTTP
www 80/udp # HyperText Transfer Protocol
link 87/tcp ttylink
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5
supdup 95/tcp
# 100 - reserved
hostnames 101/tcp hostname # usually from sri-nic
iso-tsap 102/tcp tsap # part of ISODE.
csnet-ns 105/tcp cso-ns # also used by CSO name server
csnet-ns 105/udp cso-ns
rtelnet 107/tcp # Remote Telnet
rtelnet 107/udp
pop-2 109/tcp postoffice # POP version 2
pop-2 109/udp
pop-3 110/tcp # POP version 3
pop-3 110/udp
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
auth 113/tcp authentication tap ident
sftp 115/tcp
uucp-path 117/tcp
nntp 119/tcp readnews untp # USENET News Transfer Protocol
ntp 123/tcp
ntp 123/udp # Network Time Protocol
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
imap2 143/tcp # Interim Mail Access Proto v2
imap2 143/udp
snmp 161/udp # Simple Net Mgmt Proto
snmp-trap 162/udp snmptrap # Traps for SNMP
cmip-man 163/tcp # ISO mgmt over IP (CMOT)
cmip-man 163/udp
cmip-agent 164/tcp
cmip-agent 164/udp
xdmcp 177/tcp # X Display Mgr. Control Proto
xdmcp 177/udp
nextstep 178/tcp NeXTStep NextStep # NeXTStep window
nextstep 178/udp NeXTStep NextStep # server
bgp 179/tcp # Border Gateway Proto.
bgp 179/udp
prospero 191/tcp # Cliff Neuman's Prospero
prospero 191/udp
irc 194/tcp # Internet Relay Chat
irc 194/udp
smux 199/tcp # SNMP Unix Multiplexer
smux 199/udp
at-rtmp 201/tcp # AppleTalk routing
at-rtmp 201/udp
at-nbp 202/tcp # AppleTalk name binding
at-nbp 202/udp
at-echo 204/tcp # AppleTalk echo
at-echo 204/udp
at-zis 206/tcp # AppleTalk zone information
at-zis 206/udp
z3950 210/tcp wais # NISO Z39.50 database
z3950 210/udp wais
ipx 213/tcp # IPX
ipx 213/udp
imap3 220/tcp # Interactive Mail Access
imap3 220/udp # Protocol v3
ulistserv 372/tcp # UNIX Listserv
ulistserv 372/udp
#
# UNIX specific services
#
exec 512/tcp
biff 512/udp comsat
login 513/tcp
who 513/udp whod
shell 514/tcp cmd # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/udp
ntalk 518/udp
route 520/udp router routed # RIP
timed 525/udp timeserver
tempo 526/tcp newdate
courier 530/tcp rpc
conference 531/tcp chat
netnews 532/tcp readnews
netwall 533/udp # -for emergency broadcasts
uucp 540/tcp uucpd # uucp daemon
remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
klogin 543/tcp # Kerberized `rlogin' (v5)
kshell 544/tcp krcmd # Kerberized `rsh' (v5)
kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
#
webster 765/tcp # Network dictionary
webster 765/udp
#
# From ``Assigned Numbers'':
#
#> Le "porte registrate" non sono controllate dallo IANA e su molti
#> sistemi possono essere usate da ordinari processi dell'utente
#> o programmi eseguiti da utenti non privilegiati.
#
#> Le porte sono usate in TCP [45,106] per dare un nome agli estremi
#> di connessioni logiche che trasportano conversazioni a lungo termine.
#> Al fine di fornire servizi ad anonimi, viene definita
#> una porta di contatto per il servizio. Questa lista specifica
#> la porta usata dal processo server come porta di contatto. Anche se
#> lo IANA non pu� controllare l'uso di queste porte, registra
#> comunque queste porte e riconosce il loro uso per la convenienza
#> della comunit�.
#
ingreslock 1524/tcp
ingreslock 1524/udp
prospero-np 1525/tcp # Prospero non-privileged
prospero-np 1525/udp
rfe 5002/tcp # Radio Free Ethernet
rfe 5002/udp # Actually uses UDP only
bbs 7000/tcp # BBS service
#
#
# Servizi Kerberos (Progetto Athena/MIT)
# Si noti che questi servizi sono usati da Kerberos versione 4,
# e non sono ufficiali. Chi usa la versione 4 dovrebbe scommentare
# queste voci e commentare quelle per la versione 5 definite pi� sopra.
#
kerberos4 750/udp kdc # Kerberos (server) udp
kerberos4 750/tcp kdc # Kerberos (server) tcp
kerberos_master 751/udp # Kerberos authentication
kerberos_master 751/tcp # Kerberos authentication
passwd_server 752/udp # Kerberos passwd server
krb_prop 754/tcp # Kerberos slave propagation
krbupdate 760/tcp kreg # Kerberos registration
kpasswd 761/tcp kpwd # Kerberos "passwd"
kpop 1109/tcp # Pop with Kerberos
knetd 2053/tcp # Kerberos de-multiplexor
zephyr-srv 2102/udp # Zephyr server
zephyr-clt 2103/udp # Zephyr serv-hm connection
zephyr-hm 2104/udp # Zephyr hostmanager
eklogin 2105/tcp # Kerberos encrypted rlogin
#
# Servizi non ufficiali ma necessari per NetBSD
#
supfilesrv 871/tcp # SUP server
supfiledbg 1127/tcp # SUP debugging
#
# Servizi "Datagram Delivery Protocol"
#
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
#
# Servizi Debian GNU/Linux
rmtcfg 1236/tcp # Gracilis Packeten remote config server
xtel 1313/tcp # french minitel
cfinger 2003/tcp # GNU Finger
postgres 4321/tcp # POSTGRES
mandelspawn 9359/udp mandelbrot # network mandelbrot
# Local services
In realt� il file effettivo � in continua crescita dato che vengono
continuamente creati nuovi servizi. Se si teme che la propria copia
sia incompleta, si suggerisce di copiare un nuovo /etc/services da una
distribuzione recente.
5.8.2. /etc/inetd.conf
Il file /etc/inetd.conf � il file di configurazione per il server di
rete inetd. La sua funzione � quella di dire a inetd cosa fare quando
riceve una richiesta di connessione per un particolare servizio.
Bisogna dire ad inetd quale server demone di rete far partire per
ciascun servizio che si vuole fornire, bisogna anche dire come farlo
partire.
Il formato del file � abbastanza semplice: si tratta di un file di
testo in cui ogni riga descrive un servizio che si intende offrire.
Tutto quello che in una linea segue un segno # � ignorato e
considerato un commento. Ogni linea contiene sette campi separati da
un numero qualsiasi di spazi bianchi (tab o carattere di spazio). Il
formato generale �:
service socket_type proto flags user server_path server_args
service
� il servizio al quale si riferisce questa riga, � cio� uno dei
nomi che stanno nel file /etc/services.
socket_type
questo campo descrive il tipo di socket cui questa voce si
riferisce, i cui valori validi sono: stream, dgram, raw, rdm, o
seqpacket. Questa questione � abbastanza tecnica, ma come
regola pratica basti ricordare che quasi tutti i servizi basati
su tcp usano stream e quasi tutti i servizi basati su udp usano
dgram. Solo servizi molto particolari useranno uno degli altri
valori.
proto
il protocollo usato da questa voce. Questo deve corrispondere
alla voce appropriata di /etc/services e sar� di solito tcp o
udp. I servizi basati su "Sun RPC" (Remote Procedure Call)
useranno rpc/tcp o rpc/udp.
flags
ci sono solo due valori possibili per questo campo, che dice a
inetd se il programma server libera il socket dopo avere
iniziato a lavorare. Il campo dice quindi se inetd deve far
partire un altro server alla prossima richiesta di connessione
oppure se deve attendere, assumendo che il processo gi� in
funzione gestisca anche le nuove richieste di connessione.
Ancora una volta, questa informazione pu� essere difficile da
ottenere, ma in genere tutti i server tcp dovranno avere nowait
in questo campo, mentre la maggior parte dei server udp
dovrebbero avere il valore wait. Bisogna per� fare attenzione
alle eccezioni a questa regola, perci� quando non si � sicuri
conviene farsi guidare dall'esempio che verr� introdotto a
breve.
user
questo campo descrive a quale degli account presenti in
/etc/passwd deve essere assegnata la propriet� del server di
rete che viene fatto partire. Questo campo � spesso utile per
proteggersi da possibili problemi di sicurezza. Si pu� assegnare
l'utente nobody come proprietario di un server, in modo da
minimizzare il danno possibile in caso di compromissione della
sicurezza del server di rete. Di solito, comunque, questo campo
viene posto a root, poich� molti server hanno bisogno dei
privilegi del superutente per funzionare correttamente.
server_path
questo campo � il percorso completo (pathname) del programma
server che deve essere eseguito in relazione a questo servizio.
server_args
questo campo comprende il resto della riga ed � opzionale. In
questo campo si mettono gli argomenti di linea di comando che si
intendono passare al programma server quando questo viene
lanciato.
5.8.2.1. Un esempio di /etc/inetd.conf
Come per /etc/services, tutte le distribuzioni aggiornate di Linux
includono un buon file /etc/inetd.conf con cui poter lavorare. Qui per
completezza riporto il file /etc/inetd.conf che appare nella
distribuzione Debian <
http://www.debian.org/>.
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet server configuration database
#
#
# Modified for Debian by Peter Tobias <
[email protected]>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Internal services
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
discard stream tcp nowait root internal
discard dgram udp wait root internal
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
#
# These are standard services.
#
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd
#fsp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.fspd
#
# Shell, login, exec and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd
login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rexecd
talk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.talkd
ntalk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.ntalkd
#
# Mail, news and uucp services.
#
smtp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.smtpd
#nntp stream tcp nowait news /usr/sbin/tcpd /usr/sbin/in.nntpd
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico
#comsat dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.comsat
#
# Pop et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop3d
#
# `cfinger' is for the GNU finger server available for Debian. (NOTE: The
# current implementation of the `finger' daemon allows it to be run as `root'.)
#
#cfinger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.cfingerd
#finger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.fingerd
#netstat stream tcp nowait nobody /usr/sbin/tcpd /bin/netstat
#systat stream tcp nowait nobody /usr/sbin/tcpd /bin/ps -auwwx
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /boot
#bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
#
# Kerberos authenticated services (these probably need to be corrected)
#
#klogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k
#eklogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k -x
#kshell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd -k
#
# Services run ONLY on the Kerberos server (these probably need to be corrected)
#
#krbupdate stream tcp nowait root /usr/sbin/tcpd /usr/sbin/registerd
#kpasswd stream tcp nowait root /usr/sbin/tcpd /usr/sbin/kpasswdd
#
# RPC based services
#
#mountd/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.mountd
#rstatd/1-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rstatd
#rusersd/2-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rusersd
#walld/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rwalld
#
# End of inetd.conf.
ident stream tcp nowait nobody /usr/sbin/identd identd -i
5.9. Altri file di configurazione relativi alla rete.
C'� un certo numero di altri file, relativi alla configurazione di
rete sotto Linux, ai quali merita dare un'occhiata. Non ci sar�
bisogno di modificare questi file, ma vale la pena di descriverli, in
modo da sapere cosa contengono e a cosa servono.
5.9.1. /etc/protocols
Il file /etc/protocols � un database che associa i numeri
identificativi dei protocolli al nomi di ciascun protocollo. Questa
informazione viene usata dai programmatori per poter specificare per
nome i protocolli all'interno dei programmi, e viene usata da alcuni
programmi come tcpdump al fine di mostrare nei loro messaggi i nomi di
protocollo invece dei numeri. La sintassi del file �:
nome-protocollo numero alias
Il file /etc/protocols che fa parte della distribuzione Debian
<
http://www.debian.org/> � fatto cos�:
# /etc/protocols:
# $Id: protocols,v 1.1 1995/02/24 01:09:41 imurdock Exp $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport
rspf 73 RSPF # Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # Yet Another IP encapsulation
encap 98 ENCAP # Yet Another IP encapsulation
5.9.2. /etc/networks
Il file /etc/networks ha una funzione simile a /etc/hosts. Il file �
un semplice database che associa i nomi delle reti ai loro indirizzi.
Il suo formato � differente da /etc/hosts in quanto ci sono solo due
campi per riga, che sono codificati come:
nome-rete indirizzo-di-rete
Per esempio, il file potrebbe assomigliare al seguente:
loopnet 127.0.0.0
localnet 192.168.0.0
amprnet 44.0.0.0
Quando si usano comandi come route, se un indirizzo di destinazione �
una rete e quella rete appare in/etc/networks, allora il comando
mostrer� il nome della rete invece del suo indirizzo.
5.10. Sicurezza di rete e controllo degli accessi.
Vorrei iniziare questa sezione avvisando che la protezione di un
calcolatore e di una rete da attacchi malevoli � un'arte complessa.
Non mi considero assolutamente un esperto in questo campo: mentre i
meccanismi che descrivo in seguito possono essere di aiuto, raccomando
a chi prende seriamente il problema della sicurezza di fare qualche
ricerca personale sull'argomento. Su Internet ci sono molti buoni
documenti al proposito, compreso Security-HOWTO <Security-HOWTO.html>.
Una importante regola base �: `Non far girare i servizi che non si
intendono usare'. Molte distribuzioni sono configurate per attivare
ogni sorta di servizi, che vengono fatti partire automaticamente
all'accensione della macchina. Per assicurare un livello di sicurezza
minimale occorre passare in rassegna il proprio /etc/inetd.conf e
commentare (mettendo un `#' all'inizio della riga) ogni voce relativa
a servizi che non si intendono usare. Buoni candidati per questa
operazione sono servizi come shell, login, exec, uucp, ftp, e servizi
informativi come finger, netstat e systat.
Ci sono molti tipi di meccanismi di sicurezza e controllo degli
accessi; qui descriver� solo i pi� elementari.
5.10.1. /etc/ftpusers
Il file /etc/ftpusers � un semplice meccanismo che permette di negare
a certi utenti l'accesso via ftp alla macchina. Il file /etc/ftpusers
viene letto dal demone ftp server (ftpd) quando vengono ricevute delle
connessioni ftp in ingresso. Il file � semplicemente una lista di
utenti a cui � impedito di collegarsi. Il file assomiglia al
seguente:
# /etc/ftpusers - users not allowed to login via ftp
root
uucp
bin
mail
5.10.2. /etc/securetty
Il file /etc/securetty permette di specificare a quali periferiche di
tipo tty l'utente root pu� collegarsi. Il file /etc/securetty viene
letto dal programma di login (di solito /bin/login). Il file � una
lista di nomi di terminali ai quali root pu� collegarsi, mentre su
tutti gli altri non � permesso di collegarsi come superutente:
# /etc/securetty - tty's on which root is allowed to login
tty1
tty2
tty3
tty4
5.10.3. Il meccanismo di controllo degli accessi tcpd .
Il programma tcpd che avrete notato in /etc/inetd.conf fornisce i
meccanismi di controllo degli accessi e di registrazione d'utilizzo
(logging) per i servizi che protegge.
Quando viene invocato dal programma inetd, tcpd legge due file
contenenti regole di accesso e di conseguenza permette l'accesso al
servizio o lo rifiuta.
tcpd scandisce i file di regole finch� non trova una corrispondenza.
Se non ci sono corrispondenze valide, si assume che l'accesso sia
permesso a tutti. I file che vengono scanditi in sequenza sono
/etc/hosts.allow e /etc/hosts.deny. Li descriver� uno alla volta. Per
una descrizione completa di questa funzionalit� conviene riferirsi
alle pagine del manuale (hosts_access(5) � un buon punto di partenza).
5.10.3.1. /etc/hosts.allow
Il file /etc/hosts.allow � uno dei file di configurazione del
programma /usr/sbin/tcpd. hosts.allow contiene le regole che
descrivono a quali calcolatori � permesso accedere ai servizi di
questa macchina.
Il formato del file � molto semplice:
# /etc/hosts.allow
#
# <lista servizi>: <lista calcolatori> [: comando]
lista servizi
� una lista delimitata da virgole di nomi di programmi server
cui questa regola si applica. Esempi di nomi di server sono
ftpd, telnetd e fingerd.
lista calcolatori
� una lista delimitata da virgole di nomi di host. Si possono,
alternativamente, usare gli indirizzi IP. Si possono anche
specificare nomi o indirizzi usando caratteri speciali per
indicare gruppi di host. Per esempio, gw.vk2ktj.ampr.org
corrisponde ad un host, .uts.edu.au indica tutti i nomi che
terminano con questa stringa, 44. indica ogni indirizzo IP
che inizia con 44. Ci sono alcune parole speciali per
semplificare la configurazione, alcune delle quali sono: ALL per
indicare tutti gli host, LOCAL per indicare gli host il cui nome
non contiene un `.', cio� che sono nello stesso dominio di
questa macchina, PARANOID indica tutti gli host il cui nome non
corrisponde all'indirizzo (cio� nel caso sia in atto un `name
spoofing'). Un'altra parola speciale che risulta utile � EXCEPT:
permette di specificare una lista con delle eccezioni. Questo
caso verr� coperto pi� avanti da un esempio.
comando
� un argomento opzionale. Questo parametro corrisponde al
pathname completo di un comando che deve essere eseguito ogni
volta che questa regola si applica. Per esempio potrebbe essere
un comando che cerchi di identificare chi � collegato sul
calcolatore che cerca di connettersi, o un comando che spedisce
un messaggio di posta o altri avvertimenti all'amministratore di
sistema riguardo al tentativo di connessione. Ci sono un certo
numero di estensioni che possono essere incluse nel comando;
alcuni esempi tipici sono: %h � il nome dell'host che cerca di
collegarsi, o il suo indirizzo se il nome non pu� essere
risolto, %d � il demone server che viene invocato.
Un esempio:
# /etc/hosts.allow
#
# La posta � permessa e chiunque
in.smtpd: ALL
# telnet e ftp sono permessi solo a questo dominio e al mio
# calcolatore di casa
telnetd, ftpd: LOCAL, myhost.athome.org.au
# finger � permesso a tutti, ma tenendo traccia di chi lo usa.
fingerd: ALL: (finger @%h | mail -s "finger from %h" root)
5.10.3.2. /etc/hosts.deny
Il file /etc/hosts.deny � un file di configurazione del programma
/usr/sbin/tcpd. Il file hosts.deny contiene le regole che descrivono a
quali calcolatori non � permesso di accedere un servizio sul
calcolatore locale.
Un semplice esempio potrebbe somigliare a questo:
# /etc/hosts.deny
#
# Impedisci l'accesso a tutti i calcolatori con nomi sospetti
ALL: PARANOID
#
# Impedisci l'accesso a tutti i calcolatori
ALL: ALL
In realt� la voce PARANOID � ridondante perch� l'altra voce si
riferisce in ogni caso a tutti i calcolatori. L'uso di una di queste
due voci potrebbe essere una scelta ragionevole, in base alle
specifiche esigenze di controllo degli accessi.
La configurazione pi� sicura consiste nell'avere un default di ALL:
ALL esplicito in /etc/hosts.deny ed abilitare esplicitamente in
/etc/hosts.allow i servizi e gli host che si vogliono autorizzare.
5.10.4. /etc/hosts.equiv
Il file hosts.equiv viene usato per autorizzare alcuni calcolatori e
alcuni utenti ad utilizzare gli account sulla macchina locale senza
aver bisogno di fornire una password. Questo � utile in un ambiente
sicuro, in cui si possano controllare tutte le macchine, ma � un
grosso rischio in altre circostanze. Un calcolatore � sicuro solo
tanto quanto lo � il meno sicuro dei calcolatori di cui ci si fida.
Per massimizzare la sicurezza � bene non usare il meccanismo di
hosts.equiv ed incoraggiare gli utenti a non usare nemmeno il file
.rhosts.
5.10.5. Come configurare correttamente il server ftp .
Molti siti sono interessati ad offrire il servizio di ftp anonimo, per
permettere ad altre persone di scaricare e depositare dei dati senza
bisogno di un account specifico sulla macchina. Se si decide di
offrire questo servizio bisogna assicurarsi di configurare
correttamente il server ftp per l'accesso anonimo. La maggior parte
delle pagine del manuale disponibili per ftpd(8) descrivono
accuratamente come adempiere questo compito, e bisogna assicurarsi di
seguire le istruzioni. Un consiglio importante � di non usare una
copia del proprio file /etc/passwd nella directory /etc dell'account
anonimo: bisogna assicurarsi di rimuovere tutti i dettagli tranne
quelli necessari, altrimenti si diventa vulnerabili alle tecniche di
rottura delle password "per forza bruta".
5.10.6. I firewall di rete.
Un eccellente modo per avere una certa sicurezza � impedire ai
pacchetti di raggiungere il calcolatore che si intende proteggere.
Questa tecnica � discussa in dettaglio nel Firewall-HOWTO <Firewall-
HOWTO.html>, e (in forma concisa) in una sezione successiva di questo
documento.
5.10.7. Altri suggerimenti.
Questi sono altri suggerimenti che val la pena di prendere in
considerazione, anche se potenzialmente si prestano a guerre di
religione.
sendmail
nonostante la sua popolarit�, appare sugli annunci di attenzione
alla sicurezza con impressionante regolarit�. Dipende da voi,
ma io preferisco non usarlo [un'ottima alternativa � postfix, si
trova su mirror italiano di www.postfix.org
<
http://postfix.linux.it/> N.d.T.].
NFS e altri servizi di tipo
bisogna fare attenzione: esistono un sacco di modi per sfruttare
a fini malevoli questi servizi. � difficile trovare
un'alternativa a servizi come NFS, ma se questi vengono
abilitati bisogna fare estrema attenzione riguardo chi ha il
permesso di montare i dischi della propria macchina.
6. Informazioni specifiche ad IP ed Ethernet.
Questa sezione presenta informazioni specifiche a Ethernet e IP.
Queste sottosezioni sono state raggruppate assieme perch� credo siano
le pi� interessanti della sezione precedentemente intitolata
"Informazioni specifiche alle singole tecnologie di rete". Chiunque
abbia una rete locale (LAN) dovrebbe poterne beneficiare.
6.1. Ethernet
I nomi dei dispositivi Ethernet sono `eth0', `eth1', `eth2' eccetera.
Alla prima scheda di rete riconosciuta del kernel viene assegnato
`eth0', alle altre eventuali schede viene assegnato un nome in
sequenza, nell'ordine in cui vengono riconosciute.
Per default, il kernel Linux effettua il probing di un solo
dispositivo Ethernet, � necessario passare degli argomenti dalla linea
di comando al kernel per poter forzare il riconoscimento di ulteriori
schede.
Per imparare come far lavorare correttamente sotto Linux le proprie
schede ethernet, si pu� far riferimento al Ethernet-HOWTO <Ethernet-
HOWTO.html>.
Quando il kernel � compilato con le opzioni corrette per supportare la
propria scheda ethernet, la sua configurazione � facile.
Tipicamente sar� necessario qualcosa di simile (di solito la maggior
parte delle distribuzioni lo fa automaticamente, se configurata per
supportare la scheda ethernet presente):
root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
root# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
La maggior parte dei driver ethernet sono stati sviluppati da Donald
Becker,
[email protected].
6.2. EQL - equalizzazione del traffico su linea multipla
Il nome della periferica EQL � `eql'. Con la distribuzione standard
del kernel si pu� avere al massimo una periferica EQL per macchina.
Il protocollo EQL offre un mezzo per utilizzare connessioni multiple
punto-a-punto (come PPP, slip o plip) come se fossero un singolo
collegamento TCP/IP. Spesso � pi� economico usare vari collegamenti a
bassa velocit� che installare un singolo collegamento ad alta
velocit�.
Opzioni di compilazione del kernel:
Network device support --->
[*] Network device support
<*> EQL (serial line load balancing) support
Per utilizzare questo meccanismo occorre che anche la macchina che sta
all'altro capo del collegamento supporti EQL. Linux, i "Livingstone
Portmaster" e altri recenti server a chiamata telefonica (dial-in
server) supportano funzionalit� compatibili.
Per configurare EQL occorrono gli strumenti EQL, che si posso prendere
da: sunsite.unc.edu
<
ftp://sunsite.unc.edu/pub/linux/system/Serial/eql-1.2.tar.gz>.
La configurazione � abbastanza intuitiva. Si inizia configurando
l'interfaccia eql. A questa interfaccia, come a qualunque altra
interfaccia di rete, viene assegnato un indirizzo IP ed una MTU usando
il comando ifconfig. Per esempio:
ifconfig eql 192.168.10.1 mtu 1006
Poi occorre attivare manualmente ognuna delle linee che si intendono
usare. Queste possono essere una qualsiasi combinazione di
dispositivi di rete punto-a-punto. Come effettuare tali connessioni
dipende dal tipo di collegamenti in gioco. Per avere ulteriori
informazioni occorre riferirsi alle sezioni appropriate.
Infine occorre associare questi collegamenti seriali alla periferica
EQL. Questa operazione si chiama "asservimento" (enslave) e viene
effettuata con il comando eql_enslave come mostrato qui:
eql_enslave eql sl0 28800
eql_enslave eql ppp0 14400
Il parametro che viene passato � la velocit� stimata, e non ha alcun
effetto diretto: viene solo usato dal driver EQL per determinare la
suddivisione dei pacchetti, in modo da poter aggiustare con precisione
il bilanciamento delle linee mediante la scelta oculata di questo
valore.
Per staccare una linea dal dispositivo EQL occorre usare il comando
eql_emancipate, come qui mostrato:
eql_emancipate eql sl0
Per aggiungere informazioni di instradamento si fa come per qualunque
altro collegamento punto-a-punto, tranne che i percorsi devono
riferirsi al dispositivo eql piuttosto che ai singoli collegamenti.
Di solito si usano comandi come il seguente:
root# route add default eql
Il driver EQL � stato scritto da Simon Janes,
[email protected].
6.3. IP Accounting (per Linux-2.0)
Le caratteristiche di accounting del kernel Linux permettono di
raccogliere ed analizzare alcuni dati di utilizzo della rete. I dati
raccolti comprendono il numero di pacchetti e il numero di byte
accumulati dal momento in cui le cifre sono state azzerate l'ultima
volta. Si possono specificare una variet� di regole per raccogliere le
cifre in categorie secondo le proprie finalit�. Questa possibilit� �
stata rimossa a partire dal kernel 2.1.102, poich� il firewalling
basato su `ipfwadm' � stato rimpiazzato da `ipfwchains'.
Opzioni di compilazione del kernel:
Networking options --->
[*] IP: accounting
Dopo aver ricompilato ed installato il kernel occorre usare il comando
ipfwadm per configurare l'accounting IP. Si pu� scegliere tra diversi
modi di dividere le informazioni di accounting. Ho scelto qui un
semplice esempio di cosa pu� essere utile usare, bisognerebbe leggere
la pagina del manuale di ipfwadm per avere ulteriori informazioni.
Scenario: una rete ethernet � collegata a Internet tramite una
connessione PPP. Sulla ethernet c'� una macchina che offre svariati
servizi, e interessa sapere quanto traffico viene generato da ftp e
WWW, come pure il traffico totale TCP e UDP.
Si pu� usare a questo fine un insieme di comandi simile al seguente,
riportato come script di shell:
#!/bin/sh
#
# Dimentica tutte le regole di accounting
ipfwadm -A -f
#
# assegna dei riferimenti simbolici
localnet=44.136.8.96/29
any=0/0
# Aggiungi le regole per il segmento ethernet locale
ipfwadm -A in -a -P tcp -D $localnet ftp-data
ipfwadm -A out -a -P tcp -S $localnet ftp-data
ipfwadm -A in -a -P tcp -D $localnet www
ipfwadm -A out -a -P tcp -S $localnet www
ipfwadm -A in -a -P tcp -D $localnet
ipfwadm -A out -a -P tcp -S $localnet
ipfwadm -A in -a -P udp -D $localnet
ipfwadm -A out -a -P udp -S $localnet
#
# Regole di default
ipfwadm -A in -a -P tcp -D $any ftp-data
ipfwadm -A out -a -P tcp -S $any ftp-data
ipfwadm -A in -a -P tcp -D $any www
ipfwadm -A out -a -P tcp -S $any www
ipfwadm -A in -a -P tcp -D $any
ipfwadm -A out -a -P tcp -S $any
ipfwadm -A in -a -P udp -D $any
ipfwadm -A out -a -P udp -S $any
#
# Stampa le regole
ipfwadm -A -l -n
#
I nomi `ftp-data' e `www' si riferiscono a voci di /etc/services.
L'ultimo comando stampa tutte le regole di accounting e mostra i
totali raccolti.
Un punto importante da sottolineare quando si parla di accounting IP �
che vengono incrementati i totali per tutte le regole che si
applicano, cosicch� per ottenere cifre relative alle differenza ci
vuole un po' di matematica. Per esempio, se si vuol sapere quanto
traffico non era ftp o www bisogna sottrarre i totali individuali
dalla regola che si applica a tutte le porte.
root# ipfwadm -A -l -n
IP accounting rules
pkts bytes dir prot source destination ports
0 0 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 20
0 0 out tcp 44.136.8.96/29 0.0.0.0/0 20 -> *
10 1166 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 80
10 572 out tcp 44.136.8.96/29 0.0.0.0/0 80 -> *
252 10943 in tcp 0.0.0.0/0 44.136.8.96/29 * -> *
231 18831 out tcp 44.136.8.96/29 0.0.0.0/0 * -> *
0 0 in udp 0.0.0.0/0 44.136.8.96/29 * -> *
0 0 out udp 44.136.8.96/29 0.0.0.0/0 * -> *
0 0 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 20
0 0 out tcp 0.0.0.0/0 0.0.0.0/0 20 -> *
10 1166 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 80
10 572 out tcp 0.0.0.0/0 0.0.0.0/0 80 -> *
253 10983 in tcp 0.0.0.0/0 0.0.0.0/0 * -> *
231 18831 out tcp 0.0.0.0/0 0.0.0.0/0 * -> *
0 0 in udp 0.0.0.0/0 0.0.0.0/0 * -> *
0 0 out udp 0.0.0.0/0 0.0.0.0/0 * -> *
6.4. IP Accounting (per Linux-2.2)
Il nuovo accounting IP � gestito mediante `IP Firewall Chains'. Si
pu� fare riferimento alla home page di IP chains
<
http://www.adelaide.net.au/~rustcorp/ipfwchains/ipfwchains.html> per
ulteriori informazioni. Tra le altre cose adesso � necessario usare
ipchains al posto di ipfwadm per configurare le proprie regole. (Da
Documentation/Changes nei sorgenti pi� recenti del kernel). [�
disponibile IP-Chains mini-HOWTO N.d.T.]
6.5. IP Aliasing
Ci sono alcune applicazioni dove � utile poter configurare diversi
indirizzi IP associati ad un unica scheda di rete. I fornitori di
accesso ad internet spesso usano questa funzionalit� per la
personalizzazione delle loro offerte di servizi ftp e WWW per i loro
clienti. Si pu� fare riferimento a `IP-Alias mini-HOWTO' per maggiori
informazioni.
Opzioni di compilazione del kernel:
Networking options --->
....
[*] Network aliasing
....
<*> IP: aliasing support
Dopo aver compilato ed installato il kernel con il supporto per l'IP
Aliasing, la configurazione � molto semplice. I nomi alternativi
(alias) vengono aggiunti a periferiche di rete virtuali associate
all'interfaccia di rete fisica. Esiste una semplice convenzione per
l'assegnamento dei nomi a queste periferiche, del tipo
<nomePeriferica>:<numeroPerifericaVirtuale>, per esempio eth0:0,
ppp0:10. Si noti che l'interfaccia nome:numero pu� essere configurata
solo dopo aver configurato l'interfaccia principale.
Assumiamo per esempio di avere una rete ethernet che porta due
sottoreti IP contemporaneamente, e che si voglia che una macchina
abbia accesso diretto ad entrambe le sottoreti; in questo caso si pu�
usare qualcosa come:
root# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# ifconfig eth0:0 192.168.10.1 netmask 255.255.255.0 up
root# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0
Per rimuovere un alias basta aggiungere un carattere `-' alla fine del
suo nome e riferirsi ad esso, cos�:
# ifconfig eth0:0- 0
Tutte le regole di instradamento associate a quell'alias verranno
rimosse automaticamente.
6.6. IP Firewall (per Linux-2.0)
Il Firewall IP e gli argomenti correlati sono trattati con maggior
dettaglio nel Firewall-HOWTO <Firewall-HOWTO.html>. Le tecniche di
firewall permettono di rendere sicura la propria macchina verso gli
accessi di rete non autorizzati filtrando i pacchetti: i pacchetti di
rete sono accettati oppure no in base agli indirizzi IP di
partenza/destinazione. Ci sono tre classi di regole: filtro di
ingresso (incoming), di uscita (outgoing) e passante (forwarding). Le
regole di ingresso vengono applicate ai pacchetti che vengono ricevuti
dalle interfacce di rete, le regole di uscita vengono applicate ai
pacchetti che devono essere trasmessi da un'interfaccia. Le regole di
filtro passante vengono applicate ai pacchetti che sono stati ricevuti
ma non sono destinati a questa macchina, cio� i pacchetti che devono
essere instradati.
Opzioni di compilazione del kernel:
Networking options --->
[*] Network firewalls
....
[*] IP: forwarding/gatewaying
....
[*] IP: firewalling
[ ] IP: firewall packet logging
La configurazione delle regole del firewall IP viene effettuata
tramite il comando ipfwadm. Come ho accennato prima, non sono un
esperto nel campo della sicurezza informatica; perci�, mentre
l'esempio che sto per presentare � utilizzabile, consiglio di fare le
proprie ricerche e sviluppare le proprie regole se la sicurezza � un
problema importante.
Probabilmente l'uso pi� comune del firewall IP si ha quando la propria
macchina Linux � usata come router e come filtro per proteggere la
propria rete locale dall'accesso non autorizzato dall'esterno della
rete.
La configurazione seguente � basata su di un contributo di Arnt
Gulbrandsen, <
[email protected]>.
L'esempio descrive la configurazione delle regole di firewall nella
macchina Linux rappresentata in figura:
- -
\ | 172.16.37.0
\ | /255.255.255.0
\ --------- |
| 172.16.174.30 | Linux | |
NET =================| f/w |------| ..37.19
| PPP | router| | --------
/ --------- |--| Mail |
/ | | /DNS |
/ | --------
- -
I comandi seguenti risiederanno probabilmente in un file nella
directory rc in modo da essere eseguiti automaticamente tutte le volte
che il sistema viene avviato. Ai fini della massima sicurezza, i
comandi dovrebbero essere eseguiti dopo aver configurato le interfacce
di rete, ma prima di attivarle, in modo da impedire a chiunque di
accedere al calcolatore mentre sta riavviandosi.
#!/bin/sh
# Azzera la tabella di 'Forward'
# Cambia il comportamento di default perch� accetti i pacchetti.
#
/sbin/ipfwadm -F -f
/sbin/ipfwadm -F -p accept
#
# .. e lo stesso per le regole di entrata.
#
/sbin/ipfwadm -I -f
/sbin/ipfwadm -I -p accept
# Prima di tutto, chiudere l'interfaccia PPP
# Vorrei usare '-a deny' invece di '-a reject -y', ma non sarebbe
# possibile creare delle connessioni da questa interfaccia.
# Il -o fa s� che tutti pacchetti rifiutati siano registrati sul log.
# Questo spreca spazio su disco ma lascia informazione in casi di
# attacco o errore di configurazione.
#
/sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30
# Rigetta subito i pacchetti chiaramente costruiti a scopo malevolo:
# niente dovrebbe provenire da indirizzi multicast/anycast/broadcast
#
/sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24
#
# e nulla proveniente dalla rete loopback deve apparire su un cavo
# di rete
/sbin/ipfwadm -F -a deny -o -S 127.0/8 -D 172.16.37.0/24
# Accetta connessioni SMTP e DNS entranti, ma solo verso il server
# di posta e di risoluzione dei nomi (name server)
#
/sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53
#
# Il DNS usa anche UDP oltre a TCP, quindi bisogna permetterlo
# per le interrogazioni al nostro name server
#
/sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53
#
# ma non autorizzare risposte provenienti da porte
# pericolose, come NFS e le sue estensioni a cura di Larry MCVoy.
# Se si usa squid, aggiungere qui la sua porta.
#
/sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \
-D 172.16.37.0/24 2049 2050
# risposte per le altre porte non privilegiate vanno bene
#
/sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \
-D 172.16.37.0/24 53 1024:65535
# Rifiuta le connessioni entranti per identd
# Usare 'reject' cos� alla connessione viene notificato subito
# di non continuare. Altrimenti avremmo dei ritardi mentre identd
# aspetta il time out.
#
/sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113
# Accetta le connessioni per alcuni servizi comuni dalle reti
# 192.168.64 e 192.168.65: sono amici e ci fidiamo.
#
/sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \
-D 172.16.37.0/24 20:23
# accetta e ritrasmetti tutto quello che viene dall'interno
#
/sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0
# impedisci la maggior parte delle altre connessioni TCP entranti, e
# registrale sul log di sistema.
# (occorre aggiungere 1:1023 se ftp non funziona)
#
/sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24
# ... e lo stesso per UDP
#
/sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24
Una buona configurazione del firewall � abbastanza difficile da
raggiungere. Questo esempio dovrebbe essere un punto di partenza
ragionevole. La pagina di manuale di ipfwadm offre un po' di
assistenza nell'uso del programma. Se si intende configurare un
firewall occorre essere sicuri di chiedere e di recuperare il maggior
numero possibile di informazioni da fonti che si considerino
affidabili. Occorre anche che qualcuno verifichi la configurazione
dall'esterno.
6.7. IP Firewall (per Linux-2.2)
Il nuovo firewall � gestito mediante `IP Firewall Chains'. Si pu�
fare riferimento alla home page di IP chains
<
http://www.adelaide.net.au/~rustcorp/ipfwchains/ipfwchains.html> per
ulteriori informazioni. Tra le altre cose adesso � necessario usare
ipchains al posto di ipfwadm per configurare le proprie regole. (Da
Documentation/Changes nei sorgenti pi� recenti del kernel). [�
disponibile IP-Chains mini-HOWTO N.d.T.]
6.8. Incapsulazione IPIP
Perch� si dovrebbe aver bisogno di incapsulare i pacchetti IP in altri
pacchetti IP? Deve sembrare una cosa molto strana se non si � mai
vista prima una sua applicazione. Ok, ecco un paio di esempi di uso
abbastanza comune dell'incapsulazione: gli indirizzi mobili (mobile-
IP) e il multicast. Quello che probabilmente � l'uso pi� comune di
questa tecnica, anche se probabilmente il meno noto, � la radio
amatoriale.
Opzioni di compilazione del kernel:
Networking options --->
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
....
<*> IP: tunneling
Le periferiche tunnel sono chiamate `tunl0', `tunl1' eccetera.
"Ma perch�?". Ecco: l'instradamento convenzionale dei pacchetti IP
richiede che una rete IP comprenda un indirizzo di rete ed una
maschera di rete. Questo produce una serie di indirizzi contigui che
possono essere instradati collettivamente da una singola voce di
instradamento. Questo � molto comodo, ma significa che un particolare
indirizzo pu� essere usato solo mentre si � connessi alla rete cui
quell'indirizzo appartiene. Nella maggior parte di casi questo va
bene, ma se si � un utente mobile della rete pu� essere difficile
collegarsi sempre nello stesso posto. L'incapsulazione IP/IP (o
tunneling IP) permette di scavalcare questa restrizione permettendo ai
pacchetti destinati all'indirizzo IP dell'utente mobile di essere
reimpacchettati e rediretti ad un altro indirizzo IP. Se si sa di
doversi collegare ad un altro indirizzo IP per un certo tempo, si pu�
predisporre un calcolatore sulla propria rete di appartenenza perch�
accetti i pacchetti per il vecchio indirizzo IP e li ridiriga
all'indirizzo che si utilizzer� temporaneamente.
6.8.1. Una configurazione di rete a "tunnel"
Come sempre, credo che un diagramma possa evitare un sacco di testo
poco chiaro, perci� eccone qui uno:
192.168.1/24 192.168.2/24
- -
| ppp0 = ppp0 = |
| aaa.bbb.ccc.ddd fff.ggg.hhh.iii |
| |
| /-----\ /-----\ |
| | | // | | |
|---| A |------//---------| B |---|
| | | // | | |
| \-----/ \-----/ |
| |
- -
Il diagramma mostra un'altra ragione possibile per usare
l'incapsulazione IP/IP: le reti private virtuali. Questo esempio
presuppone che si abbiano due macchine, ciascuna con una semplice
connessione telefonica alla rete, e ogni calcolatore ha un solo
indirizzo IP. Dietro a queste due macchine ci sono delle reti locali
private, configurate con gli indirizzi di rete riservati a tal fine.
Supponiamo di voler permettere a tutti i calcolatori della rete A di
collegarsi a qualsiasi calcolatore della rete B, come se fossero
connessi normalmente a Internet tramite una regola di instradamento.
L'incapsulazione IPIP permette di fare questo. Si noti che
l'incapsulazione non risolve il problema di come far parlare le reti A
e B con gli altri calcolatori di internet: per fare questo occorrono
altri trucchi, come il mascheramento. L'incapsulazione di solito
viene effettuata dalle macchine che funzionano da router.
Il router Linux `A' dovr� essere configurato con uno script come il
seguente:
#!/bin/sh
PATH=/sbin:/usr/sbin
mask=255.255.255.0
remotegw=fff.ggg.hhh.iii
#
# configurazione Ethernet
ifconfig eth0 192.168.1.1 netmask $mask up
route add -net 192.168.1.0 netmask $mask eth0
#
# configurazione ppp0 (avvio del collegamento punto-a-punto,
# configura il percorso di default)
pppd
route add default ppp0
#
# configurazione della periferica Tunnel
ifconfig tunl0 192.168.1.1 up
route add -net 192.168.2.0 netmask $mask gw $remotegw tunl0
Il router `B' dovr� essere configurato con uno script simile:
#!/bin/sh
PATH=/sbin:/usr/sbin
mask=255.255.255.0
remotegw=aaa.bbb.ccc.ddd
#
# configurazione Ethernet
ifconfig eth0 192.168.2.1 netmask $mask up
route add -net 192.168.2.0 netmask $mask eth0
#
# configurazione ppp0 (avvio del collegamento punto-a-punto,
# configura il percorso di default)
pppd
route add default ppp0
#
# configurazione della periferica Tunnel
ifconfig tunl0 192.168.2.1 up
route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0
Il comando:
route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0
significa: `Manda tutti i pacchetti destinati a 192.168.1.0/24
incapsulati entro un datagramma IPIP con indirizzo di destinazione
aaa.bbb.ccc.ddd'.
Si noti che le configurazioni delle due macchine sono simmetriche. Il
dispositivo tunnel usa l'opzione `gw' nell'informazione di
instradamento come destinazione del pacchetto IP incapsulante. Tale
macchina deve sapere come de-capsulare i pacchetti IPIP, in altre
parole deve anch'essa essere configurata con un dispositivo tunnel.
6.8.2. Una configurazione di calcolatore con tunnel
Non occorre aver bisogno di instradare un'intera rete. Si pu� per
esempio instradare un singolo indirizzo IP. In questo caso si
configurer� l'interfaccia tunl sulla macchina remota con il suo
proprio indirizzo IP, mentre all'estremo A si user� un normale
instradamento di host (usando Proxy Arp), piuttosto che
un'instradamento di rete attraverso l'interfaccia tunnel. Si deve
ridisegnare e modificare a questo fine la configurazione precedente.
Adesso c'� un solo calcolatore `B' che vuole comportarsi come se fosse
completamente connesso a Internet e anche parte della rete supportata
dall'host `A':
192.168.1/24
-
| ppp0 = ppp0 =
| aaa.bbb.ccc.ddd fff.ggg.hhh.iii
|
| /-----\ /-----\
| | | // | |
|---| A |------//---------| B |
| | | // | |
| \-----/ \-----/
| anche: 192.168.1.12
-
Il router `A' sar� cos� configurato tramite lo script:
#!/bin/sh
PATH=/sbin:/usr/sbin
mask=255.255.255.0
remotegw=fff.ggg.hhh.iii
#
# configurazione Ethernet
ifconfig eth0 192.168.1.1 netmask $mask up
route add -net 192.168.1.0 netmask $mask eth0
#
# configurazione ppp0 (avvio del collegamento punto-a-punto,
# configura il percorso di default)
pppd
route add default ppp0
#
# configurazione della periferica Tunnel
ifconfig tunl0 192.168.1.1 up
route add -host 192.168.1.12 gw $remotegw tunl0
#
# Proxy ARP per l'host remoto
arp -s 192.168.1.12 xx:xx:xx:xx:xx:xx pub
Il calcolatore Linux `B' sar� configurato con:
#!/bin/sh
PATH=/sbin:/usr/sbin
#
# configurazione ppp0 (avvio del collegamento punto-a-punto,
# configura il percorso di default)
pppd
route add default ppp0
#
# configurazione della periferica Tunnel
ifconfig tunl0 192.168.1.12 up
route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0
Questo tipo di configurazione � tipico per le applicazioni di Mobile-
IP. In questo caso un singolo calcolatore vuole spostarsi in Internet
e mantenere un singolo indirizzo IP per tutto il tempo. Nella sezione
su Mobile-IP ci sono ulteriori informazioni su come affrontare in
pratica questo problema.
6.9. Mascheramento IP (IP Masquerade) per Linux-2.0
Molte persone si connettono a Internet attraverso un semplice accesso
telefonico. Quasi tutti quelli che hanno questo tipo di configurazione
hanno solo un indirizzo IP destinato a loro dall'Internet Provider.
Questo � di solito sufficiente per collegare una sola macchina alla
rete. Il mascheramento IP (IP masquerading) � un trucco intelligente
che permette di avere molte macchine che usino un singolo indirizzo
IP, facendo in modo che i calcolatori aggiuntivi sembrino (da cui il
termine "mascheramento") quello che ha il collegamento telefonico. C'�
per� un piccolo problema, ed � che la funzione di mascheramento
funziona quasi sempre in una sola direzione, per cui i calcolatori
mascherati possono chiamare all'esterno ma non possono accettare
connessioni dall'esterno. Questo vuol dire che alcuni servizi di rete
(ad esempio talk) non funzionano mentre altri, tra cui ftp, devono
essere configurati per operare in modo passivo (PASV) per poter essere
usati. Per fortuna i servizi pi� comuni, come telnet, WWW e irc
funzionano perfettamente.
Opzioni di compilazione del kernel:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Networking options --->
[*] Network firewalls
....
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
....
[*] IP: masquerading (EXPERIMENTAL)
Normalmente si avr� la propria macchina Linux collegata tramite una
linea telefonica con slip o PPP, come se fosse un normale calcolatore
isolato. Inoltre avr� un'altra periferica di rete attiva,
probabilmente un'interfaccia ethernet, configurata usando uno degli
indirizzi di rete riservati. I calcolatori da mascherare saranno su
questa seconda rete. Ognuno di questi calcolatori user� l'indirizzo
ethernet della macchina Linux configurato come proprio router.
Una tipica configurazione potrebbe apparire come la seguente:
- -
\ | 192.168.1.0
\ | /255.255.255.0
\ --------- |
| | Linux | .1.1 |
NET =================| masq |------|
| PPP/slip | router| | --------
/ --------- |--| host |
/ | | |
/ | --------
- -
I comandi pi� importanti per questa configurazione sono i seguenti:
# Instradamento per la ethernet
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
#
# Instradamento di default per il resto della rete.
root# route add default ppp0
#
# Facciamo in modo che tutte le macchine sulla rete 192.168.1/24
# siano mascherate
root# ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0
Se siete minimalisti e non avete voglia di pigiare troppi tasti, come
me, e la macchina mascherante ha due sole interfacce (per cui ogni
pacchetto che vi transita dev'essere mascherato), il seguente comando
sar� sufficiente:
root# /sbin/ipfwadm -F -a accept -m
Si possono trovare ulteriori informazioni sulla funzionalit� di
mascheramento IP di Linux su pagina dell'IP Masquerade
<
http://www.hwy401.com/achau/ipmasq/>. Inoltre un ben dettagliato
documento circa il mascheramento � `IP-Masquerade mini-HOWTO'.
Fornisce anche istruzioni su come configurare altri sistemi operativi
per utilizzare un server di mascheramento linux).
6.10. IP Transparent Proxy
Il "proxy trasparente" � una funzionalit� che permette di ridirigere
dei server o dei servizi destinati ad un'altra macchina verso server e
servizi su questa stessa macchina. Di solito questo � utile quando si
usa un calcolatore Linux come router che fa anche da server proxy. Si
vuole in questo caso ridirigere tutte le connessioni dirette ad un
dato servizio su macchine remote verso il server locale.
Opzioni di compilazione del kernel:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Networking options --->
[*] Network firewalls
....
[*] TCP/IP networking
....
[*] IP: firewalling
....
[*] IP: transparent proxy support (EXPERIMENTAL)
La configurazione delle capacit� di proxy trasparente si effettua
usando il comando ipfwadm.
Un esempio che potrebbe rivelarsi utile � il seguente:
root# ipfwadm -I -a accept -D 0/0 telnet -r 2323
Questo esempio fa s� che ogni tentativo di connettersi alla porta
telnet (23) di qualunque host venga rediretto verso la porta 2323 di
questo calcolatore. Se viene fatto girare un servizio su tale porta,
risulta possibile fare il forward delle connessioni telnet,
registrarle o fare qualsivoglia altra operazione che soddisfi le
proprie necessit�.
Un esempio pi� interessante consiste nel redirigere tutto il traffico
http verso una cache locale. D'altra parte, il protocollo usato dai
server proxy � diverso dall'http nativo: mentre un client che si
connette a www.server.com:80 chieder� la pagine /path/page, un client
che si connette al proxy locale contatta proxy.local.domain:8080 e
richiede www.server.com/path/page.
Per filtrare una richiesta http attraverso il proxy locale, occorre
adattare il protocollo, tramite l'inserimento di un piccolo server,
chiamato transproxy (� possibile trovarlo sulla rete). Si pu� decidere
di far andare transproxy sulla porta 8081 e usare il seguente comando:
root# ipfwadm -I -a accept -D 0/0 80 -r 8081
Il programma transproxy quindi ricever� tutti i pacchetti che
dovrebbero raggiungere server esterni alla rete locale e li passer� al
proxy locale sistemando le differenze di protocollo.
6.11. IPv6
Proprio nel momento in cui si credeva di aver iniziato a capire come
funzionano le reti IP, le regole sono cambiate! IPv6 � l'abbreviazione
usata per riferirsi alla versione 6 del protocollo internet. IPv6 �
stato sviluppato principalmente per risolvere i timori della comunit�
Internet riguardo alla prossima saturazione dello spazio di indirizzi
IP. Gli indirizzi IPv6 sono lunghi 16 byte (128 bit). IPv6 incorpora
un certo numero di altri cambiamenti, principalmente semplificazioni,
che renderanno le reti IPv6 pi� gestibili di quelle IPv4.
Linux contiene un'implementazione funzionante, ma non completa, del
protocollo IPv6 nella serie 2.1.* dei kernel.
Chi vuole sperimentare questa nuova generazione di tecnologia
Internet, o ha bisogno di essa, dovrebbe leggere il documento
IPv6-FAQ, diponibile presso www.terra.net
<
http://www.terra.net/ipv6/>.
6.12. IP mobile
L'espressione "Mobile-IP" descrive l'abilit� di un calcolatore di
muovere la propria connessione di rete da un punto di Internet ad un
altro senza cambiare il proprio indirizzo IP e senza perdere la
connettivit�. Di solito, quando un calcolatore IP cambia il suo punto
di connessione deve anche cambiare indirizzo IP. La mobilit� IP
risolve questo problema allocando un indirizzo IP fisso per il
calcolatore mobile e usando l'incapsulazione IP (il tunneling) con
instradamento automatico, per assicurarsi che i pacchetti destinati a
tale calcolatore siano instradati all'indirizzo IP che sta usando al
momento.
C'� un progetto attivo al fine di fornire un insieme completo di
strumenti per la mobilit� IP sotto Linux. Lo stato attuale del
progetto e gli strumenti sviluppati si possono trovare alla home page
del Mobile-IP per Linux <
http://anchor.cs.binghamton.edu/~mobileip/>.
6.13. Multicast
Il multicast IP permette ad un numero arbitrario di host IP su reti IP
diverse di avere instradati verso di loro simultaneamente i pacchetti
IP. Questo meccanismo viene usato per distribuire su Internet
materiale "broadcast", come le trasmissioni audio e video, o altre
applicazioni innovative.
Opzioni di compilazione del kernel:
Networking options --->
[*] TCP/IP networking
....
[*] IP: multicasting
� richiesto a tal fine un pacchetto di programmi e un minimo sforzo di
configurazione. Si pu� fare riferimento a Multicast-HOWTO <Multicast-
HOWTO.html> per maggiori informazioni sul supporto al multicast in
Linux.
6.14. NAT - Network Address Translation
La funzionalit� di traduzione degli indirizzi di rete � in qualche
modo il fratello maggiore standardizzato del mascheramento IP di
Linux. Si possono trovare i dettagli nel RFC-1631 in un qualunque
archivio di RFC. Il NAT offre delle funzionalit� non fornite dal
mascheramento dei pacchetti; queste capacit� aggiuntive lo rendono
molto pi� adatto all'uso nei progetti di router che facciano da
firewall per gruppi di aziende e per installazioni su larga scala.
Una implementazione di prova del NAT per Linux 2.0.29 � stata
sviluppata da Michael Hasenstein,
[email protected]
chemnitz.de. La documentazione e l'implementazione di Michael si
possono recuperare dalla pagina web del `Linux IP Network Address'
<
http://www.csn.tu-chemnitz.de/HyperNews/get/linux-ip-nat.html>
I pi� recenti kernel 2.1.* includono parte della funzionalit� NAT
negli algoritmi di instradamento.
6.15. Il `Traffic Shaper' - Come cambiare l'ampiezza di banda asseg�
nata
Il `traffic shaper' (limitatore di banda) � un driver per creare nuovi
dispositivi di rete. Tali dispositivi sono caratterizzati da una
limitazione del traffico consentito in base all'utente. Si basano
sulle interfacce fisiche di rete per l'effettiva trasmissione e
possono essere usati come percorsi di instradamento in uscita per il
traffico di rete.
Il `traffic shaper' � stato introdotto a partire da Linux 2.1.15 e
portato sul Linux-2.0.36 a partire dalla patch 2.0.36-pre-patch-2
distribuita da Alan Cox autore del driver e manutentore di Linux-2.0.
Il `traffic shaper' pu� essere compilato solo come modulo e viene
configurato tramite il programma shapecfg con comandi simili ai
seguenti:
shapecfg attach shaper0 eth1
shapecfg speed shaper0 64000
Tale dispositivo pu� controllare solo l'ampiezza di banda del traffico
in uscita, dato che i pacchetti sono trasmessi attraverso lo `shaper'
secondo le tabelle di instradamento. Dunque una funzionalit� di
"instradamento secondo l'indirizzo sorgente" potrebbe aiutare a
limitare lo spreco di banda da parte di specifici host usando un
router Linux.
Linux-2.1 supporta gi� tale tipo di instradamento, se � necessario su
un Linux-2.0 si pu� utilizzare la patch di Mike McLagan, presso
ftp.invlogic.com. Si pu� fare riferimento a
Documentation/networking/shaper.txt per ulteriori informazioni sul
`traffic shaper'.
Se si desidera provare un limitatore (sperimentale) per i pacchetti in
entrata, c'� rshaper-1.01 (o una versione pi� recente), da
ftp.systemy.it <
ftp://ftp.systemy.it/pub/develop>.
6.16. Instradamento (routing) in Linux-2.2
Le versioni pi� recenti di Linux-2.1 offrono un sacco di flessibilit�
nella gestione dell'instradamento. Sfortunatamente dovete aspettare la
prossima versione di questo howto o andare a leggere i sorgenti del
kernel.
6.17. ISDN
La "rete digitale di servizi integrati" (Integrated Services Digital
Network - ISDN) consiste in una serie di standard che definiscono una
rete di trasmissione dati a commutazione di circuito per uso generale.
Una "chiamata" ISDN crea un servizio di trasmissione dati punto-a-
punto sincrono verso la destinazione. La rete ISDN in genere passa su
una connessione ad alta velocit� che viene poi suddivisa in un numero
di canali discreti (i "canali B"), che portano effettivamente i dati
dell'utente, e un "canale D" che viene usato per mandare le
informazioni di controllo ai commutatori ISDN, per effettuare le
chiamate e altre funzioni. In Australia, per esempio, ISDN pu�
viaggiare su una connessione a 2 megabit per secondo che viene
suddiviza in 30 canali B discreti da 64 kilobit per secondo e un
canale D sempre da 64 kilobit. Qualunque numero di canali pu� essere
usato in ogni momento e in ogni combinazione. Si possono per esempio
effettuare 30 chiamate a 30 destinazioni diverse, ciascuna di queste a
64 Kbit, oppure 15 chiamate a 15 destinazioni, ciascuna da 128 Kbit
(due canali per chiamata), oppure si pu� fare un numero minore di
chiamate e lasciare il resto delle linee inattive. Un canale pu�
essere usato per chiamate entranti o uscenti. L'intenzione originale
di ISDN era quella di permettere alle aziende di telecomunicazione di
fornire un singolo servizio dati che potesse portare sia la
comunicazione telefonica (tramite la digitalizzazione della voce) sia
i servizi dati verso le case e gli uffici degli utenti senza
richiedere speciali modifiche alla configurazione.
Ci sono diversi modi per connettere il proprio computer ad un servizio
ISDN. Un modo � quello di usare una perifericha chiamata "Adattatore
di Terminale", che si inserisce nell'"Unit� di Terminazione di Rete"
che viene installata dalla propria compagnia di telecomucazioni quando
consegna il servizio ISDN. Tale Adattatore di Terminale offre in
uscita svariate interfacce seriali. Una di queste interfacce viene
usata per dare comandi al fine di effettuare le chiamate e la
configurazione, mentre le altre sono connesse alle interfacce di rete
che, una volta connesse, useranno i circuiti dati. In questa
situazione Linux lavora senza alcun bisogno di modifiche, basta
trattare la porta dell'adattatore di terminale come se fosse una
qualsiasi interfaccia seriale. Un'alternativa, che � quella per cui il
supporto ISDN di Linux � stato progettato, � installare una scheda
ISDN nella propria macchina Linux e permettere al software di sistema
di gestire i protocolli ed effettuare le chiamate.
Opzioni di compilazione del kernel:
ISDN subsystem --->
<*> ISDN support
[ ] Support synchronous PPP
[ ] Support audio via ISDN
< > ICN 2B and 4B support
< > PCBIT-D support
< > Teles/NICCY1016PC/Creatix support
L'implementazione Linux di ISDN supporta un certo numero di schede
ISDN diverse. Queste sono quelle elencate nelle opzioni di
configurazione del kernel:
� ICN 2B and 4B
� Octal PCBIT-D
� Schede ISDN Teles e compatibili
Alcune di queste schede richiedono, per funzionare, che venga loro
scaricato del software aggiuntivo. C'� un programma separato che
svolge questa funzione.
Maggiori dettagli su come configurare il supporto ISDN per Linux sono
disponibili nella directory /usr/src/linux/Documentation/isdn/. Una
FAQ (Frequently Asked Questions) dedicata a isdn4linux (ISDN per
Linux) � disponibile presso www.lrz-muenchen.de <
http://www.lrz-
muenchen.de/~ui161ab/www/isdn/>. (Cliccando sulla bandiera inglese si
ottiene la versione inglese).
Una nota su PPP. La suite di protocolli PPP funziona sia su linee
seriali asincrone che sincrone. Il server PPP distribuito normalmente
per Linux `pppd' funziona solo in modo asincrono. Se si vuole far
girare i protocolli PPP sul proprio sevizio ISDN occorre una versione
modificata a tal fine. I dettagli su dove trovare tale programma fanno
parte della documentazione presentata qui sopra.
6.18. PLIP per Linux-2.0
I nomi delle periferiche PLIP sono `plip0', `plip1 e plip2.
Opzioni di compilazione del kernel:
Networking options --->
<*> PLIP (parallel port) support
plip (Parallel Line IP), � come SLIP per il fatto che viene usato per
avere una connessione di rete punto-a-punto tra due macchine, solo che
� progettato per usare la porta parallela dei calcolatori invece della
porta seriale (lo schema del cavo � incluso pi� avanti in questo
stesso documento). Siccome � possibile trasmettere pi� di un bit per
volta con la porta parallela, con plip si pu� ottenere una velocit� di
trasferimento dati pi� alta di quella che si ottiene con la porta
seriale. Inoltre, anche le porte parallele pi� semplici possono essere
usate, mentre per usare le porte seriali a velocit� accettabili
occorre comperare delle UART 16550AFN che sono relativamente pi� care.
PLIP usa molto tempo macchina in confronto ad una connessione seriale
e molto probabilmente non � una buona soluzione per chi pu� trovare
delle schede ethernet economiche. PLIP ha per� il grosso vantaggio di
funzionare quando non si ha altro a disposizione, e di farlo
abbastanza bene. Ci si pu� aspettare una velocit� di trasferimento
dati di 20 kB per secondo quando la connessione funziona a regime.
Il driver PLIP � in competizione con il driver per la stampante
parallela per quanto riguarda l'accesso alla periferica fisica. Se si
desidera utilizzare entrambi i driver bisogna compilarli sotto forma
di modulo per poter scegliere quali interfacce parallele dedicare a
PLIP e quali alla stampante. Si veda il Modules-HOWTO <Modules-
HOWTO.html> per avere ulteriori informazioni riguardo alla
configurazione dei moduli.
Si noti che alcuni portatili usano delle porte che non funzionano con
PLIP perch� non permettono alcune combinazioni di segnali necessarie
per il funzionamento di PLIP, ma che non vengono usate dalle
stampanti.
L'interfaccia plip di Linux � compatibile con il packet-driver PLIP
della Crynwyr, questo significa che si pu� connettere una macchina DOS
ad una macchina Linux tramite plip, a patto che la macchina DOS abbia
qualche tipo di software tcp/ip.
Nella serie 2.0 di kernel Linux le periferiche PLIP sono mappate sulle
porte di I/O e sulle linee di interruzione in questo modo:
dispositivo indirizzo I/O IRQ
----------- ------------- -----
plip0 0x3BC 5
plip1 0x378 7
plip2 0x278 2
Se le porte parallele usate non corrispondono alle combinazioni qui
sopra, si pu� cambiare il numero di interrupt associato ad una porta
tramite il comando ifconfig usando il parametro `irq'. Bisogna
assicurarsi di abilitare la generazione di interrupt sulla porta
stampante dalla configurazione del BIOS se si vuole usare PLIP. Come
alternativa, si possono specificare le opzioni `io=' e `irq=' sulla
linea di comando di insmod, se si usano i moduli. Ad esempio:
root# insmod plip.o io=0x288 irq=5
Il funzionamento di PLIP � controllato tramite due timeout, i cui
valori di default probabilmente vanno bene nella maggior parte dei
casi. Potrebbe essere necessario incrementare i valori nel caso si
usi un elaboratore particolarmente lento, nel qual caso bisogna
aumentare il valore di timeout dell'altro elaboratore. Esiste un
programma, plipconfig, che permette di cambiare tali valori dei timer
senza dover ricompilare il kernel; tale programma � presente in tutte
le maggiori distribuzioni Linux.
Per configurare un interfaccia plip � necessario lanciare i seguenti
comandi (o aggiungerli ai propri script di inizializzazione):
root# /sbin/ifconfig plip1 plip_locale pointopoint plip_remoto
root# /sbin/route add plip_remoto plip1
Nell'esempio viene usata la porta all'indirizzo di I/O 0x378;
plip_locale e plip_remoto sono i nomi o gli indirizzi IP usati nella
connessione PLIP. Personalmente uso metterli tra le voci del mio
/etc/hosts:
# nomi per plip
192.168.3.1 plip_locale
192.168.3.2 plip_remoto
Il parametro pointopoint ha lo stesso significato che in SLIP,
specifica cio� l'indirizzo della macchina all'altro capo della
connessione.
In quasi tutti i casi si pu� trattare un'interfaccia plip come fosse
un'interfaccia SLIP, eccetto che n� dip n� slattach possono o debbono
venir usati.
Ulteriori informazioni su PLIP si possono trovare in `PLIP mini-
HOWTO'.
6.19. PLIP per Linux-2.2
Durante lo sviluppo delle versioni 2.1 del kernel, il supporto per la
porta parallela � stato migliorato.
Opzioni di compilazione del kernel:
General setup --->
[*] Parallel port support
Network device support --->
<*> PLIP (parallel port) support
Il nuovo codice per PLIP si comporta come quello vecchio (usa gli
stessi comandi ifconfig e route visti nella sezioni precedente) ma
l'inizializzazione della periferica � diversa a causa del supporto per
le porte parallele avanzate.
In modo simile a quanto accade per le schede Ethernet, il primo
dispositivo PLIP riconosciuto dal kernel viene chiamato `plip0'. La
porta parallela effettivamente utilizzata � una di quelle disponibili,
come mostrato in /proc/parport. Ad esempio se sul proprio sistema �
presente una sola porta parallela, ci sar� una sola sottodirectory:
/proc/parport/0.
Nel caso il proprio kernel non riconosca da s� la linea di interrupt
usata dalla porta, il comando `insmod plip' non andr� a buon fine. In
questo caso sar� sufficiente scrivere il valore corretto in
/proc/parport/0/irq e lanciare nuovamente insmod.
Informazioni esaurienti sulla gestione della porta parallela sono
disponibili nel file Documentation/parport.txt nei sorgenti del
kernel.
6.20. PPP
I nomi delle periferiche PPP sono `ppp0', `ppp1 eccetera. I
dispositivi sono numerati sequenzialmente, ove il primo di essi riceve
il numero `0'.
Opzioni di compilazione del kernel:
Networking options --->
<*> PPP (point-to-point) support
La configurazione di PPP � coperta ad un buon livello di dettaglio nel
documento PPP-HOWTO <PPP-HOWTO.html>.
6.20.1. Gestire una connessione permanente ad internet con pppd .
Se si � abbastanza fortunati da avere una connessione semi-permanente
con internet e si desidera che la propria macchina ristabilisca
automaticamente la connessione PPP quando questa viene interrotta,
ecco un semplice trucco per riuscirci.
Configurare PPP in modo che possa essere avviato dall'utente root
tramite il seguente comando:
# pppd
Ci si assicuri di avere attivato l'opzione `-detach' nel proprio file
/etc/ppp/options. Poi si inserisca la linea seguente nel proprio file
/etc/inittab, in fondo, dove si trovano le definizioni per getty:
pd:23:respawn:/usr/sbin/pppd
Questa linea fa s� che il programma init faccia partire il programma
pppd e lo controlli, facendolo ripartire automaticamente nel caso in
cui termini.
6.21. SLIP client
Le periferiche SLIP sono chiamate `sl0', `sl1' eccetera, dove alla
prima periferica viene assegnato lo `0', e alle altre i numeri
successivi, nell'ordine in cui vengono configurate.
Opzioni di compilazione del kernel:
Network device support --->
[*] Network device support
<*> SLIP (serial line) support
[ ] CSLIP compressed headers
[ ] Keepalive and linefill
[ ] Six bit SLIP encapsulation
SLIP (Serial Line Internet Protocol) permette di usare tcp/ip su una
linea seriale, sia si tratti di una linea telefonica con collegato un
modem, o una linea dedicata di qualche altro tipo. Naturalmente, per
usare SLIP occorre accedere ad uno SLIP-server nella propria area.
Molte universit� e molte aziende in tutto il mondo offrono accesso
tramite SLIP.
SLIP usa la porta seriale del calcolatore per trasportare pacchetti
IP. Per fare questo deve prendere controllo dell'interfaccia seriale.
Gi� sappiamo che le periferiche SLIP si chiamano sl0, sl1 eccetera, ma
come corrispondono questi nomi a quelli delle porte seriali? Il
codice di rete usa una chiamata ioctl (I/O control) per trasformare
una porta seriale in una periferica SLIP. Ci sono due programmi che
svolgono questo compito, chiamati dip e slattach.
6.21.1. dip
dip (Dialup IP) � un simpatico programma che pu� assegnare la velocit�
della porta seriale, dire al modem di chiamare l'altro estremo della
connessione, autenticarsi nel server remoto e ascoltare i messaggi
mandati dal server al fine di estrarre informazioni quale l'indirizzo
IP. Il programma invoca poi le chiamate ioctl necessarie per
trasformare l'interfaccia seriale in una porta SLIP. dip ha una
potente funzionalit� di "scripting", ed � questo che viene sfruttato
per automatizzare la procedura di collegamento.
Si pu� trovare il programma su: sunsite.unc.edu
<
ftp://sunsite.unc.edu/pub/Linux/system/Network/serial/dip/dip337o-
uri.tgz>.
Per installarlo, usare questi comandi:
user% tar xvzf dip337o-uri.tgz
user% cd dip-3.3.7o
user% vi Makefile
root# make install
Il Makefile assume l'esistenza di un gruppo chiamato uucp, ma questo
pu� essere impostato a dip oppure a SLIP, in base alla propria
configurazione.
6.21.2. slattach
slattach, a differenza di dip, � un programma molto semplice, facile
da usare, ma non cos� sofisticato come dip. Non ha la capacit� di
"scripting", e tutto quello che fa � configurare la porta seriale come
interfaccia SLIP. Il programma assume che si abbia tutta
l'informazione necessaria, e che la comunicazione seriale sia gi�
stata stabilita prima di invocare slattach. Questo programma � ideale
da usare quando si ha una connessione permanente con il proprio
server, come un cavo fisico o una linea dedicata.
6.21.3. Come scegliere se usare l'uno o l'altro?
Conviene usare dip quando il collegamento verso il server SLIP � un
modem telefonico, o qualche altro tipo di collegamanto temporaneo.
Conviene usare slattach quando si ha una linea dedicata, o un cavo
fisico, tra la propria macchina e il server, perch� in questi casi non
occorre nessuna azione speciale per far funzionare il collegamento.
Vedere la sezione "connessione SLIP permanente" per avere ulteriori
informazioni.
La configurazione di SLIP � molto simile alla configurazione di una
interfaccia ethernet (vedere la sezione `Configurazione di un
interfaccia ethernet', pi� sopra). Nonostante ci�, ci sono alcune
differenze chiave.
Prima di tutto, le connessioni SLIP sono diverse dalle reti ethernet,
in quanto ci sono sempre solo due calcolatori sulla rete, uno ad ogni
estremo della connessione. A differenza della ethernet che �
disponibile all'uso non appena passati i cavi, con SLIP, a seconda del
tipo di collegamento che si usa, pu� essere necessario inizializzare
la propria connessione di rete in qualche modo speciale.
Se si usa dip, questo non verr� solitamente effettuato all'avvio della
macchina, ma qualche tempo dopo, quando si � pronti ad usare la
connessione ed � possibile automatizzare questa procedura. Se si usa
slattach, probabilmente si vorr� aggiungere una sezione al proprio
file rc.inet1. Questo verr� descritto tra poco.
Ci sono due tipi principali di server SLIP: quelli che forniscono un
indirizzo IP dinamico, e quello che lo forniscono statico. Quasi tutti
i server SLIP chiederanno il nome utente e la password quando viene
stabilita la connessione. dip pu� gestire automaticamente
l'autenticazione.
6.21.4. SLIP server statico con linea telefonica e DIP.
Un server SLIP statico � quello con il quale si riceve un indirizzo IP
che � solo proprio. Ogni volta che ci si connette con il server, la
porta viene configurata con lo stesso indirizzo. Il server statico
risponder� alla chiamata del modem, probabilmente chieder� nome utente
e password, e poi instrader� tutti i pacchetti destinati all'indirizzo
corrispondente attraverso quella connessione. Se si ha un server
statico, probabilmente si desiderer� mettere in /etc/hosts le
associazioni tra nome della macchina e indirizzo IP (che sar� noto).
Si dovrebbero anche sistemare altri file, cio�: rc.inet2, host.conf,
resolv.conf, /etc/HOSTNAME ed rc.local. Si ricordi che quando si
configura rc.inet1 non occorre aggiungere alcun comando speciale per
la connessione SLIP, poich� dip fa gi� tutto il lavoro impegnativo di
configurare l'interfaccia. Occorrer� dare a dip le informazioni
appropriate e lui configurer� l'interfaccia da solo dopo aver detto al
modem di stabilire la chiamata e dopo aver autenticato il chiamante
presso il server SLIP.
Se il server SLIP che si usa funziona cos�, allora si pu� passare
direttamente alla sezione `Uso di Dip' per imparare come configurare
il programma correttamente.
6.21.5. SLIP server dinamico con linea telefonica e DIP.
Un server SLIP dinamico � quello che assegna un indirizzo IP
casualmente, da un insieme di indirizzi possibili, tutte le volte che
ci si collega. Questo significa che non c'� alcuna garanzia che si
avr� un particolare indirizzo ogni volta. Significa anche che lo
stesso indirizzo pu� essere usato da qualcun altro dopo che si �
terminata la connessione. L'amministratore di rete che ha configurato
il server SLIP avr� ricevuto un gruppo di indirizzi da usare per il
server: quando il server riceve una nuova chiamata sceglie il primo
numero non utilizzato, guida l'utente nella procedura di
autenticazione e poi stampa un messaggio di benvenuto che contiene
l'indirizzo IP da usarsi per la durata della chiamata.
La configurazione per usare questo tipo di server � simile alla
configurazione nel caso di un server statico, tranne per il fatto che
occorre aggiungere un passo, durante il quale si ottiene l'indirizzo
IP che il server ha scelto per questa sessione e si configura la
periferica SLIP con quell'indirizzo.
Ancora una volta, dip si occupa dei dettagli laboriosi. Le nuove
versioni sono abbastanza furbe da recuperare automaticamente
l'indirizzo IP dal messaggio di benvenuto e salvarlo per configurare
l'interfaccia SLIP, in aggiunta a gestire il processo di
autenticazione.
Se il server SLIP che si usa funziona cos�, allora si pu� passare
direttamente alla sezione `Uso di Dip' per imparare come configurare
il programma correttamente.
6.21.6. Uso di DIP.
Come spiegato in precedenza, dip � un programma potente che pu�
semplificare ed automatizzare il processo di chiamare il server SLIP,
autenticarsi, iniziare la connessione e invocare i comandi ifconfig e
route appropriati per la propria interfaccia.
Fondamentalmente, per usare dip bisogna scrivere uno "script", che �
in pratica una lista di comandi comprensibili a dip che dicono al
programma come eseguire ogni azione che si vuole esegua. Si veda il
file sample.dip che viene distribuito con dip per avere un'idea di
come funziona. dip � un programma abbastanza potente, con molte
opzioni; piuttosto che descriverle tutte qui, si consiglia di guardare
la pagina del manuale, il file README e gli esempi che fanno parte del
pacchetto dip.
Si noter� che lo script sample.dip assume che si sta usando un server
SLIP statico, cio� che si conosca il proprio indirizzo IP in anticipo.
Per quando si usa un server dinamico, le versioni pi� recenti di dip
includono un comando che si pu� usare per leggere automaticamente
l'indirizzo che il server dinamico ha assegnato e configurare di
conseguenza la periferica SLIP. L'esempio seguente � una versione
modificata del file sample.dip che viene distribuito con dip337j-
uri.tgz, ed � probabilmente un buon punto di partenza. Si pu� salvare
questo script come /etc/dipscript e modificarlo per rispecchiare la
propria configurazione.
#
# sample.dip Programma di supporto alla connessione telefonica.
#
# Questo file mostra (dovrebbe mostrare) come usare DIP
# Questo file dovrebbe funzionare con server dinamici tipo "Annex".
# Se si usa un server statico, usare il file "sample.dip" che
# � distribuito con il pacchetto dip337-uri.tgz.
#
#
# Version: @(#)sample.dip 1.40 07/20/93
#
# Author: Fred N. van Kempen, <
[email protected]>
#
main:
# Predisporre il nome e indirizzo dell'altro estremo.
# La mia macchina remota si chiama 'xs4all.hacktic.nl' (== 193.78.33.42)
get $remote xs4all.hacktic.nl
# Assegnare la netmask su sl0 a 255.255.255.0
netmask 255.255.255.0
# Assegnare la porta specificata e la velocit�.
port cua02
speed 38400
# Reinizializza il modem e la linea del terminale
# Questo causa problemi ad alcune persone!
reset
# Nota: i valori di errore predefiniti sono:
# 0 - OK
# 1 - CONNECT
# 2 - ERROR
#
# Si possono cambiare cercando "addchat()" usando "grep" su *.c...
# Prepara la chiamata
send ATQ0V1E1X4\r
wait OK 2
if $errlvl != 0 goto modem_trouble
dial 555-1234567
if $errlvl != 1 goto modem_trouble
# Siamo connessi. Autentichiamoci.
login:
sleep 2
wait ogin: 20
if $errlvl != 0 goto login_trouble
send MYLOGIN\n
wait ord: 20
if $errlvl != 0 goto password_error
send MYPASSWD\n
loggedin:
# Adesso siamo autenticati.
wait SOMEPROMPT 30
if $errlvl != 0 goto prompt_error
# Ordiniamo al server di andare in modo SLIP
send SLIP\n
wait SLIP 30
if $errlvl != 0 goto prompt_error
# Recuperiamo l'indirizzo IP dal server
# Si assume che dopo aver detto al server di passare in SLIP, questo
# stampi il nostro indirizzo.
get $locip remote 30
if $errlvl != 0 goto prompt_error
# Assegnamo i parametri operativi SLIP
get $mtu 296
# Assicuriamoci di dare "route add -net default xs4all.hacktic.nl"
default
# Salutiamo e via!
done:
print CONNECTED $locip ---> $rmtip
mode CSLIP
goto exit
prompt_error:
print TIME-OUT waiting for sliplogin to fire up...
goto error
login_trouble:
print Trouble waiting for the Login: prompt...
goto error
password:error:
print Trouble waiting for the Password: prompt...
goto error
modem_trouble:
print Trouble occurred with the modem...
error:
print CONNECT FAILED to $remote
quit
exit:
exit
L'esempio precedente assume che si stia chiamando un server SLIP
dinamico. Se si chiama un server statico, allora il file sample.dip
del pacchetto dip337j-uri.tgz dovrebbe funzionare senza alcuna
modifica.
Quando a dip viene passato il comando get $local, il programma cerca
una stringa che assomigli ad un indirizzo IP all'interno del testo che
arriva dall'altra estremit� della connessione; cerca cio� delle
stringhe di numeri separate dal carattere `.'. Questa modifica �
stata inserita specificamente per i server SLIP dinamici, in modo da
automatizzare il processo di lettura dell'indirizzo IP fornito dal
server.
L'esempio precedente creer� automaticamente una regola di
instradamento di default attraverso la connessione SLIP. Se questo non
� quello che si desidera, per esempio perch� si vuole avere un
instradamento di default sulla propria ethernet, allora occorre
rimuovere il comando default dallo script. Dopo che questo script ha
terminato l'esecuzione, chi provasse ad invocare ifconfig vedr� che
una periferica sl0 esiste nel sistema: si tratta della porta SLIP. Se
occorre, si pu� modificare la configurazione di tale interfaccia
manualmente, dopo che il comando dip ha terminato di girare, usando i
comandi ifconfig e route.
Si noti che dip permette di scegliere un certo numero di protocolli
usando il comando mode, il pi� comune esempio al proposito � cSLIP,
per abilitare la compressione di SLIP. Si noti che entrambi gli
estremi della connessione devono essere d'accordo, e bisogna
assicurarsi che qualunque protocollo si scelga questo corrisponda con
quello che viene attivato dal server.
L'esempio precedente � abbastanza robusto, e dovrebbe gestire
correttamente la maggior parte degli errori. Si faccia riferimento
alla pagina del manuale di dip per avere ulteriori informazioni. Si
pu�, ovviamente, fare di pi�, come scrivere uno script che faccia cose
come richiamare il server se non riesce a collegarsi entro un certo
tempo limite, o provare una lista di server, se si ha accesso a pi� di
uno di essi.
6.21.7. Connessione SLIP permanente con linea dedicata e slattach.
Se si possiede un cavo che collega due macchine, o se si � abbastanza
fortunati da avere una linea dedicata o qualche altro tipo di
connessione seriale permanente tra la propria macchina e un'altra,
allora non occorre incontrare tutte le difficolt� relative all'uso di
dip al fine di preparare la propria connessione. slattach � un
programma molto semplice da usare che offre una funzionalit�
sufficiente a configurare la propria connessione.
Siccome la connessione sar� permanente, si vorranno aggiungere alcuni
comandi al proprio file rc.inet1. In sintesi, tutto quello che bisogna
fare per avere una connessione permanente � assicurarsi di configurare
la periferica seriale alla velocit� corretta, e far passare la seriale
alla modalit� SLIP. slattach permette di fare questo lavoro con un
comando solo. Le seguenti linee vanno aggiunte al proprio file
rc.inet1:
#
# Attiva una connessione SLIP statica su linea dedicata
#
# configura /dev/cua0 per 19.2kbps e cslip
/sbin/slattach -p cslip -s 19200 /dev/cua0 &
/sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
#
# Fine configurazione SLIP statico.
Dove:
IPA.IPA.IPA.IPA
rappresenta il proprio indirizzo IP.
IPR.IPR.IPR.IPR
rappresenta l'indirizzo IP del calcolatore remoto.
slattach alloca la prima periferica SLIP disponibile all'interfaccia
seriale specificata. slattach parte da sl0, quindi il primo comando
slattach connette la periferica SLIP sl0 alla porta seriale
specificata. La seguente invocazione collegher� sl1, eccetera.
slattach permette di configurare uno tra diversi protocolli con
l'argomento -p. In questo caso viene usato SLIP oppure cSLIP, a
seconda se si voglia usare la compressione o no. Nota: i due capi
della connessione devono essere d'accordo se usare o meno la
compressione.
6.22. Server SLIP.
Se si possiede una macchina, magari connessa in rete, alla quale si
vuole che altri si connettano telefonicamente per accedere ai propri
servizi di rete, allora occorre configurare la propria macchina come
un server. Se si vuole usare SLIP come protocollo seriale, ci sono
attualmente tre possibilit� per configurare la propria macchina come
server SLIP. Personalmente preferirei la prima possibilit� che sto
per introdurre (sliplogin), in quanto sembra essere la pi� semplice da
configurare e capire. Presenter� in ogni caso un'introduzione a
ciascun metodo, in modo da permettere a tutti di fare la propria
scelta.
6.22.1. Server SLIP usando sliplogin .
sliplogin � un programma che pu� essere usato al posto della normale
shell di login per gli utenti SLIP che devono convertire il terminale
seriale in una linea di comunicazione SLIP. Il programma permette di
configurare la propria macchina Linux come un server di indirizzi
statici (dove gli utenti ricevono lo stesso indirizzo IP tutte le
volte che si connettono) oppure come un server di indirizzi dinamici
(dove gli utenti ricevono un indirizzo che puo� non essere lo stesso
della volta precedente).
Il chiamante si collegher� come si fa per il processo standard di
login: fornendo il proprio nome e utente e la password; ma dopo aver
autenticato l'utente, invece di una shell il sistema eseguir�
sliplogin. Il programma cercher� poi nel suo file di configurazione
(/etc/slip.hosts) una voce che corrisponda al nome di login
dell'utente. Se tale voce viene trovata, la linea viene configurata ad
8 bit e la "disciplina di linea" viene convertita a quella di SLIP.
Quando questo processo � completo, viene svolta l'ultima parte della
configurazione, nella quale sliplogin invoca uno script di shell che
configura l'interfaccia SLIP con i valori IP appropriati: indirizzo,
maschera di rete e informazioni di instradamento. Lo script viene di
solito chiamato /etc/slip.login, ma si possono creare script
personalizzati per gli utenti che hanno bisogno di un'inizializzazione
particolare, come si fa con getty. Questi script si chiameranno
/etc/slip.login.loginname e verranno eseguiti al posto di quello di
default per gli utenti con esigenze particolari.
Ci sono tre o quattro file che occorre configurare perch� sliplogin
funzioni; mostrer� ora come ottenere il software e come ciascuno di
questi file viene configurato. I file coinvolti sono:
� /etc/passwd, per gli account degli utenti telefonici.
� /etc/slip.hosts, per fornire le informazioni specifiche a ciascun
utente.
� /etc/slip.login, che gestisce la configurazione dell'instradamento
per l'utente.
� /etc/slip.tty, necessario solo se il server viene configurato per
l'allocazione dinamica degli indirizzi. Tale file contiene una
tabella di indirizzi per l'allocazione.
� /etc/slip.logout, contiene i comandi per fare pulizia dopo che un
utente ha messo gi� o si � scollegato.
6.22.1.1. Dove ottenere sliplogin
� probabile che il pacchetto sliplogin sia gi� installato come parte
della propria distribuzione, se questo non accade, sliplogin si pu�
trovare su: sunsite.unc.edu
<
ftp://sunsite.unc.edu/pub/linux/system/Network/serial/sliplogin-2.1.1.tar.gz>.
Il pacchetto contiene il sorgente, dei binari precompilati e la pagina
del manuale.
Per assicurarsi che solo gli utenti autorizzati possano eseguire il
programma sliplogin, bisognerebbe aggiungere una voce simile alla
seguente nel proprio file /etc/group:
..
slip::13:radio,fred
..
Quando si installa il pacchetto sliplogin, il Makefile cambier� il
gruppo del programma sliplogin in modo che sia slip. Questo significa
che solo gli utenti che appartengono a tale gruppo saranno in grado di
eseguire il programma. L'esempio precedente permetterebbe solo agli
utenti radio e fred di eseguire sliplogin.
Per installare gli eseguibili nella directory /sbin e la pagina del
manuale nella sezione 8, si fa cos�:
# cd /usr/src
# gzip -dc .../sliplogin-2.1.1.tar.gz | tar xvf -
# cd sliplogin-2.1.1
# <..si modifichi il Makefile se non si usano le shadow password..>
# make install
Se si vogliono ricompilare gli eseguibili prima di installare, si
aggiunga un make clean prima del make install. Se si vogliono
installare gli eseguibili in qualche altra directory, occorre
modificare la regola install del Makefile.
Si legga il file README del pacchetto per ulteriori informazioni.
6.22.1.2. Configurazione di /etc/passwd per gli host Slip
Di solito si creano dei nomi utente speciali in /etc/passwd per gli
utenti Slip. Una convenzione seguita comunemente consiste nell'usare
il nome del calcolatore chiamante preceduta da una `s' maiuscola.
Quindi, per esempio, se il calcolatore chiamante si chiama radio la
voce in /etc/passwd sar� simile a questa:
Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin
In effetti, non ha nessuna importanza come viene chiamato l'utente;
basta che sia significativo per chi amministra il sistema.
Nota: il chiamante non ha bisogno di una directory home, in quanto non
usufruir� di un interprete di comandi sulla macchina server, perci�
/tmp � una buona scelta. Si noti anche che il programma sliplogin
viene usato al posto della shell di login.
6.22.1.3. Configurazione di /etc/slip.hosts
Il file /etc/slip.hosts � quello che viene letto da sliplogin alla
ricerca di voci corrispondenti al nome di login, al fine di ottenere i
dettagli di configurazione per questo calcolatore chiamante. Questo �
il file in cui si specificano l'indirizzo IP e la maschera di rete da
assegnare al chiamante e che saranno configurati per questo uso. Due
voci esemplificative per due calcolatori, uno con configurazione
statica (radio) e uno con configurazione dinamica (albert) sono le
seguenti:
#
Sradio 44.136.8.99 44.136.8.100 255.255.255.0 normal -1
Salbert 44.136.8.99 DYNAMIC 255.255.255.0 compressed 60
#
Le voci in /etc/slip.hosts consistono dei seguenti campi:
1. il nome di login del chiamante.
2. l'indirizzo ip del server, cio� di questo calcolatore.
3. l'indirizzo IP da assegnare al chiamante. Se questo campo vale
DYNAMIC, allora l'indirizzo sar� allocato in base alle informazioni
contenute nel file /etc/slip.tty, presentato pi� avanti. Nota:
occorre usare almeno la versione 1.3 di sliplogin perch�
l'assegnazione dinamica funzioni.
4. la maschera di rete per la macchina chiamante, in notazione
decimale con punti. Per esempio, 255.255.255.0 per una classe C.
5. il modo SLIP, che permette di abilitare o disabilitare la
compressione e altre caratteristiche. I valori possibili sono
"normal" e "compressed".
6. Un parametro di timeout che specifica per quanto tempo la linea pu�
rimanere inattiva (senza trasmissione di pacchetti) prima che venga
automaticamente scollegata. Un valore negativo disabilita questa
funzionalit�.
7. argomenti opzionali.
Nota: per i campi 2 e 3 si possono usare sia i nomi degli host che gli
indirizzi IP in notazione decimale. Se si usano i nomi, questi nomi
devono essere risolubili, altrimenti lo script fallir� quando verr�
invocato. Si pu� verificare se il nome viene risolto provando a fare
telnet verso il nome: se si riceve il messaggio `Trying
nnn.nnn.nnn...', allora il nome viene correttamente risolto; se si
riceve il messaggio `Unknown host', il nome non viene risolto. Se il
nome non viene risolto bisogna usare l'indirizzo in notazione decimale
con punti oppure bisogna sistemare la configurazione del risolutore
(si veda la sezione sulla risoluzione dei nomi).
I modi SLIP pi� comuni sono:
normal
per abilitare il normale modo SLIP non compresso.
compressed
per abilitare la compressione degli header con l'algoritmo di
van Jacobsen (cSLIP).
Ovviamente, questi due modi sono mutuamente esclusivi: si pu� usare
uno o l'altro. Per ulteriori informazioni sulle opzioni disponibili si
vedano le pagine del manuale.
6.22.1.4. Configurazione del file /etc/slip.login .
Quando sliplogin ha trovato una voce corretta in /etc/slip.hosts,
prover� ad eseguire il file /etc/slip.login per assegnare indirizzo e
maschera di rete all'interfaccia SLIP.
Il file /etc/slip.login di esempio distribuito con il pacchetto
sliplogin assomiglia al seguente:
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# file di login generico per una linea SLIP
# sliplogin lo invoca con i seguenti parametri:
# $1 $2 $3 $4, $5, $6 ...
# SLIPunit velocit� pid arcomenti da slip.hosts
#
/sbin/ifconfig $1 $5 pointopoint $6 mtu 1500 -trailers up
/sbin/route add $6
arp -s $6 <hw_addr> pub
exit 0
#
Si noter� che questo script usa i normali comandi ifconfig e route per
configurare l'indirizzo dell'interfaccia, l'indirizzo remoto e la sua
maschera di rete, e per creare un instradamento per il calcolatore
remoto attraverso l'interfaccia SLIP. Questi compiti sono gli stessi
che vanno svolti se si usa il comando slattach.
Si noti anche l'uso del Proxy ARP per assicurarsi che altri host sulla
stessa ethernet del server siano in grado di raggiungere il
calcolatore chiamante. Il campo <hw_addr> dovrebbe essere l'indirizzo
hardware della scheda ethernet del server. Se il server non � su una
rete ethernet questa linea pu� essere rimossa.
6.22.1.5. Configurazione del file /etc/slip.logout .
Quando cade la linea ci si vuole assicurare che la periferica seriale
ritorni al suo stato normale, in modo che altri possano collegarsi
correttamente. Questo compito viene svolto tramite il file
/etc/slip.logout. Questo file ha un formato abbastanza semplice e
viene chiamato con gli stessi argomenti di /etc/slip.login.
#!/bin/sh -
#
# slip.logout
#
/sbin/ifconfig $1 down
arp -d $6
exit 0
#
Tutto quello che fa � disattivare l'interfaccia, il che causer� la
rimozione delle informazioni di instradamento associate. Lo script usa
anche il comando arp per rimuovere le informazioni di proxy arp.
Ancora una volta, non occorre il comando arp nello script se il server
non ha una porta ethernet.
6.22.1.6. Configurazione di /etc/slip.tty .
Se si usa l'allocazione dinamica degli indirizzi IP (se qualche host �
configurato con la parola chiave DYNAMIC in /etc/slip.hosts), allora
bisogna configurare il file /etc/slip.tty perch� elenchi quali
indirizzi sono assegnati alle porte. Questo file occorre solo se si
vuole che il proprio server allochi dinamicamente gli indirizzi agli
utenti.
Il file � una tabella che elenca le periferiche di tipo tty che
supportano le connessioni SLIP entranti e gli indirizzi IP che devono
essere assegnati agli utenti che si collegano su quelle porte.
Il suo formato � il seguente:
# slip.tty mappatura terminale -> indirizzo IP per lo SLIP dinamico
# formato: /dev/tty?? xxx.xxx.xxx.xxx
#
/dev/ttyS0 192.168.0.100
/dev/ttyS1 192.168.0.101
#
Quello che questa tabella dice � che gli utenti che chiamano su
/dev/ttyS0 e che hanno l'indirizzo assegnato a DYNAMIC in
/etc/slip.hosts, devono ricevere l'indirizzo 192.168.0.100.
In questo modo occorre allocare solo un indirizzo per porta per tutti
gli utenti che non hanno bisogno di un indirizzo dedicato. Questo
aiuta a tenere al minimo il numero di indirizzi necessari, per evitare
sprechi.
6.22.2. Server Slip che usa dip .
Lasciatemi dire fin dall'inizio che alcune delle informazioni seguenti
vengono dalle pagine del manuale di dip, dove � spiegato brevemente
come far girare Linux come server SLIP. Bisogna anche fare attenzione
al fatto che le informazioni seguenti si basano sul pacchetto dip337o-
uri.tgz, e probabilmente non si applicano ad altre versioni di dip.
dip offre un modo operativo "di input", nel quale trova
automaticamente in /etc/diphosts la voce corrispondente all'utente che
lo ha chiamato, e configura la porta seriale come connessione SLIP in
base alle informazioni che trova nel file. Questo modo di inpupt
viene attivato chiamando il programma dip come diplogin. Per usare dip
come server SLIP, perci�, basta creare degli account che usino
diplogin come shell.
La prima cosa da fare � creare un link simbolico come segue:
# ln -sf /usr/sbin/dip /usr/sbin/diplogin
Poi occorre aggiungere le voci ai file /etc/passwd ed /etc/diphosts.
Le voci da creare sono fatte come segue.
Per configurare Linux come server SLIP con dip, occorre creare gli
account SLIP per gli utenti, dove il comando dip � usato in modalit�
input come shell. Una convenzione suggerita � quella di usare una `S'
maiuscola all'inizio dei nomi di account SLIP.
Una voce esemplificativa in /etc/passwd per un utente SLIP � la
seguente:
Sfredm:ij/SMxiTlGVCo:1004:10:Fred:/tmp:/usr/sbin/diplogin
^^ ^^ ^^ ^^ ^^ ^^ ^^
| | | | | | \__ diplogin come shell
| | | | | \_______ directory home
| | | | \____________ nome dell'utente
| | | \_________________ group ID
| | \_____________________ user ID
| \_______________________________ password crittata
\__________________________________________ nome utente slip
Dopo che l'utente si � collegato, il programma login, dopo aver
autenticato l'utente, eseguir� il comando diplogin. dip, quando viene
invocato con il nome di diplogin sa che deve assumere di essere usato
come shell dell'utente. La prima cosa che fa quando viene invocato
come diplogin � usare la funzione getuid() per sapere la UID
dell'utente che l'ha invocato. Poi cerca in /etc/diphosts la prima
voce che corrisponde o al nome della periferica che ha ricevuto la
chiamata oppure al nome utente, e si configura di conseguenza. Si pu�
creare un server che si comporti come server statico per alcuni utenti
e come server dinamico per gli altri, creando una voce nel file
diphosts per i primi e lasciando la configurazione di default per i
secondi.
dip, quando chiamato in "modo input" aggiunge automaticamente una voce
`Proxy-ARP', per cui non occorre preocuparsi di svolgere questo
compito manualmente.
6.22.2.1. Configurazione di /etc/diphosts
/etc/diphosts viene usato da dip per recuperare le informazioni di
configurazione per i calcolatori remoti. Tali calcolatori possono
essere utenti che si collegano telefonicamente a questa macchina
linux, oppure macchine che vengono chiamate da questa.
Il formato generale per /etc/diphosts � il seguente:
..
Suwalt::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
ttyS1::145.71.34.3:145.71.34.2:255.255.255.0:Dynamic ttyS1:CSLIP,296
..
I campi sono:
1. nome di login: come ritornato da getpwuid(getuid()), o il nome del
terminale.
2. inutilizzato: compatibile con /etc/passwd
3. indirizzo remoto: indirizzo IP dell'host chiamante, numerico o nome
4. indirizzo locale: indirizzo IP di questa macchina, numerico o nome
5. Netmask: in notazione decimale con punti
6. Commento: si scriva quello che si vuole
7. protocollo: Slip, CSlip eccetera
8. MTU: numero decimale
Un esempio di voce di /etc/net/diphosts relativa ad un utente SLIP
remoto potrebbe essere:
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:SLIP,296
che specifica una connessione SLIP con un indirizzo remoto di
145.71.34.1 e una MTU di 296. Oppure:
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
specifica una connessione SLIP con un indirizzo remoto di 145.71.34.1
e una MTU di 1006.
Perci�, tutti gli utenti ai quali si vuole dare un indirizzo IP
statico avranno una voce corrispondente in /etc/diphosts, mentre chi
deve ricevere un indirizzo dinamico associato alla porta che viene
chiamata deve avere una voce associata alla periferica invece che al
suo nome. Bisogna ricordarsi di creare almeno una voce per ciascuna
periferica tty alla quale gli utenti possono connettersi
telefonicamente, per assicurarsi che sia sempre disponibile una
configurazione appropriata indipendentemente da quale modem riceva la
chiamata.
Quando un utente si collegher�, ricever� una normale richiesta di
login e password, alla quale risponder� con il proprio nome utente e
la propria password. Se questi saranno corretti non si vedranno altri
messaggi e sar� sufficiente che ai due capi della connessione si passi
in modo SLIP per avere una connessione funzionante configurata con i
parametri del file diphosts.
6.22.3. Server SLIP che usa il pacchetto dSLIP .
Matt Dillon <
[email protected]> ha scritto un pacchetto che
non solo permette le connessioni SLIP entranti, ma anche quelle
uscenti. Il pacchetto di Matt � una combinazione di piccoli programmi
e di script che gestiscono le connessioni. Occorre avere tcsh
installata, perch� almeno uno degli script usa questa shell. Matt
fornisce nel pacchetto una copia binaria dell'utility expect, perch�
anch'essa � richiesta da uno degli script. Probabilmente occorrer� un
po' di esperienza con expect per far funzionare il pacchetto a proprio
piacimento, ma non conviene lasciarsi intimidire da ci�.
Matt ha scritto un buon insieme di istruzioni di installazione nel
file README, perci� non le ripeter� qui.
Il pacchetto dSLIP si pu� ottenere dal suo sito ftp:
apollo.west.oic.com
/pub/linux/dillon_src/dSLIP203.tgz
oppure da:
sunsite.unc.edu
/pub/Linux/system/Network/serial/dSLIP203.tgz
L'unica attenzione da porre � che occorre leggere il file README e
creare le voci in /etc/passwd ed /etc/group prima di fare make
install.
7. Altre Tecnologie di Rete
Le sottosezioni successive contengono informazioni specifiche a
particolari tecnologie di rete. Le informazioni contenute in queste
sezioni non si applicano necessariamente ad altri tipi di tecnologie
di rete. Gli argomenti sono presentati in ordine alfabetico.
7.1. ARCNet
I nomi delle periferiche ARCNet sono `arc0e', `arc1e', `arc2e'
eccetera, oppure `arc0s', `arc1s', `arc2s' eccetera. La prima scheda
che viene vista dal kernel prende il nome di `arc0e' o `arc0s' e le
altre prendono sequenzialmente gi altri nomi, nell'ordine in cui
vengono viste. La lettera finale indica se l'interfaccia usa un
incapsulamento dei pacchetti di tipo ethernet o il formato standard
secondo l'RFC1051.
Opzioni di compilazione del kernel:
Network device support --->
[*] Network device support
<*> ARCnet support
[ ] Enable arc0e (ARCnet "Ether-Encap" packet format)
[ ] Enable arc0s (ARCnet RFC1051 packet format)
Una volta che il kernel � stato propriamente ricompilato per
supportare le schede di rete ARCNet, la configurazione delle schede
stesse risulta abbastanza semplice.
Normalmente verranno usati comandi come:
root# ifconfig arc0e 192.168.0.1 netmask 255.255.255.0 up
root# route add -net 192.168.0.0 netmask 255.255.255.0 arc0e
Consiglio di riferirsi ai file
/usr/src/linux/Documentation/networking/arcnet.txt e
/usr/src/linux/Documentation/networking/arcnet-hardware.txt per avere
ulteriori informazioni sull'argomento.
Il supporto per ARCNet � stato sviluppato da Avery Pennarun,
[email protected].
7.2. Appletalk ( AF_APPLETALK )
Il protocollo Appletalk non ha bisogno di nomi particolari per i
dispositivi, in quanto usa i dispositivi di rete esistenti.
Opzioni di compilazione del kernel:
Networking options --->
<*> Appletalk DDP
Il supporto per Appletalk permette alle macchine Linux di lavorare
insieme alle reti Apple. Un uso importante di questa abilit� � la
condivisione di risorse, come stampanti e dischi, tra computer Linux e
Apple. Per utilizzare Appletalk occorre del software aggiuntivo, che
prende il nome di netatalk. Wesley Craig
[email protected] � il
rappresentante di un gruppo chiamato `Research Systems Unix Group' che
lavora all'Universit� del Michigan e ha prodotto il pacchetto
netatalk, contenente software che implementa lo stack di protocolli
Appletalk e alcuni utili programmi di servizio. Il pacchetto
netatalk. se non � supportato dalla vostra distribuzione, deve essere
recuperato dal suo sito tramite ftp: University of Michigan
<
ftp://terminator.rs.itd.umich.edu/unix/netatalk/>
Per compilare ed installare il pacchetto occorre fare qualcosa come:
user% tar xvfz .../netatalk-1.4b2.tar.Z
user% make
root# make install
Potrebbe essere utile editare il `Makefile' prima di chiamare make per
compilare effettivamente il programma. In particolare potrebbe essere
utile cambiare la variabile DESTDIR, che definisce dove verranno
successivamente installati i file. Una buona scelta � il valore
predefinito /usr/local/atalk.
7.2.1. Configurazione del software Appletalk.
La prima cosa che occorre fare perch� tutto funzioni correttamente �
assicurarsi che il proprio file /etc/services contenga le voci
appropriate. Le voci di cui si ha bisogno sono:
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
Il passo successivo consiste nella creazione dei file di
configurazione Appletalk nella directory /usr/local/atalk/etc (o in
quella in cui il pacchetto � stato installato).
Il primo file da creare � /usr/local/atalk/etc/atalkd.conf. Questo
file inizialmente deve contenere solo una linea, che specifica il nome
dell'interfaccia di rete sulla quale sono raggiungibili le macchine
Apple:
eth0
Il programma-demone Appletalk aggiunger� altri dettagli al file nel
momento in cui verr� eseguito.
7.2.2. Esportare un disco tramite Appletalk.
Si possono esportare dei filesystem Linux verso la rete, in modo che
le macchine Apple sulla rete possano accedervi.
A questo fine occorre configurare il file
/usr/local/atalk/etc/AppleVolumes.system. Un altro file di
configurazione, chiamato /usr/local/atalk/etc/AppleVolumes.default, ha
esattamente lo stesso formato e descrive quali filesystem verranno
visti dagli utenti che si collegano come "guest".
I dettagli riguardo la configurazione di questi file e le varie
opzioni si trovano nella pagina del manuale relativa al comando afpd.
Un semplice esempio potrebbe somigliare a:
/tmp Scratch
/home/ftp/pub "Area Pubblica"
L'esempio mostrato esporta il filesystem /tmp come volume AppleShare
con il nome di `Scratch', e la directory pubblica di ftp come volume
AppleShare con il nome di `Area Pubblica'. Specificare i nomi dei
volumi non � obbligatorio, in quanto il programma-demone li pu�
assegnare autonomamente, ma specificarli esplicitamente non ha alcuna
controindicazione.
7.2.3. Condividere le stampanti Linux usando Appletalk.
E abbastanza semplice condividere una stampante Linux con le macchine
Apple. A tal fine occorre far girare il programma papd, il demone per
il protocollo di accesso alle stampanti Appletalk (Printer Access
Protocol). Quando il programma viene fatto girare accetta le richieste
da parte delle macchine Apple e passa il lavoro di stampa al server
lpd locale per la stampa.
Occorre editare il file /usr/local/atalk/etc/papd.conf per configurare
il servizio. La sintassi del file � la stessa del pi� noto
/etc/printcap. Il nome che viene dato ad ogni definizione viene
registrato tramite il protocollo di gestione dei nomi Appletalk (NBP).
Una semplice configurazione potrebbe essere:
TricWriter:\
:pr=lp:op=cg:
Questo esempio rende disponibile sulla rete Appletalk una stampante
chiamata `TricWriter', e tutti i lavori accettati via rete verranno
stampati sulla stampante `lp' come definita nel file /etc/printcap,
usando lpd. La voce `op=cg' dice che l'utente Linux `cg' � l'operatore
della stampante.
7.2.4. Far partire il software appletalk.
A questo punto si dovrebbe essere pronti a provare la configurazione
di base. Il file rc.atalk distribuito con il pacchetto netatalk
dovrebbe funzionare bene per questa prova, perci� l'unica cosa che
resta da fare �:
root# /usr/local/atalk/etc/rc.atalk
e tutto dovrebbe essere attivo e girare correttamente. Non si
dovrebbero vedere messaggi di errore a questo punto, ma il software
mander� dei messaggi sulla console per indicare ogni passo che viene
fatto partire.
7.2.5. Provare il software appletalk.
Per verificare che il software stia funzionando correttamente occorre
andare ad una delle macchine Apple, attivare il menu principale,
scegliere "Chooser", poi "AppleShare". A questo punto il calcolatore
Linux dovrebbe apparire.
7.2.6. Alcune attenzioni con il software appletalk.
� Potrebbe esserci bisogno di far partire il supporto Appletalk prima
di configurare la rete IP. Se ci sono problemi a far partire i
programmi Appletalk, o se dopo che essi sono partiti si riscontrano
dei problemi sulla rete IP, occorre provare ad attivare il software
Appletalk prima di invocare /etc/rc.d/rc.inet1 file.
� Il server afpd (Apple Filing Protocol Daemon) scombina seriamente
il disco rigido. Sotto il mount-point, il server crea un paio di
directory: .AppleDesktop e Network Trash Folder. Poi, per ogni
directory che viene usata il server crea un .AppleDouble al suo
interno, per salvare le risorse eccetera. Perci� bisogna pensarci
due volte prima di esportare /: se alla fine si vuole ripulire il
disco ci vuole molto tempo.
� Il programma afpd si aspetta delle password in chiaro dai Mac. La
sicurezza potrebbe essere un problema, perci� bisogna fare molta
attenzione quando si fa girare questo demone su una macchina
collegata ad Internet: bisogna solo rimproverare se stessi se
qualcuno arreca dei danni alla macchina.
� gli strumenti di diagnostica esistenti, come netstat e ifconfig non
supportano Appletalk. L'informazione non trattata da questi
programmi � comunque disponibile nella directory /proc/net/, se se
ne ha bisogno.
7.2.7. Ulteriori informazioni.
Per una descrizione molto pi� dettagliata su come configurare
Appletalk per Linux occorre riferirsi alla pagina Linux Netatalk-HOWTO
di Anders Brownworth, presso thehamptons.com
<
http://thehamptons.com/anders/netatalk/>.
7.3. ATM
Werner Almesberger <
[email protected]> sta gestendo un
progetto per fornire a Linux il supporto per ATM (Asynchronous
Transfer Mode). Informazioni aggiornate sullo stato del progetto
possono essere ottenute da: lrcwww.epfl.ch
<
http://lrcwww.epfl.ch/linux-atm/>.
7.4. AX25 (AF_AX25)
I nomi di periferica AX.25 nei kernel versione 2.0.* sono `sl0',
`sl1' eccetera, mentre nei kernel 2.1.* sono `ax0', `ax1' eccetera.
Opzioni di compilazione del kernel:
Networking options --->
[*] Amateur Radio AX.25 Level 2
I protocolli AX25, Netrom e Rose sono ampiamente trattati nel
documento AX25-HOWTO <AX25-HOWTO.html>. Questi protocolli sono usati
dagli utenti di radio amatoriali per la sperimentazione di
trasmissione radio di pacchetti in tutto il mondo.
La maggior parte del lavoro di implementazione di questi protocolli �
stata fatta da Jonathan Naylor,
[email protected].
7.5. DECNet
Al supporto per DECnet si sta lavorando adesso. � plausibile che
appaia in uno degli ultimi kernel versione 2.1.
7.6. FDDI
I nomi delle periferiche FDDI sono `fddi0', `fddi1', `fddi2' eccetera.
La prima scheda rilevata dal kernel prende il nome `fddi0' e alle
altre vengono sequenzialmente assegnati gli altri nomi nell'ordine in
cui vengono riconosciute.
Larry Stefani,
[email protected], ha scritto un driver per le
schede FDDI per EISA e PCI della Digital.
Opzioni di compilazione del kernel:
Network device support --->
[*] FDDI driver support
[*] Digital DEFEA and DEFPA adapter support
Dopo aver ricompilato il kernel per supportare il driver FDDI, la
configurazione dell'interfaccia � praticamente identica alla
configurazione di una scheda ethernet. Occorre solo specificare il
nome dell'interfaccia FDDI nei comandi ifconfig e route.
7.7. Frame Relay
I nomi delle periferiche Frame Relay sono `dlci00', `dlci01' eccetera
per i dispositivi ad incapsulazione DLCI, mentre `sdla0', `sdla1'
eccetera sono i nomi per le periferiche FRAD.
Frame Relay � una nuova tecnologia di rete, progettata per adattarsi a
traffico di comunicazione dati che sia di natura intermittente. Ci si
connette ad una rete Frame Relay usando un FRAD (Frame Relay Access
Device). Il supporto Frame Relay per Linux usa IP-su-Frame-Relay,
come specificato nell'RFC 1490.
Opzioni di compilazione del kernel:
Network device support --->
<*> Frame relay DLCI support (EXPERIMENTAL)
(24) Max open DLCI
(8) Max DLCI per device
<*> SDLA (Sangoma S502/S508) support
Il supporto per Frame Relay e i relativi strumenti di configurazione
sono stati sviluppati da Mike McLagan,
[email protected].
Al momento i soli FRAD supportati sono i Sangoma Technologies
<
http://www.sangoma.com/> S502A, S502E e S508.
Dopo aver ricompilato il kernel, per configurare le periferiche FRAD e
DLCI occorrono gli strumenti di configurazione per Frame Relay. Questi
sono disponibili da ftp.invlogic.com
<
ftp://ftp.invlogic.com/pub/linux/fr/frad-0.15.tgz>. La compilazione
e l'installazione di questi strumenti non presenta alcun problema, ma
l'assenza di un Makefile nella directory principale fa s� che il
processo sia abbastanza "manuale":
user% tar xvfz .../frad-0.15.tgz
user% cd frad-0.15
user% for i in common dlci frad; make -C $i clean; make -C $i; done
root# mkdir /etc/frad
root# install -m 644 -o root -g root bin/*.sfm /etc/frad
root# install -m 700 -o root -g root frad/fradcfg /sbin
root# install -m 700 -o root -g root dlci/dlcicfg /sbin
Si noti che i comandi sopracitati usano la sintassi sh, se si usa una
shell di tipo csh, come tcsh, il ciclo for apparir� diversamente.
Dopo l'installazione di questi programmi occorre creare un file
/etc/frad/router.conf. Si pu� usare come esempio il seguente, che �
una versione modificata di uno dei file di esempio del pacchetto:
# /etc/frad/router.conf
# Questo � uno schema di configurazione per frame relay.
# Tutte le parole chiave sono presenti. I valori di default sono basati
# sul codice fornito con il driver DOS per il Sangoma S502A.
#
# Un '#' all'interno di una linea segna un commento
# Spazi e caratteri TAB sono ignorati
# Voci [] sconosciute e chiavi ignote sono ignorate
#
[Devices]
Count=1 # numero di periferiche da configurare
Dev_1=sdla0 # nome di periferica
#Dev_2=sdla1 # nome di periferica
# Se specificate qui, queste voci si applicano a tutte le periferiche,
# ma possono essere specificati valori alternativi per ciascuna scheda.
#
Access=CPE
Clock=Internal
KBaud=64
Flags=TX
#
# MTU=1500 # Massima lunghezza del IFrame trasmesso,
# il default � 4096
# T391=10 # valore di T391 5 - 30, il default � 10
# T392=15 # valore di T392 5 - 30, il default � 15
# N391=6 # valore di N391 1 - 255, il default � 6
# N392=3 # valore di N392 1 - 10, il default � 3
# N393=4 # valore di N393 1 - 10, il default � 4
# Se specificate qui, queste voci si applicano a tutte le schede
# CIRfwd=16 # CIR forward 1 - 64
# Bc_fwd=16 # Bc forward 1 - 512
# Be_fwd=0 # Be forward 0 - 511
# CIRbak=16 # CIR backward 1 - 64
# Bc_bak=16 # Bc backward 1 - 512
# Be_bak=0 # Be backward 0 - 511
#
#
# Configurazione specifica per ciascuna interfaccia
#
#
#
# La prima periferica � una Sangoma S502E
#
[sdla0]
Type=Sangoma # Tipo di periferica. Attualmente viene riconosciuto
# solo il nome SANGOMA
#
# Queste chiavi sono specifiche al tipo "Sangoma"
#
# Tipo di scheda - S502A, S502E, S508
Board=S502E
#
# Nome del firmware (ROM) di prova della scheda
# Testware=/usr/src/frad-0.10/bin/sdla_tst.502
#
# Nome del firmware FR
# Firmware=/usr/src/frad-0.10/bin/frm_rel.502
#
Port=360 # Porta di I/O per questa scheda
Mem=C8 # Indirizzo della finestra di memoria (A0-EE)
IRQ=5 # Numero di interrupt, non specificare per la S502A
DLCIs=1 # Numero di DLCI attaccati alla periferica
DLCI_1=16 # Numero del primo DLCI, 16 - 991
# DLCI_2=17
# DLCI_3=18
# DLCI_4=19
# DLCI_5=20
#
# Se specificate qui, queste voci si applicano solo a questa periferica,
# e rimpiazzano i valori specificati prima
#
# Access=CPE # CPE o NODE, default: CPE
# Flags=TXIgnore,RXIgnore,BufferFrames,DropAborted,Stats,MCI,AutoDLCI
# Clock=Internal # External o Internal, default: Internal
# Baud=128 # Valore nominale di baud rate per il CSU/DSU
# MTU=2048 # Massima lunghezza del IFrame trasmesso,
# il default � 4096
# T391=10 # valore di T391 5 - 30, il default � 10
# T392=15 # valore di T392 5 - 30, il default � 15
# N391=6 # valore di N391 1 - 255, il default � 6
# N392=3 # valore di N392 1 - 10, il default � 3
# N393=4 # valore di N393 1 - 10, il default � 4
#
# La seconda periferica � qualche altro tipo
#
# [sdla1]
# Type=FancyCard # Tipo di periferica
# Board= # Tipo di scheda Sangoma
# Key=Value # Valori specifici a questo tipo di scheda
#
# Valori di default per la configurazione DLCI
# Questo posso essere rimpiazzati nella configurazione specifica
# di ciascun DLCI
#
CIRfwd=64 # CIR forward 1 - 64
# Bc_fwd=16 # Bc forward 1 - 512
# Be_fwd=0 # Be forward 0 - 511
# CIRbak=16 # CIR backward 1 - 64
# Bc_bak=16 # Bc backward 1 - 512
# Be_bak=0 # Be backward 0 - 511
#
# Configurazione di DLCI
# Queste voci sono tutte opzionali. Il nome usato �
# [DLCI_D<devicenum>_<DLCI_Num>]
#
[DLCI_D1_16]
# IP=
# Net=
# Mask=
# Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames
# DLCIFlags=TXIgnore,RXIgnore,BufferFrames
# CIRfwd=64
# Bc_fwd=512
# Be_fwd=0
# CIRbak=64
# Bc_bak=512
# Be_bak=0
[DLCI_D2_16]
# IP=
# Net=
# Mask=
# Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames
# DLCIFlags=TXIgnore,RXIgnore,BufferFrames
# CIRfwd=16
# Bc_fwd=16
# Be_fwd=0
# CIRbak=16
# Bc_bak=16
# Be_bak=0
Dopo aver costruito il file /etc/frad/router.conf, l'unico passo che
resta da fare � configurare le periferiche stesse. Questo � solo
leggermente pi� difficile che la configurazione di una normale
periferica di rete. Occorre ricordare di attivare il FRAD prima dei
dispositivi di incapsulamento DLCI. I comandi necessari sono numerosi,
meglio quindi metterli in uno script:
#!/bin/sh
# Configurazione dell'hardware FRAD e parametri DLCI
/sbin/fradcfg /etc/frad/router.conf || exit 1
/sbin/dlcicfg file /etc/frad/router.conf
#
# Attivazione del dispositivo FRAD
ifconfig sdla0 up
#
# Configurazione delle interfacce di incapsulamento DLCI
# e instradamento
ifconfig dlci00 192.168.10.1 pointopoint 192.168.10.2 up
route add -net 192.168.10.0 netmask 255.255.255.0 dlci00
#
ifconfig dlci01 192.168.11.1 pointopoint 192.168.11.2 up
route add -net 192.168.11.0 netmask 255.255.255.0 dlci00
#
route add default dev dlci00
#
7.8. IPX ( AF_IPX )
Il protocollo IPX � il pi� comunemente utilizzato nelle reti locali
Novell NetWare(tm). Linux include il supporto per questo protocollo, e
pu� essere configurato come punto di rete o come router per IPX.
Opzioni di compilazione del kernel:
Networking options --->
[*] The IPX protocol
[ ] Full internal IPX network
Il protocollo IPX ed NCPFS sono trattati in maggior dettaglio nel
documento IPX-HOWTO <IPX-HOWTO.html>.
7.9. NetRom ( AF_NETROM )
I nomi delle periferiche NetRom sono `nr0', `nr1' eccetera.
Opzioni di compilazione del kernel:
Networking options --->
[*] Amateur Radio AX.25 Level 2
[*] Amateur Radio NET/ROM
I protocolli AX25, Netrom e Rose sono trattati nell'AX25-HOWTO
<AX25-HOWTO.html>. Questi protocolli vengono usati dagli operatori di
radio amatoriali in tutto il mondo per sperimentare con la
trasmissione dati via radio.
La maggior parte del lavoro di implementazione di questi protocolli �
stato fatto da Jonathon Naylor,
[email protected].
7.10. Il protocollo Rose ( AF_ROSE )
I nomi delle periferiche Rose nei kernel 2.1.* sono `rs0', `rs1'
eccetera. Rose � solo disponibile nelle versioni 2.1 del kernel.
Opzioni di compilazione del kernel:
Networking options --->
[*] Amateur Radio AX.25 Level 2
<*> Amateur Radio X.25 PLP (Rose)
I protocolli AX25, Netrom e Rose sono trattati nel documento
AX25-HOWTO <AX25-HOWTO.html>. Questi protocolli vengono usati dagli
operatori di radio amatoriali in tutto il mondo per sperimentare la
trasmissione dati via radio.
La maggior parte del lavoro di implementazione di questi protocolli �
stata fatta da Jonathon Naylor,
[email protected].
7.11. Supporto SAMBA - `NetBEUI', `NetBios'.
SAMBA � un'implementazione del protocollo "Session Management Block".
Samba permette ai sistemi Microsoft e ad altri di montare i dischi
Linux e di accedere alle stampanti Linux.
SAMBA e la sua configurazione sono trattati in dettaglio nel documento
SMB-HOWTO <SMB-HOWTO.html>.
7.12. Supporto STRIP (Starmode Radio IP)
I nomi delle periferiche STRIP sono `st0', `st1', eccetera.
Opzioni di compilazione del kernel:
Network device support --->
[*] Network device support
....
[*] Radio network interfaces
< > STRIP (Metricom starmode radio IP)
STRIP � un protocollo designato specificatamente per una serie di
modem radio Metricom per un progetto di ricerca della Stanford
University, chiamato Progetto MosquitoNet
<
http://mosquitonet.Stanford.EDU/mosquitonet.html>. Vi si trova un
sacco di materiale interessante da leggere, anche per chi non �
direttamente interessato al progetto.
Le radio Metricom si connettono alla porta seriale, impiegano
tecnologia "spread spectrum" e sono tipicamente in grado di
trasmettere circa 100kbps. Informazioni riguardo alle radio Metricom
sono disponibili presso Server web della Metricom
<
http://www.metricom.com/>.
Al momento gli strumenti di rete e i programmi di utilit� standard non
supportano il driver STRIP, per cui occorre scaricare dei programmi
modificati a tal fine dal server www di MosquitoNet. Ulteriori
dettagli riguardo al software necessario si trovano alla pagina STRIP
di MosquitoNet <
http://mosquitonet.Stanford.EDU/strip.html>.
In sintesi, occorre usare un programma slattach modificato per
assegnare la disciplina di linea dell'interfaccia seriale a "STRIP";
occorre poi configurare i dispositivi `st[0-9]' come si farebbe con
l'ethernet, tranne per una importante differenza: per ragioni
tecniche, STRIP non supporta il protocollo ARP, per cui bisogna
fornire manualmente al sistema le voci ARP per gli host della propria
sottorete. Questo non � comunque un compito oneroso.
7.13. Token Ring
I nomi delle periferiche token ring sono `tr0', `tr1' eccetera. Token
Ring � un protocollo di LAN standardizzato da IBM che evita le
collisioni fornendo un meccanismo che ad ogni istante autorizza a
trasmettere solo una stazione sulla rete locale. Un `gettone' (token)
� in mano ad una stazione per volta, e solo la stazione che detiene il
gettone ha il diritto di trasmettere. Dopo aver trasmesso i dati il
gettone verr� passato alla stazione successiva. Il gettone viene
passato tra tutte le stazioni attive, da cui il nome `Token Ring'.
Opzioni di compilazione del kernel:
Network device support --->
[*] Network device support
....
[*] Token Ring driver support
< > IBM Tropic chipset based adaptor support
La configurazione di token ring � identica a quella di ethernet, e
l'unica differenza sta nel nome della periferica di rete da
configurare.
7.14. X.25
X.25 � un protocollo a commutazione di pacchetto basato su un
circuito, ed � definito dal C.C.I.T.T. (un gruppo di standard
riconosciuto dalle compagnie di telecomunicazione in quasi tutto il
mondo). Un'implementazione di X.25 e LPB � in lavorazione, e i kernel
2.1.* pi� recenti includono lo stato attuale del lavoro.
Jonathon Naylor
[email protected] sta coordinando lo sviluppo ed
esiste una mailing list per discutere di X.25 sotto Linux e di
argomenti connessi. Per iscriversi occorre mandare un messaggio a
[email protected] con il testo "subscribe linux-x25" nel
corpo del messaggio.
Le versioni attuali degli strumenti di configurazione si possono
ottenere dal sito ftp di Jonathon: ftp.cs.nott.ac.uk
<
ftp://ftp.cs.nott.ac.uk/jsn/>.
7.15. Scheda WaveLan
I nomi delle periferiche Wavelan sono `eth0', `eth1', eccetera.
Opzioni di compilazione del kernel:
Network device support --->
[*] Network device support
....
[*] Radio network interfaces
....
<*> WaveLAN support
La scheda WaveLAN card � una scheda di rete radio ad ampio spettro.
In pratica la scheda assomiglia molto ad una scheda ethernet, e viene
configurata praticamente allo stesso modo.
Si possono ottenere informazioni sulla scheda Wavelan da Wavelan.com
<
http://www.wavelan.com/>.
8. Cavi e cablaggio
Chi ha pratica di lavori con il saldatore pu� desiderare di costruire
da s� i propri cavi per connettere due macchine Linux. I seguenti
diagrammi di cablatura dovrebbero essere di aiuto.
8.1. Cavo Seriale NULL Modem
Non tutti i cavi NULL modem sono uguali. Molti cavi null-modem fanno
qualcosa in pi� che far credere al proprio calcolatore che tutti i
segnali sono presenti e scambiare i segnali di trasmissione e
ricezione. Questo � corretto, ma significa che occorre usare il
controllo di trasmissione software (XON/XOFF), che � meno efficiente
del controllo di flusso hardware. Il caso seguente offre la
connettivit� migliore possibile e permette di usare il controllo di
flusso hardware (RTS/CTS).
Pin Name Pin Pin
Tx Data 2 ----------------------------- 3
Rx Data 3 ----------------------------- 2
RTS 4 ----------------------------- 5
CTS 5 ----------------------------- 4
Ground 7 ----------------------------- 7
DTR 20 -\--------------------------- 8
DSR 6 -/
RLSD/DCD 8 ---------------------------/- 20
\- 6
8.2. Cavo per la porta parallela (cavo PLIP)
Se si intende usare il protocollo PLIP tra due macchine, allora questo
cavo funzioner� qualunque sia il tipo di porta parallela che si
possiede.
Pin Name pin pin
STROBE 1*
D0->ERROR 2 ----------- 15
D1->SLCT 3 ----------- 13
D2->PAPOUT 4 ----------- 12
D3->ACK 5 ----------- 10
D4->BUSY 6 ----------- 11
D5 7*
D6 8*
D7 9*
ACK->D3 10 ----------- 5
BUSY->D4 11 ----------- 6
PAPOUT->D2 12 ----------- 4
SLCT->D1 13 ----------- 3
FEED 14*
ERROR->D0 15 ----------- 2
INIT 16*
SLCTIN 17*
GROUND 25 ----------- 25
Note:
� Non collegate i piedini marcati con un asterisco `*'.
� Altri segnali di terra sono ai piedini 18,19,20,21,22,23 e 24.
� Se il cavo ha una schermatura metallica, questa deve essere
connessa alla conchiglia metallica del connettore DB-25 solo ad un
estremo del cavo.
Attenzione: Un cavo PLIP collegato male pu� distruggere il
controllore della parallela. Bisogna fare molta attenzione e
controllare pi� volte ogni connessione per essere sicuri di non
dover fare lavoro inutile e non avere problemi.
Anche se si pu� riuscire a far andare cavi PLIP per lunghe distanze,
questo, se possibile, va evitato. Le specifiche del cavo permettono
una lunghezza di circa un metro. Bisogna fare molta attenzione quando
si usano cavi PLIP molto lunghi: sorgenti di forti campi
elettromagnetici come fulmini, linee di potenza e trasmettitori radio
possono interferire e talvolta anche danneggiare il controllore della
parallela. Se veramente si vogliono collegare due calcolatori molto
distanti bisognerebbe procurarsi un paio di schede ethernet thin-net e
usare un cavo coassiale.
8.3. Cablaggio ethernet 10base2 (coassiale sottile)
10base2 � uno standard di cablaggio ethernet che richiede l'uso di un
cavo coassiale da 52 ohm, del diametro di circa 5 millimetri. Ci sono
un paio di regole importanti da ricordare quando si connettono
macchine tramite cavi 10base2. La prima � che occorre usare dei
terminatori ad entrambi i capi del cavo. Un terminatore � una
resistenza da 52 ohm che assicura che il segnale sia assorbito (non
riflesso) quando raggiunge la fine del cavo. Senza i due terminatori
si pu� verificare che la ethernet risulti non affidabile, o che non
funzioni del tutto. Normalmente di usano dei `connettori a T' per
connettere i calcolatori, per cui il diagramma di rete assomiglier� al
seguente:
|==========T=============T=============T==========T==========|
| | | |
| | | |
----- ----- ----- -----
| | | | | | | |
----- ----- ----- -----
dove i `|' ai due capi rappresentano i terminatori, gli `======' rapp�
resentano un pezzo di cavo coassiale con spinotti BNC ad entrambi i
capi e le `T' rappresentano un connettore a T. Bisogna far s� che il
pezzo di cavo tra la T e la scheda di rete sia il pi� corto possibile:
idealmente la T deve essere connessa direttamente alla scheda ether�
net.
8.4. Cavo Ethernet TP (Twisted Pair)
Se si hanno solo due schede di rete TP e le si vuole connettere
insieme non occorre un hub. Si pu� fare il cavo in modo da connettere
le due schede direttamente. Un diagramma che realizza questo � incluso
nel documento Ethernet-HOWTO <Ethernet-HOWTO.html>
9. Glossario dei termini usati in questo documento.
Questa � una lista dei termini pi� importanti usati in questo howto.
ARP
Acronimo per Address Resolution Protocol, il protocollo usato
per associare gli indirizzi IP agli indirizzi hardware.
ATM
Acronimo per Asynchronous Transfer Mode. Una rete ATM suddivide
i dati in blocchi di dimensione standardizzata che poi trasmette
efficientemente da un punto all'altro. ATM � una tecnologia di
rete di pacchetto a commutazione di circuito.
client
Questo � di solito un pacchetto software che gira dove sta
l'utente. Ci sono delle eccezioni a questa definzione sommaria:
per esempio nel sistema a finestre X11 il server gira dove sta
l'utente, e il client gira sulla macchina remota. Il client �
un programma o un'estremo di un sistema che riceve un servizio
offerto dal server. Nel caso di sistemi peer to peer come slip o
ppp il client � l'estremo della connessione che inizia il
collegamento mentre l'estremo remoto, quello chiamato, � detto
server.
datagramma
Un datagramma � un pacchetto discreto di dati e intestazioni
(header) contenenti informazioni per la consegna del pacchetto.
Un datagramma � l'unit� base di trasmissione attraverso una rete
IP. Viene anche chiamato `pacchetto'.
DLCI
Il DLCI � il Data Link Connection Identifier, e viene usato per
identificare un'unica connessione punto-a-punto in una rete
Frame Relay. I DLCI sono normalmente assegnati dal fornitore
della rete Frame Relay.
Frame Relay
Frame Relay � una tecnologia di rete designata per distribuire
il traffico sia questo ad impulsi (burst) o di natura sporadica.
I costi di rete vengono ridotti avendo molti utenti Frame Relay
che condividano la stessa capacit� di rete, e basandosi
sull'assunzione che ognuno di essi desideri usare la rete in
tempi leggermente differenti.
Indirizzo Hardware
� un numero che identifica in maniera univoca un calcolatore al
livello di accesso al mezzo di trasmizzione in una rete fisica.
Esempi di questo sono gli Indirizzi Ethernet e gli Indirizzi
AX.25.
ISDN
Acronimo per Integrated-Services Digital Network. ISDN offre un
mezzo standardizzato attraverso il quale le compagnie di
telecomunicazione possono distribuire sia voce che dati ai
clienti. Tecnicamente ISDN � una rete di dati a commutazione di
circuito.
ISP
Acronimo per Internet Service Provider. Queste sono
organizzazioni o compagnie che offrono alla gente la
connettivit� di rete verso Internet.
Indirizzo IP
Un numero che identifica univocamente un calcolatore TCP/IP
sulla rete. L'indirizzo � lungo 4 byte e viene rappresentato in
quella che � chiamata "notazione decimale con punti ("dotted
decimal notation"), dove ogni byte viene rappresentato in
decimale, e i byte sono separati da punti `.'.
MSS
Maximum Segment Size: � la quantita di dati pi� grande possibile
che si pu� trasmettere in un solo istante. Se si vuole
prevenire la frammentazione locale dei dati MSS dovrebbe essere
uguale al "MTU - header IP".
MTU
Maximum Transmission Unit � un parametro che specifica la
dimensione massima del pacchetto che pu� essere trasmesso da
un'interfaccia IP senza che venga spezzettato in unit� pi�
piccole. La MTU dovrebbe essere pi� grande del pacchetto pi�
grande che si vuole trasmettere non frammentato. Si noti che
questo per� previene solo la frammentazione locale, in quanto
qualche altro collegamento sul percorso del pacchetto potrebbe
avere una MTU minore, e il pacchetto a quel punto sar�
frammentato. Valori tipici per MTU sono 1500 per le interfacce
ethernet e 576 per interfacce SLIP.
route
La route � il percorso che i pacchetti prendono attraverso la
rete per raggiungere la loro destinazione.
server
Questo � di solito il pacchetto software o l'estremo di
connessione sul sistema remoto rispetto all'utente. Il server
offre dei servizi ad uno o a molti client. Esempi di server
includono ftp, Network File System, o Domain Name Server. Nel
caso di connessioni peer to peer (da pari a pari) come slip o
ppp il server � considerato quello all'estremo della connessione
che viene chiamata, mentre l'estremo chiamante � il client.
window
La window (finestra) � la massima quantit� di dati che l'estremo
ricevente della connessione pu� accettare in un dato momento.
10. Linux per un provider?
Se siete interessati ad usare Linux come Internet Provider, raccomando
di guardare la homepage dei provider Linux
<
http://www.anime.net/linuxisp/> per avere una buona lista di
puntatori a informazioni di cui si potrebbe aver bisogno.
11. Ringraziamenti
Vorrei ringraziare le seguenti persone per i loro contributi a questo
documento (senza un ordine particolare): Terry Dawson, Axel Boldt,
Arnt Gulbrandsen, Gary Allpike, Cees de Groot, Alan Cox, Jonathon
Naylor, Claes Ensson, Ron Nessim, John Minack, Jean-Pierre Cocatrix,
Erez Strauss.
Per la traduzione, ringrazio Andrea Gelmini per le correzioni fornite.
12. Copyright.
The NET-3-HOWTO, information on how to install and configure
networking support for Linux. Copyright (c) 1997 Terry Dawson.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the:
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
USA.
L'unica licenza valida � quella originale in lingua inglese.
Di seguito ne trovate una traduzione abbastanza fedele che
per� non ha alcun valore.
NET-3-HOWTO, informazioni su come installare e configurare il supporto
di rete per Linux � Copyright (c) 1997 Terry Dawson.
Questo programma � software libero; pu� essere ridistribuito e/o
modificato secondo i termini della "GNU General Public License",
pubblicata dalla Free Software Foundation; la versione 2 della
licenza o (a propria scelta) qualunque versione successiva.
Questo programma � distribuito nella speranza che sia utile, ma SENZA
ALCUNA GARANZIA; senza nemmeno la garanzia implicita di
COMMERCIABILIT� o ADEGUATEZZA PER UNO SCOPO PARTICOLARE. Vedere la
"GNU General Public License" per ulteriori dettagli.
Dovreste aver ricevuto una copia della "GNU General Public License"
insieme a questo programma; altrimenti scrivere a:
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
USA.