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.
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.
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
.
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.
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
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.
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.