Differences between revisions 5 and 6
Revision 5 as of 2005-08-17 10:13:57
Size: 7400
Editor: Kurgan
Comment:
Revision 6 as of 2009-04-12 17:33:24
Size: 7400
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
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"]. 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]].

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

OpenWrt/WhiteRussian/ModemSeriale (last edited 2009-04-12 17:33:24 by localhost)