Avanti Indietro Indice

6. Connessione di un computer isolato ad un ISP utilizzando unmodem e PPP

Quando si configura diald per connettersi con il proprio computer ad un ISP, è necessario operare come segue:

E infine configurare Diald:

Se vengono fatti dei cambiamenti al file di configurazione quando diald è attivo, è necessario farlo ripartire («/etc/init.d/diald restart» con Debian, «/etc/rc.d/init.d/diald restart» con RedHat).

6.1 Il file /etc/diald/diald.options o diald.conf

In questo file di esempio bisogna controllare:

##########################
# /etc/diald/diald.options

# Dispositivo a cui è connesso il modem
device /dev/ttyS0

# File di log
accounting-log /var/log/diald.log

# Monitoring queue
#fifo /var/run/diald/diald.fifo

# Attivazione debug
# Attivare il debug riduce le prestazioni
#debug 31

# Usiamo PPP come incapsulatore
mode ppp

# IP locale (quando si è connessi questo indirizzo viene
# automaticamente modificato dall'ISP se si utilizza l'opzione per l'IP
# dinamico)
local 127.0.0.5

# IP remoto (quando si è connessi questo indirizzo viene
# automaticamente cambiato nell'IP del server remoto che riceve la
# chiamata)
remote 127.0.0.4

# Maschera di sottorete per la connessione wan
netmask 255.255.255.0

# L'indirizzo IP viene assegnato quando si stabilisce la connessione
dynamic

# Se la connessione viene chiusa dalla parte remota, ristabilisci la
# connessione solo se ci sono pacchetti uscenti
two-way

# Quando la connessione è attiva, indirizza direttamente
# all'interfaccia ppp reale e non all'interfaccia proxy. Non fare questo
# riduce le prestazioni del 20%. Ci sono vecchi kernel che non
# supportano il reroute (reindirizzamento). Consultare il manuale di diald
# per ulteriori informazioni.
reroute

# Diald assegna l'instradamento di default all'interfaccia SLIP usata
# come proxy
defaultroute

# Script per personalizzare l'instradamento
#addroute "/etc/diald/addroute"
#delroute "/etc/diald/delroute"

# Script da eseguire quando la connessione è su e pronta oppure quando
# è giù e chiusa. Nella versione 0.9x c'è anche un'altra opzione
# ip-goingdown che può essere utilizzata per utilizzare comandi
# quando la connessione sta per essere chiusa ma è ancora su.
ip-up /etc/diald/ip-up
#ip-down /etc/diald/ip-down

# Script usati per connettere o disconnettere l'interfaccia
connect "/etc/diald/diald.connect"
#disconnect "/etc/diald/diald.disconnect"

# Usere il lock UUCP per segnalare che il dispositivo è utilizzato
#lock

# Ci si connette con un modem. Attenzione: Non specificare queste
# opzioni nel file options di ppp perché creeranno conflitto con quelle
# usate da diald. Per sapere quali opzioni di ppp non possono essere
# usate nel file options leggere la man page di diald e cercare pppd-options.
modem
crtscts
speed 115200

# Alcuni timer e opzioni per la ripetizione dei tentativi
# riferirsi alla man page di diald per maggiori informazioni
connect-timeout 120
redial-timeout 60
start-pppd-timeout 120
died-retry-count 0
redial-backoff-start 4
redial-backoff-limit 300
dial-fail-limit 10

# Opzioni da passare a pppd
# Queste opzioni possono essere incluse nel file /etc/ppp/options che
# contiene le opzioni di default per pppd, ma se si ha bisogno di
# utilizzare configurazioni differenti di diald per più di una istanza,
# è necessario metterle qui.
# noauth - non richiedere al remoto di autenticarsi
# user   - lo username. chiedere all'isp la sintassi, alcuni non
# richiedono la terminazione @isp.
pppd-options noauth user user@isp

# Le restrizioni
# Questa sezione deve stare prima dei filtri
# Il comando restrict è sperimentale e può variare in altre versioni
# di diald. Controllare la man page. (questo esempio è stato controllato
# con la versione 0.16, ma penso che funzioni anche con versioni
# successive).
# Per esempio: usare solo di notte dal lunedì al venerdì e tutto il
# giorno di sabato e domenica.
restrict 8:00:00 18:00:00 1-5 * *
down
restrict * * * * *

# Non ci sono considerazioni speciali sulle tariffe.
# (i primi secondi sono inclusi nel costo iniziale, l'unità della
# tariffa è il secondo, tempo in secondi per controllare se è il caso di
# chiudere)
#impulse 0,0,0
# Bononet Noche (Spain-Telefónica) viene pagata in secondi dopo i
# primi 160 secondi
impulse 160,0,0
# se fosse pagata in minuti venisse sempre pagata dopo i primi 10 minuti
#impulse 600,60,10

# Filtri standard
#include /etc/diald/standard.filter
# o filtri personali
include /etc/diald/personal.filter

6.2 Il file dei filtri personali

