2. Parte Server

2.1. Configurare pppd

La comunicazione passerà attraverso la porta seriale. Ci collegheremo al server attraverso il dispositivo "/dev/ttyS1" (COM2 su DOS/Windows). Sul proprio computer potrebbe essere differente e si dovranno adattare gli esempi seguenti. Io impongo l'uso dell'autenticazione perché uso questa configurazione per fornire accesso ai file su un file server per un gruppo di persone. Dopo aver effettuato il logon, essi possono usare la condivisione file di Samba per copiare i file da e verso il laptop. Se non si è preoccupati per la sicurezza si possono commentare le opzioni relative.

Il protocollo PPP (Point to Point Protocol) fornisce una comunicazione TCP/IP attraverso una connessione seriale. In altre parole: quando si vuole effettuare una navigazione su Internet attraverso un modem, la si sta usando. PPP è implementato su Linux dal demone PPP "pppd". La sua configurazione viene effettuata attraverso i file della directory "/etc/ppp/". Useremo i seguenti file:

/etc/ppp/options contiene tutte le opzioni generali per le connessioni PPP

Il file "/etc/ppp/options" dovrebbe apparire più o meno così:

#/etc/ppp/options
lock
#auth  forza l'autorizzazione da una macchina peer
#login fa fare l'autenticazione dal file di password di sistema
#NOTA: il mio file pap-secret permette l'accesso a chiunque, così;
#      se non viene specificato chiunque può connettersi! Se la propria macchina
#      si connette all'esterno, commentate auth e login e spostateli nel file
#      /etc/options.ttySn
auth
login
   

Le linee che iniziano con "#" sono commenti. Il parametro "lock" indica che verrà creato un file di lock per assicurare un accesso esclusivo al dispositivo seriale, il parametro "auth" indica che il client deve autenticarsi, e "login" indica a pppd di usare i nomi utenti e password di sistema per l'autenticazione.

Notare che pppd controllerà il file "/etc/ppp/pap-secrets" per le informazioni relative a nome utente e password. Una singola linea speciale fa in modo che pppd usi solo le informazioni di sistema. Il file "/etc/ppp/pap-secrets" apparirà così:

#/etc/ppp/pap-secrets
# informazioni riservate per l'autenticazione usando PAP
# client                 server                  secret         IP addresses
*                        *                       ""             ppp_laplink_client
   

Questo permette ad ogni macchina con indirizzo IP "ppp_laplink_client" di connettersi al server, senza usare una password (si può vedere perché è comodo avere le voci di ppp_laplink_client nel proprio file "/etc/hosts"). Comunque, il parametro "login" nel file "/etc/ppp/options" fa in modo che il nome utente e la password forniti dal client per l'autorizzazione devono corrispondere sia al file "/etc/ppp/pap-secrets" che ai nomi utente e password di sistema, in modo che la connessione avrà successo solo se saranno forniti un nome utente e una password validi.

Le opzioni specifiche della linea seriale a cui ci si connette sono poste nel file "/etc/ppp/options.ttySn", dove n è il numero del dispositivo seriale. Il mio server usa "/dev/ttyS1", quindi le opzioni vanno nel file... "/etc/ppp/options.ttyS1".

#/etc/ppp/options.ttyS1
asyncmap 0
crtscts
#local indica che il modem non viene usato
local
#silent fa attendere pppd fino a che la connessione è stabilita dall'altra parte
silent
#queste sono le voci che esistono nel file /etc/hosts
#il collegamento non funzionerà se questo è alla fine del file - l'ordine conta!
ppp_laplink_server:ppp_laplink_client
#auth  forza l'autorizzazione dalla macchina peer
#login fa fare l'autenticazione dal file di password di sistema
#NOTE: il mio file pap-secrets permette l'accesso a chiunque, così se non specificato
#         chiunque pu connettersi! Se questo è un server che non userà mai PPP
#         con connessioni esterne, si dovrebbe spostare auth e login nel file /etc/ppp/options
#auth
#login
#usare PAP e non CHAP per l'autenticazione
require-pap
115200
   

Tutte queste opzioni sono ben documentate nella pagina man di pppd; alcune opzioni chiave sono spiegate nei commenti del file. Il parametro "crtscts" indica a pppd di usare il controllo di flusso hardware. È raccomandato perché è più veloce. In alternativa si può specificare "xonxoff" per usare il controllo di flusso software - si vorrà specificare quest'ultimo se il proprio cavo null modem non si connette alle linee RTS/CTS (improbabile se comprate il cavo in un negozio). "115200" specifica la velocità di trasmissione dei dati - se avete problemi nel connettervi potreste tentare ad una velocità inferiore. Nella pagina man di termios si possono trovare le impostazioni valide per la velocità. La scelta di un parametro non valido genererà un messaggio di errore del demone pppd che chiaramente lo riporterà ad un qualche valore di default.

