Configurazione di un modem seriale sul WRT54GS
Questa configurazione non prevede l'uso del DTR.
Per la versione con il DTR, che richiede di avere il supporto hardware nell'interfaccia seriale, vedi ../ModemSerialeDtr. Per costruire l'interfaccia seriale necessaria, con o senza DTR, vedi OpenWrt/Hardware/Seriale.
Introduzione
Usare un modem seriale sul WRT e` possibile, ma e` un bel casino perche` mancano le linee di controllo dalle seriali (DCD, CTS, RTS, DTR, DSR). Questo provoca alcuni problemi anche gravi, se volete provare e poi vi trovate una bolletta di trenta milioni, non date la colpa a me. La mancanza del DCD richiede che il modem risponda "CONNECT" al momento della connessione, e se per caso cade la linea per colpa del modem, il pppd non se ne rendera` conto, e sara` convinto di essere ancora collegato. Al contrario, la mancanza del DTR impedisce al pppd di usare questa linea di controllo per dire al modem di riattaccare, quindi il ppp potrebbe essere convinto di avere riattaccato mentre il modem resta connesso all'infinito. Per cercare di ovviare al problema si puo` usare uno script di disconnessione che esegua la sequenza +++ATH, la quale pero` non e` accettata da tutti i modem allo stesso modo. Il mio TA ISDN, per esempio, quando e` in modo "PPP" ignora QUALSIASI carattere, quindi non riesco a farlo tornare al modo comandi con "+++". Spesso quando il link PPP termina, e` il remoto che riattacca, il che fa riattaccare istantaneamente anche il modem locale, ma questa non e` una certezza molto solida sulla quale appoggiarsi per salvare la propria bolletta.
Allo stato attuale delle cose (White Russian RC2) inoltre il pppd non e` compilato con il supporto per libpcap e i filtri, quindi di fatto il dial on demand non e` utilizzabile, perche` il rumore di fondo di internet terrebbe la linea sempre connessa.
Pacchetti necessari
- setserial
- microcom (comodo ma non fondamentale)
- chat (permette al ppp di dialogare con il modem)
- pppstats (facoltativo)
Configurazione della seriale 1
Dal momento che tts/0 e` usata dalla console, noi userermo tts/1. Prima di tutto occorre usare setserial per assegnare un IRQ a tts/1, infatti di default questa ne e` priva. Inoltre, lo usiamo anche per dare la velocita` giusta alla seriale. Questa cosa va fatta al boot, per cui occorre inserire i comandi in /etc/init.d/Squalcosa. Abbiamo nel pacchetto di Setserial il comodo file /etc/init.d/S15serial, che va modificato per impostare velocita` e quant'altro. RTFM di seterial per i parametri.
/usr/sbin/setserial /dev/tts/1 irq 3 spd_hi
Configurazione dei moduli
Per usare il ppp, occorre caricare alcuni moduli. Modificare il file /etc/modules inserendo queste righe:
slhc ppp_genric ppp_deflate ppp_async
Configurazione del kernel
Se si vuole usare il dial on demand, e si ha ip dinamico (come e` solitamente) occorre abilitare nel kernel la funzionalita` apposita, cosi`:
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
Oppure, piu` pulito, modificando /etc/sysctl.conf, aggiungendo una riga cosi`:
net.ipv4.ip_dynaddr=1
Configurazione del PPP
Per configurare il PPP, ho adottato una logica minimalista, mettendo tutti i dati necessari in un file unico, sotto /etc/ppp/peers, che verra` poi richiamato dal comando ppp dial <nomefile>.
Rimuovere o rinominare il file /etc/ppp/options, altrimenti queste opzioni vengono incluse per qualsiasi connessione.
Creare un file /etc/ppp/peers/<nome del tuo provider>, con questo contenuto:
# username (in chap-secrets) name kurgan # server name (in chap-secrets) remotename casa # scripts per la connessione e la disconnessione connect "/usr/sbin/chat -v -f /etc/ppp/chatscripts/dialup -T <numero di telefono del provider>" disconnect "/usr/sbin/chat -v -f /etc/ppp/chatscripts/disconnect" # siccome manca il DCD, mi serve un metodo per sapere se e` caduta la linea. # per questo uso le funzioni di echo LCP (un ping ogni 5 secondi, se ne manco 2 cade la linea) lcp-echo-interval 5 lcp-echo-failure 2 # dopo una caduta di linea, attendi 5 secondi prima di richiamare holdoff 5 # Dopo 10 connessioni fallite di fila, termino il demone maxfail 10 # Prendo i parametri di rete che mi passa il remoto ipcp-accept-remote usepeerdns # seriale tts/1 # velocita` 115200 # non ho le linee di controllo local nocrtscts nocdtrcts # sono il default GW defaultroute replacedefaultroute # debug, per loggare di piu` debug # se voglio il dial on demand, con relativo timeout di disconnessione demand idle 20 # il remoto non deve autenticarsi su di me, ma viceversa noauth # se il remoto non capisce la compressione, la disabilito in vario modo noaccomp nopcomp nobsdcomp nodeflate noccp
Creare la directory /etc/ppp/chatscripts
Creare il file di chat per il dial con nome /etc/ppp/chatscripts/dialup. Notare il "&D0" per dire al modem di ignorare il DTR, che tanto non abbiamo. Chiaramente questo va adattato al modem che si usa, se necessario.
# Uncomment the following line to see the connect speed. # It will be logged to stderr or to the file specified with the -r chat option. #REPORT CONNECT ABORT BUSY ABORT VOICE ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "NO DIAL TONE" "" ATZ OK AT&D0D\T CONNECT ""
Creare il file per l'hangup (che come detto all'inizio, puo` non funzionare e dover essere modificato o commentato via dalla configurazione del PPP) con il nome /etc/ppp/chatscripts/disconnect
TIMEOUT 6 ABORT "NO CARRIER" '' \d\d\d\d\c '' +++\c 'OK' 'ATH'
Lanciare il ppp per prova con "pppd dial <nome dello script in /etc/ppp/peers>" e vedere se si connette.
Configurazioni varie accessorie
- Impostare i DNS del provider in nvram (facoltativo se si usa lo script di lancio del pppd, che si occupa lui della cosa)
Modificare /etc/init.d/S40network per NON configurare l'interfaccia WAN, visto che questa non ci sara` di nessun aiuto. Anzi, tende a fare casino. Basta commentare la riga che dice "ifup wan"
Creare /etc/init.d/S41pppd se si vuole lanciare il ppp al boot. Questo script accetta i comandi start, restart, stop e hup. I primi tre sono ovvi, mentre "hup" serve a chiudere la connessione in corso senza terminare il demone (vale solo se si usa il modo "dial on demand"). Ovviamente occorre impostare i valori giusti per l'indirizzo IP del DNS del provider e per il nome del provider (che e` poi il nome del file di configurazione dentro a /etc/ppp/peers che si vuole usare per connettersi).
case "$1" in start|restart) echo "Killing PPPD" /usr/bin/killall -TERM pppd 2> /dev/null echo "nameserver <indirizzo ip del dns del provider>" > /tmp/resolv.conf echo "Starting PPPD" /usr/sbin/pppd call <nome del provider> ;; stop) echo "Hanging up link and killing PPPD" /usr/bin/killall -HUP pppd /usr/bin/killall -TERM pppd /bin/echo "0x00" > /proc/sys/diag ;; hup) echo "Hanging up link, not killing PPPD" /usr/bin/killall -HUP pppd ;; esac