Precedente Successivo Indice

2. Il protocollo TCP/IP

2.1 Siti e indirizzi

Tutti i siti Internet comunicano attraverso un protocollo comune, il TCP/IP, che in realtà, non è un singolo protocollo ma un insieme di protocolli. Per quel che ci riguarda ci limiteremo ad analizzare i due protocolli caratteristici del TCP/IP e cioè... il TCP e l'IP.

Ogni computer collegato a Internet (compreso il vostro quando è collegato al provider) è identificato in modo univoco da una quaterna di numeri (tipo 198.20.45.2) ognuno dei quali va da 0 a 255 separati tra loro da un punto: questo numero si chiama IP. Quando, a collegamento tra PC e provider avvenuto, si contatta un host tramite il suo nome alfabetico (tipo www.iol.it o sunsite.unc.edu), nella realtà viene richiesto ad una computer sulla rete (che si chiama nameserver) la traduzione del nome alfabetico nel corrispettivo numerico.

In questo modo, tutti i pacchetti che transitano per la rete portano con sè solo gli indirizzi numerici del computer di provenienza e di arrivo, permettendo ai computer intermedi attraverso cui i pacchetti viaggiano di smistarli correttamente mediante un meccanismo che non stiamo qui a descrivere dato che non è il luogo. Quello che interessa ora è capire come un computer da casa si collega alla rete tramite rete telefonica.

2.2 Collegamenti seriali

Esistono due tipi di protocolli che permettono a due computer dotati di TCP/IP di collegarsi utilizzando un collegamento seriale tipo due modem attraverso una linea telefonica, due modem attraverso una linea ISDN o due computer collegati per mezzo di un cavo dalle due porte seriali. Questi protocolli si chiamano SLIP (Serial Line Internet Protocol) e PPP (Point-to-Point Protocol).

Storicamente il PPP è venuto dopo e si pone come un'evoluzione dello SLIP, in quanto, oltre a fornire un collegamento come quello di SLIP, comprime automaticamente i dati, può spedire pacchetti di dati di protocolli diversi tra loro (TCP/IP di Unix e IPX/SPX di Novell) oltre a molte altre caratteristiche di scarso interesse a questo punto del documento.

Il kernel di Linux li supporta tutti e due ed esistono svariati programmi che configurano Linux per questi due collegamenti : i più conosciuti sono PPPD e DIP.

2.3 Cosa serve per collegarsi

Per collegarsi è necessario aver compilato il kernel avendo risposto sì ai seguenti punti :

I protocolli SLIP o PPP possono essere eventualmente compilati come moduli e caricati solamente quando sono necessari. Qualora non abbiate installato il kerneld per la gestione automatica dei moduli, ricordatevi che i moduli generati non sono solo ppp.o e slip.o, ma sopratutto slhc.o che va caricato prima degli altri due e scaricato dopo !

Oltre a ciò, servono i programmi di connessione. I più conosciuti sono pppd per il protocollo PPP e dip per il protocollo SLIP.

Questo documento tratta solo la connessione PPP.

2.4 Configurazione generale del PPPD

Il pppd (al momento in cui scrivo è in fase di beta testing la versione 2.3) è un programma molto particolare. E' un demone, ovvero uno di quei programmi che, una volta lanciati, si mettono in background (per utilizzare una terminologia Win) e funzionano senza che l'utente se ne accorga. Il pppd gestisce il traffico di pacchetti TCP/IP, praticamente assolve il ruolo del Distinct o del Trumpet sotto Windows. Le molteplici opzioni, che potete scorrere nel man di pppd, possono essere passate sia attraverso la linea di comando sia raccolte nel file /etc/ppp/options.

Le opzioni spiegate in questa prima parte, dato che dipendono unicamente dalla configurazione di Linux e dall'hardware del computer, sono da considerarsi universali per i collegamenti via modem a prescindere da qualunque provider e conviene quindi raccoglierle nel file /etc/ppp/options.

