Come utilizzare un servizio ADSL, con un normalissimo modem e, naturalmente, un sistema operativo OpenBSD.
Per chi accede ad Internet con l’ausilio del protocollo PPTP, può continuare a leggere di seguito, altrimenti per chi si avvale del protocollo PPPoE, può saltare in fondo al documento ignorando questa prima parte.
Se siete sicuri di accedere alla rete con il protocollo PPTP vi occorre un file chiamato pptp-obsd.tar.gz, PPTP sta per Point to Point Tunnelling Protocol, lo trovate nei ports date un’occhiata ports/net/pptp, oppure lo potete scaricare alle seguenti url:
http://pptpclient.sourceforge.net/#download
Una volta scaricati i sorgenti, scompattateli ed installateli:
% make % make install
Se qualcosa non dovesse andare per il verso giusto copiate a mano i file: pptp, e pptp_callmgr nella directory /usr/bin.
% cp pptp /usr/bin % cp pptp_callmgr /usr/bin
Create il file /etc/ppp/options, e inseritegli le seguenti rige:
name "NOMELOGIN" noauth noipdefault defaultroute debug
Naturalmente il campo “NOMELOGIN” deve essere sostituito con la login che vi ha assegnato il vostro provider.
Create ora il file chiamato /etc/ppp/pap-secrets, e inserite al suo interno le seguenti rige:
NOMELOGIN 10.0.0.138 PASSWORD
Come nel file precedente, il campo NOMELOGIN va sostituito con lo stesso campo usato precendentemente, il campo PASSWORD va sostituito con la password che vi ha assegnato il vostro provider.
L’indirizzo 10.0.0.138 è l’indirizzo di default che indica fisicamente il vostro modem Alcatel, quindi una volta configurata l’interfaccia alla quale è connesso il modem (vi spiego dopo come fare), potete fare un semplice
ping -c1 10.0.0.138
, ed esso vi risponderà . L’unico utente che deve leggere questo file è l’utente root, quindi settate pure i permessi di lettura e scrittura al solo utente root con il seguente comando:
% chmod 600 /etc/ppp/pap-secrets
Giunti a questo punto dobbiamo inserire i nomi dei server DNS, del vostro provider nel file /etc/resolv.conf (se non esiste createlo):
nameserver 212.216.112.112 nameserver 212.216.172.62
Ho inserito gli IP dei server DNS del mio provider (non dovrei fare pubblicità ), voi inserite i vostri.
Come vi dicevo prima, ora dovete configurare la vostra interfaccia di rete alla quale è connesso il modem Alcatel. Assegnate alla medesima un indirizzo ip che faccia parte della rete 10.0.0.0/24, ad esempio : 10.0.0.1:
% ifconfig INTERFACCIA inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
Sostituite il campo INTERFACCIA con il nome del dispositivo, nel mio caso il modem si trova connesso a una scheda ethernet Realtek, quindi rl0. Per rendere queste modifiche sull’interfaccia in modo permanete, bisogna modificare il file /etc/hostname.INTERFACCIA (nel mio caso /etc/hostname.rl0) nel modo seguente:
inet 10.0.0.1 255.255.255.0 NONE media autoselect
Bene, ora siete pronti per connettervi,
%pptp 10.0.0.138&
e per chiudere la connessione potete killare i processi:
% kill -9 [numero del processo del pppd] % kill -9 [numero del processo del pptp]
Se avete dei problemi con la connessione fate riferimento al file di log /var/log/messages. Potete monitorare il tutto con il seguente comando:
% tail -f /var/log/messages
Se la vostra connessione alla rete resta in piedi solamente qualche manciata di secondi, molto probabilmente vi trovate di fronte ad un problema con lo pseudo device GRE che se attivo nel kernel cattura tutti i pacchetti GRE e il PPTP non riesce a vederli causandone un time out. Se fate riferimento al file di log sopracitato (/var/log/messages), vi troverete una dicitura simile a questa:
LCP:Timeout sending Config-Request
Potete provare a disabilitare lo pseudo device GRE usando il comando “sysctl”
% sysctl -w net.inet.gre.allow=0
Se non dovesse funzionare, cosa molto probabile (nella versione 2.9, ad esempio, non funziona), allora la soluzione è la ricompilazione del kernel. Non temete non è una cosa difficile. Naturalmente, non serve che ve lo dica io, dovete avere i sorgenti del kernel, se non li avete, scaricateli. Questa modifica del kernel serve solo a disabilitare lo pseudo device GRE:
Aprite il file /usr/src/sys/conf/GENERIC.
Commentate la riga: option pseudo-device gre.
Per commentare una riga intendo l’inserimento del simbolo # prima della riga stessa. Ora entrate nella dir che corrisponde alla vostra macchina (mi riferisco all’architettura) es: /i386 se avete una macchina con architettura intel
% cd /usr/src/sys/arch/i386/conf
Bene, compiliamo il kernel con la modifica che abbiamo appena apportato:
% config ./GENERIC % cd ../compile/GENERIC % make depmod % make
Bene, una volta compilato il kernel bisogna copiarlo nella directory / con il nome “bsd.2”.
% cp bsd /bsd.2
Rebootate e durante il prompt del loader, digitiamo “bsd.2”.
boot:bsd.2
Provate ora a connettervi, dovrebbe essere andato tutto per il verso giusto e se vi da fastidio oppure vi reca impedimenti immettere bsd.2 ad ogni prompt di boot, potete salvare il vostro vecchio “kernel”, con il nome di bsd.old (ad esempio) e rinominare bsd.2 con il nome bsd.
% cp /bsd /bsd.old
% mv /bsd.2 /bsd
In questo modo il boot caricherà direttamente il kernel da voi compilato. Per la ricompilazione del kernel potrete trovare su questo sito, le relative traduzioni e riferimenti.
In aggiunta a questo articoletto, potrete scaricare uno script che in modo automatico si riconnette alla rete, quando si verificano dei problemi, tramite il crontab: è stato scritto da Peter Chiocchetti.
PPPoE
Se per accedere ad Internet utilizzate il protocollo PPPoE, come faccio io con BBB di Telecom, sappiate che non dovete imbattervi nella ricompilazione del kernel ne tanto meno nell’istallazione di applicativi come sopra. Il supporto per il PPPoE e’ incluso in user space, sin dalla release 2.9, quidi dobbiamo solamente dare uno sguardo alla comfigurazione del file /etc/ppp/ppp.conf e ad un programmino /usr/sbin/pppoe.
*******************/etc/ppp/ppp.conf ********************************* default: set log Phase Chat LCP IPCP CCP tun command set redial 15 0 set reconnect 15 10000 pppoe: set device "!/usr/sbin/pppoe -i rl0" disable acfcomp protocomp deny acfcomp set mtu 1492 set speed sync enable lqr set lqrperiod 5 set cd 5 set dial set login set timeout 0 set authname ***** set authkey ***** add default HISADDR enable DNS enable mssfixup ************************************************************************
Tramite il parametro set device locato nella linea 6, il PPP, incarica il programma /usr/sbin/pppoe che dopo chiamerò per facilità solo PPPoE, di gestire l’input e l’output, anzichè usare una porta seriale oppure un altra connessione per la rete. Daremo uno sguardo più avanti al programma PPPoE ma per ora continuiamo a dare un occhiata alla linea 9, nella quale troviamo il valore dell’MTU (Maximum Transmit Unit), settato a 1492, ma potrebbe variare dalle esigenze, dato che questo valore, insieme a quello dell'”MRU”, serve solamente a dare la possibilità ai pacchetti ethernet in uscita, lo spazio per gli headers del PPPoE.
Infatti il Maximum Ethernet frame è di 1518 bytes, 14 bytes sono usati dall’header e 4 bytes per il frame-check sequence, restano quindi 1500 bytes di payload…. per questa ragione il Maximum Transmission Unit di una interfaccia Ethernet è solitamente 1500 bytes e questo è il più grande datagramma IP che può essere trasmesso su un interfaccia Ethernet senza fammentazioni. Il PPPoE aggiunge altri sei bytes di overhead e il protocollo PPP altri due…. il conteggio è presto fatto: restano 1492 bytes per il datagramma IP.
La linea con la dicitura “set speed sync” informa il PPP di usare una decodifica in modo sincrono per i pacchetti inviati tra esso ed il PPPoE. Vi sconsiglio di non abilitare il “protocol compression” ed il “protocomp” (date un occhiata all’ RFC 2516 per ulteriori delucidazioni).
Non c’è bisogno di ricordarvi di inserire la userid e password (linea 17 e 18) che il vostro provider vi ha assegnato. La configurazione è finita. Facile, no? Naturalmente dovete configurare il file /etc/resolv.conf (vedi sopra) e lanciare la connessione in questo modo:
%ppp -ddial pppoe &
Lasciate stare per ora i messaggi che vi butta fuori il demone. Il PPP non fa altro che aprire un’interfaccia chiamata “tun” (ad sempio “tun0”, oppure “tun1” se la tun0 è già stata attivata), e successivamente va in background. Il collegamento non sarà in piedi fino a quando i dati uscenti, non saranno trovati sull’interfaccia “tun” e a quel punto ppp, prova a metter su il collegamento in tutto e per tutto. Nell’arco di tempo in cui il PPP inizia a creare il collegamento (oppure il “link”), i pacchetti ricevuti (compreso il primo) rimarranno in coda per un periodo di circa 2 minuti.
Potete settare questo valore di timeout con l’opzione “set choked [timeout]” dove timeout è un numero che indica in secondi, il lasso di tempo, in cui i pacchetti vengono tenuti in attesa e dopo di che scartati da PPP. Ho usato -ddial (simile a “-auto”) per far si che il PPP ristabilisca automaticamente il collegamento ogni qual volta esso cessi, per un qualunque motivo.
Come detto prima il PPP usa il programma /usr/sbin/pppoe per gestire il traffico sulla scheda di rete, se volete potete usare il comando /usr/sbin/pppoe anche per metter su un server PPPoE la sitassi è la seguente:
pppoe [-s [-p system]] [-v] [-i interface] [-n service]
Anche qui il parametro -i interface è lo stesso e cioè indica l’interfaccia sulla quale è in ascolto in modem (nel mio caso la rl0). Nel caso in cui non venga specificato questo parametro, il programma PPPoE userà la prima interfaccia Ethernet che trova configurata.
Una cosa da sapere (mi riferisco agli utenti alle prime armi) è che con OpenBSD il nome di un interfaccia non fa riferimento al tipo di connessione, ma al nome del tipo di scheda di rete. Potete vedere il tipo di scheda di rete durante il processo di boot, oppure successivamente con il comando dmesg (8). Per esempio, io ho due schede Realtek 8139, quindi mi troverò una rl0 e una rl1, se avessi avuto una Intel EtherExpress 16 ed una Novell NE2000 mi sarei ritrovato con una “ie0” ed una “ne1”.
Il parametro “-n service”, vi permette di usare un nome per il servizio, ad esempio -n BBB, quando negozierete con il vostro server/provider. Di default, il client vi chiederà il nome del servizio, e non lo farà naturalmente il server che risponderà dall’altra parte della connessione.
Se volete specificare i dati di configurazione in modo da usarli per una connessione PPP Over Ethernet, potete usare il parametro “-p server”, ma di solito questi dati si maneggiano solo se si vuol metter su un server PPPoE, in altri casi vi consiglio di non toccar nulla.
Per far partire il PPPoE come server passate pure il parametro “-s” al comando pppoe, altrimenti se non è menzionato, il PPPoE girerà in modalità client, e vi collegerà al vostro gestore.
In fine l’immancabile flag “-v”, che vi aumenta la prolissicità (si può dire?) in fase di esecuzione (vi consiglio di includere questo flag per tutti gli usi di pppoe). Per la configurazione in modalità client del programma dobbiamo modificare solamente il file di configurazione del PPP cioè quello che abbiamo visto in precendenza.
Vi ricordo che il software gira completamente in user mode. Se siete votati all’auto lesionismo e dovete smanettare su tutto ciò che che vi capita date un occhiata al programma rp-pppoe scritto però per NetBSD. Lo potete scaricare qui: http://www.roaringpenguin.com/pppoe/#download
Non so se il pacchetto per NetBSD giri correttamente su OpenBSD. Una volta scaricato date:
% tar xvfz rp-pppoe-3.4.tar.gz % cd rp-pppoe-3.4/src % ./configure --mandir=/usr/share/man % make # make -i install # adsl-setup
(Da quello che dicono i coder di Roarin Penguin c’è un piccolo bug nel codice, che vi conviene ignorare in fase di compilazione “usando l’opzione -i”. Dicono che non abbia conseguenze durante l’utilizzo del programma.)
Con questo è tutto, se avete domande, suggerimenti, quesiti, critiche fatelo mandandomi una e-mail a: [email protected]
Un ringraziamento va fatto a:
- Hopfer Alois from www.inode.at for pointing me to the FreeBSD howto
- Lukas Ertl for the FreeBSD howto that can be found at http://mailbox.univie.ac.at/~le/freebsd+adsl-howto.html
- the openbsd mailing list people who gave me a lot of hints
- Caff [email protected]