Le modifiche a questo file devono essere fatte con molta attenzione. Questo file viene utilizzato per decidere quando e come stabilire la connessione, mantenerla, chiuderla o ignorare un pacchetto a seconda del tipo di traffico.

Generalmente il file dei filtri standard di Diald è sufficiente per la maggior parte dei casi, ma forse potrebbe essere troppo restrittivo o non abbastanza in certe situazioni. Il file personal.filter che viene riportato mostra alcune modifiche rispetto all'originale della versione 0.16.

Nelle prossime versioni di questo documento verranno inclusi esempi commentati maggiormente restrittivi.

# /etc/diald/personal.filter
# Le regole per i filtri mostrate qui sono le stesse del file
# standard.filter con i  seguenti cambiamenti:

# Modificato da 10 a 4 minuti in "any other tcp conectio".
# Aggiunto "ignore tcp tcp.fin" per ignorare il FIN ACK packet.
# Ignorare i pacchetti icmp (ping e traceroute non fanno partire
# l'interfaccia).
  

# Questo è un insieme di regole decisamente complicato.
# (questo set è quello che uso io)
# Ho diviso le regole in 4 sezioni.
# Pacchetti TCP, UDP, ICMP e una serie di regole generali alla fine.

ignore icmp any

#------------------------------------------------------------------------------
# Regole per pacchetti TCP.
#------------------------------------------------------------------------------
# Commenti generali sull'insieme di regole:
#
# In generale, si vorrebbero trattare solamente i dati sul collegamento TCP come
# significativi per i timeout. Quindi si cerca di ignorare i pacchetti
# che non contengono dati. Dal momento che l'insieme di header più breve
# in un pacchetto TCP/IP è di 40byte, ogni pacchetto di lunghezza 40 non
# può contenere dati.
# Potremmo perdere alcuni pacchetti vuoti in questa maniera (informazioni
# di instradamento o altri extra potrebbero essere contenuti nell'header
# IP), ma dovremmo comunque intercettarne la maggior parte. Da notare che non
# vogliamo filtrare i pacchetti con tcp.live non settato, dal momento
# che possiamo utilizzarli per accelerare la disconnesione su certi link TCP.
#
# Vogliamo inoltre essere sicuri che i pacchetti WWW sopravvivano anche
# se il socket TCP è chiuso. Facciamo così perchè WWW non mantiene aperta
# la connessione ona volta che i dati sono stati trasferiti e sarebbe
# molto scomodo avere una connessione che continua ad andare su e giù
# ogni volta che si scarica un documento.
#
# al di là del WWW l'uso più comune del TCP rimane quello per le
# connessioni su tempi lunghi, le chiusura delle quali significa che non
# si ha più bisogno della connessione in rete. Non vogliamo aspettare 10
# minuti perché la connesione venga chiusa quando non abbiamo telnet o
# rlogin che stanno girando, quindi vogliamo accelerare il timeout sulle
# connessioni TCP che sono state chiuse. riusciamo ad ottenerlo
# catturando i pacchetti che non hanno il flag live settato.

# --- inizio dell'insieme di regole ---

# Quando iniziamo una connessione le concediamo, inizialmente, solo 15
# secondi. L'idea è quella di avere a che fare con la possibilità che la
# rete all'etremità opposta della connessione non sia raggiungibile. In
# questo caso non è il caso di dare un tempo di vita di 10 minuti alla
# connessione. Quindi, con la regola più sotto diamo solo 15 secondi
# alla connessione iniziale. Se la rete è raggiungibile normalmente
# verrà ricevuta una risposta prima di 15 secondi. Se questo causa
# qualche problema nel caso di risposte perticolarmente lente da qualche
# sito a cui si accede normalmente, si può rimuovere il timeout oppure
# la regola stessa.
accept tcp 15 tcp.syn

# Evitiamo che gli xfer di named mantengano il link attivo
ignore tcp tcp.dest=tcp.domain
ignore tcp tcp.source=tcp.domain

# (Ack! Il telnet di SCO comincia mandando dei SYN vuoti e stabilisce
# la connessione solamente se riceve una risposta.)
accept tcp 5 ip.tot_len=40,tcp.syn

# Evitiamo che pacchetti vuoti mantengano su la connessione (pacchetti
# diversi da SYN vuoti)
ignore tcp ip.tot_len=40,tcp.live

# Una modifica di Andres Seco per ignorare i pacchetti FIN ACK.
ignore tcp tcp.fin

# Facciamo in modo che i trasferimenti http mantengano la connessione
# per 2 minuti anche dopo che sono finiti.
# NOTA: Il file /etc/services potrebbe non definire il servizio www tra
# quelli tcp, nel qual caso si devono commentare le seguenti righe
# oppure ottenere un file /etc/services aggiornato. Leggere le FAQ per
# informazioni su come ottenere un nuovo /etc/services.
accept tcp 120 tcp.dest=tcp.www
accept tcp 120 tcp.source=tcp.www
# Stessa cosa per http
accept tcp 120 tcp.dest=tcp.443
accept tcp 120 tcp.source=tcp.443

