HomePage RecentChanges Contattami Random Page Le mie foto Il mio Blog RSS feed

Configurare pppd con un modem seriale analogico

DISCLAIMER: questa specie di guida è stata scritta leggendo i vari doc di questo tipo sparsi sulla faccia della rete, e grazie all’esperienza diretta… spero di non aver scritto grosse cavolate eventualmente se fondete il vostro pc e le radiazioni vi fanno diventare fosforescenti sono solo cavoli vostri ed io non voglio averci niente a che fare =)

Certo, ci sono tante utility grafiche, ma siccome siamo newbies con un po’ di ambizione vediamo di creare il nostro script di connessione ad Internet!

Se proprio volete usare qualcosa di grafico usate Rppp che almeno funziona bene! http://hammer.prohosting.com/~seh/rppp.tgz

Alcune premesse:

Supporto PPP

Se ricevete errori tipo "TCP non implementato nel kernel" o cose simili, dovrete ricompilare il kernel col supporto per il PPP (nei kernel di default delle varie distribuzioni, di solito è abilitato).

Potreste averlo come modulo (modprobe -l per vedere se è tra i moduli disponibili, insmod ppp o modprobe -a ppp per caricarlo)

Piccola nota sulla sicurezza

Questa breve guida è pensata per ottenere la connessione ad internet da Super-User (root). Ci sono diverse soluzioni per ottenere la connessione ad internet da utente, ma non sono molto sicure. Queste sono principalmente:

Suid-root: impostare gli script ed i programmi lanciati durante la connessione come suid-root. Questo è abbastanza pericoloso perché lasciare in giro programmi suid non è mai bello (basta pensare ad una qualsiasi persona che con un qualsiasi login user alla nostra macchina può connettersi e disconnettersi a piacere)

Ecco un esemplificazione della procedura del suid:

# chown root.root /usr/sbin/pppd /usr/sbin/chat /usr/sbin/provider /usr/sbin/stacca
# chmod 4755 /usr/sbin/pppd /usr/sbin/chat /usr/sbin/provider /usr/sbin/stacca

groups: si potrebbe creare un gruppo ppp ed inserire l’user in tale gruppo. Cambiati i permessi dei file di cui parlavamo sopra, potranno lanciare/staccare la connessione solo user autorizzati effettivamente a farlo.

Altra piccola nota (sui WinModem)

I cosiddetti WinModem? sono prevalentemente modem interni e sono chiamati così perché possono funzionare solo con Windows, in quanto mancano uno o più pezzi di hardware (uno o più chip) che vengono sostituiti da un software di gestione, che ovviamente gira in Win.

Siccome le specifiche di controllo di tali modem non vengono divulgate dalle case produttrici, questi non sono supportati da Linux (ci vuole molto tempo speso a fare reverse engineering per trovare tutti i dati necessari per controllare i modem).

Maggiori informazioni sono disponibili su http://www.linmodems.org.

I modem USB probabilmente saranno winmodem (come dice un doc sui winmodems) e quindi non verranno supportati.

Le ultime notizie (!!! ndVelenux qualche anno dopo) però parlano di modems USB che non sono winmodems, quindi ci sono ancora speranze per quelli che si comprano i modem USB all’ultima moda… :P

Configurazione

Per prima cosa bisogna mettere gli indirizzi dei server DNS dentro il file giusto e nella forma adatta. Editate col vostro editor di testo il file /etc/resolv.conf:

search dominio.it
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx

dove dominio.it è il dominio del vostro provider ad es. tin.it e xxx.xxx.xxx.xxx è l’ip del DNS server

N.B.: questo è molto importante per evitare gli errori tipo "host unreachable" che spesso affliggono i newbie al primo collegamento con Linux.

Adesso vediamo che il file /etc/hosts sia a posto:

# cat /etc/hosts

127.0.0.1	        sukkia  sukkia.tin.it
0.0.0.0	localhost	localhost.localdomain

dove sukkia è il nome del vostro piccì… :)

N.B.: l’indirizzo localhost.localdomain è necessario per non aver problemi con Gnome, a quanto ne so… se qualcuno ne sapesse di più è pregato di farmi sapere, tnx.

Tra l’altro il nome host del vostro computer deve essere a posto anche in /etc/HOSTNAME (oppure impostatelo col comando hostname o con linuxconf).

Sistemiamo le options editanto il file /etc/ppp/options

connect "/usr/sbin/chat -f /etc/ppp/tin"
/dev/ttyS2 115200
modem
crtscts
defaultroute
noipdefault
name	thisis

La prima riga dice a pppd di connettersi con chat con il file di config tin (che creeremo più avanti).

La terza riga specifica il device (modem) da usare:

COM1 = /dev/ttyS0 \__ Modem Esterni
COM2 = /dev/ttyS1 /
COM3 = /dev/ttyS2 \__ Modem Interni (attenzione ai winmodem)
COM4 = /dev/ttyS3 /

Alcune vecchie distribuzioni usano /dev/cuaX al posto di /dev/ttySX ma ormai cua è un device obsoleto (veniva usato dai kernel di serie 2.0.X, ma ora il kernel di default su tutte le distribuzioni è un 2.2.X).

La quarta riga specifica di usare un modem, la quinta specifica il tipo di compressione dei dati. La sesta riga dice di usare il gateway predefinito del server, per accedere ad Internet, mentre la settima riga specifica che dobbiamo farci assegnare un IP dal server in quanto non ne abbiamo uno fisso.

L’ottava riga specifica quale username usare (in questo caso thisis).

Creiamo il file che deve dire a chat come comportarsi:

# pico /etc/ppp/tin

ABORT		BUSY
""		ATX3S2=255DT02345666
CONNECT	""

La prima riga fa sì che in caso di segnale occupato, chat chiuda la connessione. Nella seconda riga dobbiamo ovviamente mettere il numero di telefono che NOI vogliamo chiamare ed eventualmente qualche impostazione particolare per il modem va tra AD e DT: X3, per esempio è necessaria per le linee italiane, mentre S2=255 ci rende immuni al famoso Ping ATH0 che altrimenti provoca l’entrata del modem nella modalità di inserimento dei comandi (e la conseguente disconnessione dal provider).

Modifichiamo il file /etc/ppp/pap-secrets che contiene il nostro user e la nostra password.

# pico /etc/ppp/pap-secrets

dobbiamo mettere i nostri user e pass in modo che venga fuori una cosa così:

# client	server	secret			IP addresses
thisis           *         ajoke                  *

Dove thisis è lo username e ajoke è la password Tra lo username e l’asterisco c’è un tab e lo stesso tra l’asterisco e la password. Magari date un

# chown root.root /etc/ppp/pap-secrets e poi un
# chmod 600 /etc/ppp/pap-secrets.

L’username che abbiamo messo alla fine di /etc/ppp/options deve essere uguale a quello inserito qua.

Ora facciamo uno scriptino che ci lanci il tutto:

# echo "pppd" > /usr/sbin/provider
# chown root.root /usr/sbin/provider
# chmod 700 /usr/sbin/provider

Ed uno che ammazzi il tutto:

# echo "kill `cat /var/run/ppp0.pid`" > /usr/sbin/stacca
# chown root.root /usr/sbin/stacca
# chmod 700 /usr/sbin/stacca

Con questi due script otterremo la connessione (il primo) e la disconnessione (il secondo). Se il secondo dovesse non funzionare fare un bel

# killall pppd

Eseguite queste semplici operazioni dovremmo essere riusciti a connetterci :)