Le opzioni spiegate nella seconda parte dipendono strettamente dal provider a cui ci si collega e conviene quindi raccoglierle come parametri di comando per il pppd in uno script apposito così da lasciare la libertà di poter accedere a provider diversi. (Per chi non sapesse cos'è uno script : è un piccolo programma scritto con i comandi della shell. Praticamente un file .BAT, per chi conoscesse solo DOS)

Il parametro fondamentale da inserire nel file /etc/ppp/options è:

connect /etc/ppp/chat-script

Questo parametro dice a PPPD che vogliamo chiamare un punto della rete Internet il quale a sua volta sta aspettando che qualcuno si colleghi, ma che il collegamento PPP sarà disponibile solo dopo aver compiuto una serie di operazioni contenute nello script /etc/ppp/chat-script. Ricordatevi di fare in modo che lo script abbia l'autorizzazione ad essere eseguito, ovvero, dopo averlo creato, attivate le flag di eseguibilità con

chmod u=rwx /etc/ppp/chat-script

Nella seconda parte troverete questo script per ogni provider commentato dettagliatamente. L'opposto di connect è passive, che dice a pppd di attendere che qualcuno chiami per effettuare una connessione PPP con una certa porta seriale.

Ma come si fa a dire a pppd che porta seriale deve utilizzare ? Questo è il secondo parametro : la porta di comunicazione. La scelta è da farsi tra i device utilizzabili:

/dev/cua0               per la COM1:
/dev/cua1               per la COM2:
/dev/cua2               per la COM3: e via dicendo

oppure, se avere già spiegato a Linux a quale porta è collegato il vostro modem (per esempio tramite il setup della Slackware) :

/dev/modem

Inoltre bisogna dire a che velocità volete comunicare con la seriale a cui è collegato il modem, generalmente un numero superiore alla velocità di collegamento qualora abbiate un modem che supporta la compressione, esempio :

115200

Non tutte le velocità sono però lecite se si usa il PPPD 2.1.1, che è la versione migliore di pppd se si utilizza un kernel della seria 1.2.x. In questo caso, infatti, la porta può funzionare al massimo a 38400 baud. Come andare più forte quindi? Semplice (o quasi). Basta dire al kernel di lavorare a velocità maggiori ogni qual volta si presenta 38400. Per far ciò si usa il comando setserial (e' bene metterlo in /etc/rc.d/rc.local) con la seguente sintassi :

setserial /dev/cua1 spd_vhi
oppure
setserial /dev/cua1 spd_hi

Il parametro spd_vhi indica al kernel di lavorare a 115200 baud (o a 57600 baud se si indica spd_hi) anche se l'applicazione richiede 38400 baud. Dato però che ci sono programmi che comunicano con la seriale senza impostarne la velocità è bene farlo sempre nell'/etc/rc.d/rc.local con il comando :

stty 38400 < /dev/cua1

Dato che nella maggior parte delle volte non si utilizza un collegamento seriale diretto, è ottima cosa dire al PPPD che state utilizzando un modem attraverso due opzioni :

modem
crtscts

Il tipo di pacchetti che deve passare attraverso il collegamento seriale è regolato dal netmasking il cui valore, dato il tipo di classe di domini che vengono rilasciati ai provider in Italia, dovrebbe essere :

netmask 255.255.255.0

Qualora notiate negli script di collegamento dei programmi per Win valori di netmask diversi, sostituiteli e fatemi sapere. Il PPPD 2.2.0 è comunque in grado di dedurre da solo il valore del netmask dal tipo di IP che viene assegnato senza che l'utente indichi alcunchè.

L'ultimo parametro globale è :

defaultroute

il quale dice a Linux che il collegamento che state effettuando è quello per il resto del mondo : Internet.

2.5 Debug e Kdebug

Per analizzare le fasi cruciali del collegamento, qualora qualcosa non funzionasse, il PPPD mette a disposizione due opzioni, debug e kdebug, che mostrano all'utente la fase di negoziazione precedente al collegamento definitivo.

Tramite l'analisi di queste informazioni, per la verità un po' criptiche, si può capire se il collegamento non è andato a buon fine per un parametro sbagliato o per una password scorretta. Queste due opzioni non stampano a video il log di quello che si stanno comunicando il PPPD e il provider, ma le indirizza al SYSLOGD che si occupa di visualizzarle o di salvarle su un file in funzione di come è stato configurato.

Il SYSLOGD è un demone, come il PPPD (hanno in comune l'ultima lettera : che strano !!!), che si occupa di registrare tutti i messaggi di log che gli vengono inviati dal kernel e dai programmi. Il settaggio di questo demone risiede nel file /etc/syslog.conf.

Per PPPD 2.1.2 bisogna aggiungere a questo file la seguente linea :

local2.* /dev/console

Per PPPD 2.2.0 invece la seguente :

daemon.*,kern.* /dev/console

Mi raccomando per gli utenti con un syslog precedente alla versione 1.3 : tra * e /dev non ci vogliono spazi ma TAB !

Per far accettare nuove opzioni al syslog, esso va killato con l'opzione -HUP, anche se a me sembra più sicuro fare reboot ogniqualvolta lo si modifica. Per chi volesse più informazioni su questo potentissimo strumento di Linux può leggersi il man syslog.conf o /usr/doc/sysklogd/README.linux.

In questo modo le informazioni sulla connessione vengono a video. Per vedere le stesse informazioni durante una sessione X Windows basta eseguire il programma xconsole che apre una finestra nella quale reindirizza tutto quello che andrebbe sulla console di testo. Qualora si volesse salvare il contenuto per vederlo successivamente e capire quello che è accaduto, basta sostituire nel file /etc/syslog.conf il file /dev/console con il path di un file dove si vuole finisca il contenuto.

Qualora non vi funzioni il collegamento e abbiate intenzione di spedirmi un e-mail per chiedermi perchè non funziona, esigo che mi alleghiate all'e-mail il file di testo (possibilmente compresso) contenete il risultato del syslog in modo che io capisca precisamente cosa è accaduto. Al termine di questo documento è spiegata la procedura precisa per ottenere sicuramente una risposta da me.

L'opzione debug genera solo informazioni generali, mentre kdebug tira in ballo anche le comunicazioni con il kernel e ammette una sub-opzione che dipende dalla versione del PPPD che specifica quanto approfondite si vogliono le informazioni. Io consiglio :

debug
kdebug 1

2.6 IP statici e dinamici

Ad ogni provider, oltre al proprio, vengono assegnati un numero finito di IP da assegnare a coloro che si collegano. Generalmente la quantità di IP dipende dai modem disponibili al collegamento e quindi a quanti utenti si possono collegare contemporaneamente di modo tale da assegnare ad ogni utente che si collega un IP a caso tra quelli a disposizione non ancora utilizzati. Prima di effettuare il collegamento SLIP, l'utente deve essere a conoscenza dell'IP che gli è stato assegnato.

Con il PPP non è necessario. Infatti il protocollo PPP è stato disegnato in modo tale che, durante la fase di negoziazione, chi chiama possa dedurre quale IP gli sia stato assegnato al computer che sta chiamando inserendo nel file /etc/ppp/options l'opzione :

noipdefault

Qualora il vostro IP sia sempre quello, si ometterà noipdefault e si inseriranno i due IP separati da due punti (:), ovvero il proprio IP e quello del provider al quale ci si collega :

<IP_proprio>:<IP_del_provider>

Questa opzione, però, è del tutto ridondante in quanto Linux è comunque in grado da solo di dedurre queste informazioni se avete compilato correttamente /etc/hosts ed /etc/resolv.conf come spiegato più avanti.

2.7 I sistemi di autenticazione

Il protocollo PPP supporta due diversi tipi di autenticazione, ovvero quei sistemi attraverso cui il provider verifica chi c'è dall'altra parte della linea : il PAP (Password Authentication Protocol) ed il CHAP (Cryptographic Handshake Authentication Protocol). Le differenze non sono sostanziali, a parte che il CHAP è più sicuro perchè cripta tutte le password che scambia, mentre il più utilizzato sembra essere il PAP.

Esiste un terzo sistema, derivato dal CHAP, creato da Microsoft e chiamato MSCHAP80 dagli autori di PPPD. Anch'esso non scambia password in chiaro, come CHAP, ma non è compatibile con esso. La ragione della sua esistenza è dovuta alla certificazione di sicurezza C2 richiesta a tutti i fornitori del dipartimento della difesa americana, che richiede, tra le altre cose, la criptazione di tutte le password trasmesse. Microsoft ha così dovuto creare questo nuovo standard per certificare NT quando è nato. Sebbene MSCHAP80 non sia stato accettato come standard a sè stante dalle organizzazioni di standardizzazione che si occupano di Internet, esso può essere causa di malfunzionamenti nel collegamento con macchine NT o 95 malgrado esistano opzioni per disabilitarlo dai pannelli di configurazione dei sistemi operativi Microsoft. PPPD può supportare questa opzione solo se viene modificato opportunamente il Makefile prima di compilarlo. Nelle distribuzioni binarie esso è generalemente disabilitato. Comunque il sistema generato da Microsoft è così stupido che, per accedere al sistema, basta intercettare la password criptata !

In funzione del metodo di autenticazione che utilizza il provider, dovrete compilare opportunamente i file /etc/ppp/pap-secrets o /etc/ppp/chap-secrets, due file che ammettono lo stesso formato:

client server secret IP-address

L'ultimo parametro è inutile per chi chiama. Gli altri tre corrispondono, nell'ordine a :

login nome-del-server-che-risponde password

Nel secondo campo consiglio sempre di lasciare un *, dato che non sempre, con i centralini a ricerca automatica, risponde lo stesso server. Gli altri due campi dipendono dal provider, ma spesso sono la login e la password assegnati. Fate attenzione a rendere questi due files leggibili solo da coloro che possono e non da tutti !

Nella sezione che segue viene spiegato cosa scrivere in questo file in funzione di ogni provider.


Precedente Successivo Indice