# Una volta che la connessione non è più attiva cerchiamo di chiudere
# la connessione velocemente. Notare che se la connessione è giù, un
# cambiamento di stato non la riattiverà.
keepup tcp 5 !tcp.live
ignore tcp !tcp.live

# Un ftp-data o una connessione ftp potrebbe essere considerato un
# traffico ragionevolmente frequente.
accept tcp 120 tcp.dest=tcp.ftp
accept tcp 120 tcp.source=tcp.ftp

# NOTA: L'ftp-data non è definito nel file /etc/services che viene
# installato con le ultime versioni di netkit, quindi è meglio
# commentare le regole seguenti. E' possibile definire il servizio
# aggiungendo le seguenti righe nel file /etc/services:
# ftp-data        20/tcp
# e levando il commento alle seguenti righe
#accept tcp 120 tcp.dest=tcp.ftp-data
#accept tcp 120 tcp.source=tcp.ftp-data

# Se non rientra nei casi precedenti, diamo alla connesione 10 minuti di
# tempo.
#accept tcp 600 any
# Modificacion de Andres Seco. Solo dejar 4 minutos mas.
accept tcp 240 any

#------------------------------------------------------------------------------
# Regole per pacchetti UDP
#------------------------------------------------------------------------------

# Mandiamo direttamente in timeout le richieste al nameserver,
# vogliamo che facciano attivare la connessione non mantenerla su a lungo.
# Questo serve perché, di solito, la connessione verrà attivata da una
# chiamata alla libreria del resolver (almeno che non si abbiano gli
# indirizzi frequentemente utilizzati in /etc/hosts nel qual caso
# sorgerebbero altri problemi).

Da notare che non si dovrebbe rendere il timeout più breve del tempo
che ci si apetta che il server DNS impieghi a rispondere. Altrimenti
quando la connessione iniziale verrebbe stabilita potrebbe esserci un
ritardo più grande del timeout tra la serie di pacchetti iniziale e prima
che passi per essa un pacchetto che la mantenga su.

# Non attivare la connessione per rwho
ignore udp udp.dest=udp.who
ignore udp udp.source=udp.who
#Non attivare la connessione per RIP
ignore udp udp.dest=udp.route
ignore udp udp.source=udp.route
# Non attivare la connessione per NTP o timed
ignore udp udp.dest=udp.ntp
ignore udp udp.source=udp.ntp
ignore udp udp.dest=udp.timed
ignore udp udp.source=udp.timed
# Non attivare la connessione su richieste al name server tra due
# named attivi
ignore udp udp.dest=udp.domain,udp.source=udp.domain
# Tiriamo su la rete ogni volta che tentiamo una richiesta di dominio da qualche
# altro posto rispetto a named.
accept udp 30 udp.dest=udp.domain
accept udp 30 udp.source=udp.domain
# Facciamo lo stesso per i broadcast del netbios-ns
# NOTA: il file /etc/services potrebbe non definire il servizio
# netbios-ns, nel qual caso si dovrebbero commentare le seguenti 3 righe
ignore udp udp.source=udp.netbios-ns,udp.dest=udp.netbios-ns
accept udp 30 udp.dest=udp.netbios-ns
accept udp 30 udp.source=udp.netbios-ns
# impediamo ai trasferimenti di routed e gated di tenere su il link
ignore udp tcp.dest=udp.route
ignore udp tcp.source=udp.route
# Ogni altra cosa prende 2 minuti
accept udp 120 any

# Catturiamo ogni pacchetto che non abbiamo già esaminato e diamo alla
# connessione 30 secondi di vita.
accept any 30 any

6.3 Fare la chiamata

Il file /etc/diald/diald.connect (deve avere i permessi in esecuzione):

/usr/sbin/chat -f /etc/chatscripts/provider

Il file /etc/chatscripts/provider. In questo esempio bisogna mettere il numero di telefono da chiamare.

ABORT BUSY
ABORT "NO CARRIER"
ABORT VOICE
ABORT "NO DIALTONE"
ABORT "NO ANSWER"
"" ATZ
OK ATDT123456789
CONNECT \d\c

6.4 Lo script per la connessione

Deve avere i permessi di esecuzione.

Questo script può essere utilizzato per compiti diversi (tempo di sincronizzazione, spedire la posta in coda, scaricarla ecc.).

Nell'esempio viene spedito un messaggio a root con i dati passati allo script (interfaccia, maschera di sottorete, indirizzo ip locale, indirizzo ip remoto e il costo di indirizzamento):

#!/bin/sh

iface=$1
netmask=$2
localip=$3
remoteip=$4
metric=$5

# Spedisci ora e data
# netdate ntp.server.somecountry

# Spedisci la posta in coda
# runq

echo `date` $1 $2 $3 $4 $5 | mail -s "diald - conecting" root@localhost


Avanti Indietro Indice

Hosting by: hurra.com
Generated: 2007-01-26 17:56:19