Notare che le opzioni "auth" e "login" sono commentate, perché sono specificate nel file generale di opzioni. Se si usa il computer anche per connettersi ad un ISP, si vorranno specificare qui anziché nel file "/etc/ppp/options", altrimenti quando vi connettete all'ISP gli verrà chiesto di autenticarsi e questo probabilmente non succederà. Esse non sono specificate in questo file perché se si hanno altre connessioni PPP in entrata o le si avranno nel futuro, si vuole essere certi che verranno sempre autenticate. Ricordarsi che il file "pap-secrets" mostrato qui non fornisce alcuna protezione.

Infine, la voce "ppp_laplink_server:ppp_laplink_client" specifica gli indirizzi IP locali e remoti dopo che la connessione è stabilita. Si possono usare indirizzi IP effettivi (es. 192.168.0.1:192.168.1.1) o voci dal file "/etc/hosts", come ho fatto io. Il vantaggio di quest'ultima soluzione consiste nell'usare in seguito i nomi per riferirsi ad essi. Questi indirizzi sono riservati per le reti locali e non esistono su Internet, così si evitano possibili conflitti. Dopo che la connessione è stabilita, il client può riferirsi al server attraverso l'indirizzo ppp_laplink_server (192.168.0.1), e il server può riferirsi al client con l'indirizzo ppp_laplink_client (192.168.1.1).

Si possono usare diverse voci nel file "/etc/ppp/pap-secrets" per permettere l'accesso solo a utenti selezionati. Io uso il protocollo PAP per l'autenticazione; si può usare il protocollo CHAP se si desidera - la configurazione è la stessa, usando il file "chap-secrets". Per queste ed altre opzioni si possono consultare le pagine man e la documentazione indicata alla fine del documento.

2.2. Una installazione "alla getty" di pppd

Si può far partire il demone pppd all'avvio del sistema e fare monitorare una linea seriale a propria scelta. Un modo elegante per fare questo consiste nel modificare il file "/etc/inittab". Questo file contiene informazioni per l'inizializzazione del sistema. Aggiungere le linee seguenti al file:

# Avvio di pppd per la connessione seriale laplink.
pd:2345:respawn:/usr/sbin/pppd /dev/ttyS1 nodetach
   

Questo si legge come segue: per i runlevel 2, 3, 4 e 5 avviare "/usr/sbin/pppd /dev/ttyS1 nodetach" e se termina (alla fine della connessione) effettuare un respawn (farne partire uno nuovo). L'opzione "nodetach" fa in modo che pppd rimanga connesso al terminale che lo ha avviato, invece che effettuare un fork e terminare. Questa opzione è necessaria perché altrimenti il processo "init" ne genererà un altro nuovo immediatamente. Le altre voci del file inittab specificano i processi getty da avviare sui terminali seriali (tty); la loro inizializzazione assomiglia molto a questa.

Per attivare la nuova configurazione scrivere:

[root@griis /root]# /sbin/init q
   

2.3. Avviare il server quando necessario

Se ci si vuole connettere al server solo occasionalmente, si potrebbe preferire di avviare la connessione manualmente. Tutte le impostazioni rimangono le stesse; si può far partire il server scrivendo semplicemente:

/usr/sbin/pppd /dev/ttyS1 nodetach
   

dalla linea di comando. L'opzione "nodetach" non è davvero necessaria, ma rende più semplice uccidere il processo premendo "ctrl-c".

2.4. Servire client Windows

Sfortunatamente l'implementazione di MS Windows non è del tutto standard. Prima di iniziare la connessione PPP essa richiede lo scambio delle stringhe di testo "CLIENT" (dal client) e "CLIENTSERVER" (dal server). La linea seguente deve essere aggiunta al file "/etc/ppp/options.ttyS1" per conformarsi ad un client Windows:

connect 'chat -v -f /etc/ppp/scripts/winclient.chat'
   

Poi si crea la directory scripts e il file chat "/etc/ppp/scripts/winclient.chat":

TIMEOUT 3600
CLIENT CLIENTSERVER\c
   

L'opzione di connect permette di specificare un programma per trattare lo scambio delle stringhe prima della connessione. Normalmente viene usato il programma "chat"; controllare il manuale per maggiori dettagli. Lo script si occupa del problema della connessione Windows. Esso non è necessario quando ci si connette con una Linux box.