Page suivante - Page précédente - Table des matières

6. Connecter un ordinateur isolé à un FAI en utilisant un modem et PPP

Au moment de configurer Diald pour connecter votre ordinateur à votre FAI, il est nécessaire de faire ce qui suit :

  • Installer le paquetage Diald. Le plus rapide étant d'installer le paquetage qui est contenu dans votre distribution de Linux.
  • Configurer le DNS (à l'aide du fichier /etc/resolv.conf).
  • Vérifier que vous pouvez appeler un FAI. Si votre distribution Linux a déjà un utilitaire pour configurer une connexion, le plus simple est de l'utiliser (pppconfig est l'utilitaire de Debian, kppp celui de KDE, etc.). Si vous avez des problèmes pour vous connecter à un FAI, les « Howto » suivants peuvent vous aider :
  • Configurer les fichiers /etc/ppp/pap-secrets et /etc/ppp/chap-secrets en y mettant votre nom d'utilisateur et votre mot de passe comme décrit plus haut.

Et enfin, pour Diald il faut :

  • Préparer le fichier de configuration de Diald (/etc/diald/diald.options pour la version 0.16.5, et /etc/diald/diald.conf pour les versions plus récentes).
  • Préparer le fichier de filtres /etc/diald/standard.filter, ou mieux, laisser ce fichier tel quel, et en modifier une copie que vous pouvez appeler /etc/diald/personal.filter.
  • Préparer le script qui va se charger de l'appel (/etc/diald/diald.connect qui doit avoir les droits d'exécution de root) et le fichier d'instruction de chat (/etc/chatscripts/provider) qui sera utilisé par le précédent.
  • Préparer les scripts qui vont être lancés aux moments où le lien sera établi et supprimé (/etc/diald/ip-up et /etc/diald/ip-down) si vous voulez utiliser cette possibilité. Les deux scripts doivent avoir les droits d'exécution de root.
  • Préparer, si vous le désirez, les scripts pour établir et supprimer les routes (/etc/diald/addroute et /etc/diald/delroute). Tous les deux doivent avoir les droits d'exécution de root. Cette étape n'est pas nécessaire si vous n'utilisez qu'une seule instance de Diald.
  • Finalement, lancer le démon diald (« /etc/init.d/diald start » pour une Debian et « /etc/rc.d/init.d/diald start » pour une RedHat). Normalement, les scripts pour lancer Diald au moment du démarrage de l'ordinateur sont mis en place au moment de l'installation du paquetage dans les répertoires /etc/rcX.d.

Si vous faites quelque changement que ce soit aux fichiers de configuration de Diald pendant que ce dernier est en train de tourner, vous devez le redémarrer (« /etc/init.d/diald restart » pour une Debian et « /etc/rc.d/init.d/diald restart » pour une RedHat).

6.1 Fichiers /etc/diald/diald.options ou diald.conf

Dans ce fichier d'exemple vous devez vérifier :

  • le port de communication sur lequel votre modem est connecté. Option device ;
  • la vitesse à laquelle votre port va communiquer avec votre modem. Option speed ;
  • le nom d'utilisateur pour ppp. Option pppd-options ;
  • le nombre d'essais de reconnexion après échec et le temps entre ces essais ;
  • les heures de connexion autorisées : option restrict ;
  • si vous désirez utiliser les scripts ip-up et ip-down. Options ip-up et ip-down ;
  • si vous désirez utiliser les scripts addroute et delroute : options addroute et delroute. En général il n'est pas nécessaire de modifier ces scripts mais si vous utilisez plus d'une instance de Diald ou si vous avez une configuration complexe, vous devrez le faire ;
  • si vous utilisez le fichier de filtre standard ou personnalisé : option include.

##########################
# /etc/diald/diald.options
# Device auquel votre modem est connecté
device /dev/ttyS0
# Fichier de log
accounting-log /var/log/diald.log
# Surveillance de la queue
#fifo /var/run/diald/diald.fifo
# Activation du deboguage
# Activer le deboguage réduit les performances
#debug 31
# Nous utilisons PPP comme encapsulateur
mode ppp
# L'adresse IP locale (cette adresse sera automatiquement remplacée par celle
# que vous donne votre FAI au moment où vous vous connectez si vous utilisez
# l'option dynamic).
local 127.0.0.5
# L'adresse IP distante (au moment de la connexion cette adresse est remplacée
# automatiquement par l'adresse IP du serveur distant qui reçoit notre appel).
remote 127.0.0.4
# Masque de sous-réseau pour le lien vers le WAN
# (Wide Area Network -- réseau non local).
netmask 255.255.255.0
# L'adresse IP sera allouée dynamiquement au début de la connexion.
dynamic
# Si le lien est brisé par une action distante, ne le relancer que s'il reste
# des paquets à envoyer.
two-way
# Si le lien existe, router directement vers la vraie interface ppp et non pas
# vers le proxy. Si vous ne faites pas cela, vous aurez une perte de performances
# d'à peu prés 20%. Certains noyaux anciens ne suportent pas reroute.
# Reportez-vous au manuel de diald pour plus d'informations.
reroute
# Diald s'occupera d'établir la route par défaut.
defaultroute
# Scripts pour établir les routes personnalisées.
#addroute "/etc/diald/addroute"
#delroute "/etc/diald/delroute"
# Scripts à exécuter une fois que le lien est établi et prêt, ou une fois que le
# lien est détruit et fermé. Dans les versions 0.9x de Diald, il existe l'option
# ip-goingdown qui peut être utilisée au moment où le lien va être détruit mais
# qu'il est encore actif.
ip-up /etc/diald/ip-up
#ip-down /etc/diald/ip-down
# Scripts utilisés pour connecter ou déconnecter l'interface.
connect "/etc/diald/diald.connect"
#disconnect "/etc/diald/diald.disconnect"
# Utiliser un verrou UUCP pour signaler que le périphérique est en cours
# d'utilisation.
#lock
# Nous nous connectons à l'aide d'un modem. ATTENTION : ne mettez pas cette
# option dans le fichier d'options de ppp sinon il y aura conflit avec les
# options de diald. Pour connaître les options ppp que vous ne pouvez pas
# utiliser dans le fichier pppd-options, reportez-vous à la page de manuel de
# diald et recherchez pppd-options.
modem
crtscts
speed 115200
# Quelques options sur les compteurs et le nombre d'essais.
# Reportez-vous à la page de manuel de Diald pour plus d'informations.
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
# Options qui seront passées à pppd.
# Ces options peuvent être incluses dans le fichier /etc/ppp/options. Elles
# seront considérées comme options par défaut de pppd, mais si vous avez
# d'autres besoins de configurations pour Diald, dans le cas où vous avez
# plusieurs instances, vous devez péciser ici
# noauth - ne pas demander d'authentification au serveur distant.
#          "Infovía Plus" (en Espagne) n'identifie pas votre machine.
# user   - votre nom d'utilisateur et de fai. Demandez à votre FAI la syntaxe
#          exacte vu que certains n'ont pas besoin du @fai.
pppd-options noauth user utilisateur@fai
# Restrictions horaires.
# Cette section doit apparaître avant les filtres.
# La commande restrict est expérimentale et peut changer dans les versions
# futures de diald. Repotez-vous à la page de manuel. (Cet exemple a été testé
# pour la version 0.16 mais je pense qu'il fonctionne sur les versions plus
# récentes.)
# Exemple : utilisation uniquement la nuit entre lundi et vendredi et toute la
# journée les samedi et dimanche.
restrict 8:00:00 18:00:00 1-5 * *
down
restrict * * * * *
# Pas de considérations spéciales sur la tarification (le nombre de secondes
# au départ comprises dans le coût, l'unité de tarification en secondes, temps
# en secondes pour tester s'il faut détruire le lien)
impulse 160,0,0
# Si c'est tarifé à la minute et que les 10 premières seront toujours comptées :
#impulse 600,60,10
# Filtres standards
#include /etc/diald/standard.filter
# Ou filtres personnels
include /etc/diald/personal.filter

6.2 Fichier de filtres personnels

Vous devez modifier ce fichier avec beaucoup de précautions. Il est utilisé pour décider quand et pourquoi il faut établir la connexion, la maintenir, la détruire ou ignorer les paquets en fonction du type de trafic.

En général le fichier de filtres standard de Diald convient pour la plupart des cas mais il peut s'avérer trop ou au contraire pas assez restrictif dans certaines situations. Le fichier personal.filter que nous présentons a subi quelques corrections par rapport à l'original de la version 0.16.

Dans les versions futures de ce document, d'autres exemples commentés plus restrictifs seront inclus.

# /etc/diald/personal.filter
# Les régles de filtrage présentées ici sont les mêmes que dans le fichier
# standard.filter avec les changements suivants :
#
# Changement de 10 à 4 minutes dans le cas de "n'importe quelle autre connexion
# tcp".
# Ajout de "ignore tcp tcp.fin" pour ignorer les paquets FIN ACK.
# Ignorer les paquets icmp (ping et traceroute n'activent pas l'interface).
#
# Voici un ensemble de règles de filtrages assez compliquées
# (Ce sont celles que j'utilise.)
#
# J'ai décomposé les règles en quatre sections :
# Les trames TCP, les trames UDP, les trames ICMP et enfin une règle
# générale pour tout le reste.
ignore icmp any
#------------------------------------------------------------------------------
# Règles pour les trames TCP.
#------------------------------------------------------------------------------
# Commentaires généraux sur cet ensemble de règles :
#
# En général nous souhaitons ne traiter que les données d'une liaison TCP
# ayant un sens pour le temps de déconnexion. Cependant, nous essayons
# d'ignorer les trames sans données.
# Puisque la taille minimale d'un en-tête dans une trame TCP est de 40 octets,
# toutes les trames d'une longueur de 40 ne devraient pas contenir de données.
# De cette manière il est possible de manquer des trames vides (des informations
# optionnelles de routage et d'autres choses supplémentaires peuvent être
# présentes dans un en-tête IP), mais nous devrions en capter la majorité.
# Remarquez que nous ne voulons pas rejeter les trames avec un champ tcp.live
# vide puisque nous les utiliserons plus tard pour accélérer la déconnexion de
# certaines liaisons TCP.
#
# Nous voulons également nous assurer que les trames WWW restent en vie même
# si la socket TCP est arrêtée. Nous faisons cela parce que WWW ne garde pas la
# connexion une fois que les données ont été transférées, et il serait
# gênant d'avoir une liaison qui se crée et se coupe à chaque document.
#
# En dehors de WWW, l'utilisation la plus courante de TCP concerne les
# connexions de longue durée dont la coupure signifie que vous n'allez plus
# avoir besoin du réseau.
# Nous ne voulons pas nécessairement avoir à attendre 10 minutes que la
# connexion se termine alors que nous n'avons ni telnet ni rlogin en cours, donc
# nous voulons accélérer le délai de déconnexion sur les liaisons TCP qui sont
# terminées. Cela est réalisé en mettant dans un cache les trames qui n'ont pas l'indicateur
# live positionné.
# --- début proprement dit de l'ensemble de règles ---
# Quand on débute une connexion on ne donne tout d'abord au lien que 15
# secondes. L'idée ici est de pouvoir éventuellement se rendre compte que le
# réseau de l'autre côté de la connexion n'est pas accessible. Dans ce cas
# il n'est pas nécessaire de donner un temps de vie de 10 minutes au lien.
# Avec la règle ci-dessous nous ne lui donnons initialement que 15 secondes.
# Si le réseau est accessible, nous devrions normalement recevoir une
# réponse contenant des données dans les 15 secondes. Si cela pose un problème
# parce que vous avez des réponses lentes de certains sites que vous
# visitez régulièrement, vous pouvez augmenter le temps avant déconnexion ou
# bien supprimer cette règle.
accept tcp 15 tcp.syn
# Empêcher named de garder la connexion active.
ignore tcp tcp.dest=tcp.domain
ignore tcp tcp.source=tcp.domain
# (Argh ! Le telnet de SCO commence par envoyer des SNY vides et n'initie la
# connexion que s'il obtient une réponse. Pfuuutt...
accept tcp 5 ip.tot_len=40,tcp.syn
# Empêcher les trames vides (autres que les trames
# vides SNY) de maintenir le lien actif.
ignore tcp ip.tot_len=40,tcp.live
# Modifications d'Andres Seco pour ignorer les paquets FIN ACK.
ignore tcp tcp.fin
# On s'assure que le transfert http maintient la ligne active pendant 2
# minutes, même après que c'est terminé.
# REMARQUE : votre fichier /etc/services ne devrait pas définir le service tcp
# www, auquel cas vous devez commenter les deux lignes suivantes et vous
# procurer un fichier /etc/services plus récent. Lisez la FAQ pour savoir
# comment obtenir un nouveau fichier /etc/services.
accept tcp 120 tcp.dest=tcp.www
accept tcp 120 tcp.source=tcp.www
# Idem pour https
accept tcp 120 tcp.dest=tcp.443
accept tcp 120 tcp.source=tcp.443
# Une fois que le lien n'est plus actif, nous tentons de stopper la connexion
# rapidement. Remarquez que si le lien est déjà arrêté, un changement d'état
# ne le ramènera pas à l'état actif.
keepup tcp 5 !tcp.live
ignore tcp !tcp.live
# une donnée ftp ou une connexion ftp peut être attendue pour rendre compte
# du trafic relativement fréquent.
accept tcp 120 tcp.dest=tcp.ftp
accept tcp 120 tcp.source=tcp.ftp
# REMARQUE : les données ftp ne sont pas définies dans le fichier /etc/services
# distribué dans les dernières versions de NETKIT, donc j'ai commenté ce
# passage.
# Si vous désirez le définir, ajoutez la ligne suivante à votre fichier
# /etc/services :
# ftp-data        20/tcp
# et décommentez les deux règles suivantes :
#accept tcp 120 tcp.dest=tcp.ftp-data
#accept tcp 120 tcp.source=tcp.ftp-data
# Si nous n'avons pas réussi à l'avoir avec les règles ci-dessus, donnons au
# lien 10 minutes de plus.
#accept tcp 600 any
# Modification d'Andres Seco. Ne lui donnons que 4 minutes de plus.
accept tcp 240 any
# Règles pour les trames UDP.
#
# Nous donnons dès à présent un temps limite aux requêtes de domaine puisque
# nous voulons seulement qu'elles établissent le lien, pas qu'elles le maintiennent
# pour un long moment.
# Cela parce que le réseau sera généralement établi par un appel de la
# bibliothèque de résolution de nom (à moins que vous n'ayez mis toutes les
# adresses que vous utilisez fréquemment dans /etc/hosts, auquel cas vous
# découvrirez d'autres problèmes.)
# Remarquez que vous ne devez pas donner une valeur de temps limite de
# déconnexion plus courte que le temps supposé que va mettre votre DNS pour
# répondre. Sinon, quand le lien original s'établit, il risque d'y avoir
# une attente supérieure à celle qu'il y a entre les séries de trames initiales
# avant qu'une trame destinée à maintenir le lien passe par ce dernier.
# Ne pas activer le lien pour rwho.
ignore udp udp.dest=udp.who
ignore udp udp.source=udp.who
# Ne pas activer le lien pour RIP.
ignore udp udp.dest=udp.route
ignore udp udp.source=udp.route
# Ne pas activer le lien pour NTP ou pour 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
# Ne pas activer les requêtes de nom de domaine entre deux exécutions de named.
ignore udp udp.dest=udp.domain,udp.source=udp.domain
# Activer le réseau pour les requêtes de domaine qui ne viennent pas de
# named.
accept udp 30 udp.dest=udp.domain
accept udp 30 udp.source=udp.domain
# Faire la même chose pour les diffusions de netbios-ns.
# REMARQUE : votre fichier /etc/services peut ne pas définir le service
# netbios-ns, auquel cas vous devez commenter les trois lignes suivantes.
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
# empécher les transferts de routed et gated de maintenir le lien actif
ignore udp tcp.dest=udp.route
ignore udp tcp.source=udp.route
# Le reste a droit à 2 minutes.
accept udp 120 any
# Récupérer toutes les trames que nous n'avons pas traitées auparavant et donner 30
# secondes de durée de vie à la connexion.
accept any 30 any

6.3 Téléphoner

Le fichier /etc/diald/diald.connect (il doit avoir les droits d'exécution) :

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

Le fichier /etc/chatscripts/provider. Dans ce fichier d'exemple vous devez modifier le numéro de téléphone à appeler (le 0123456789) :

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

6.4 Script de lancement de la connexion

Il doit avoir les droits d'exécution.

Ce script peut être utilisé pour de nombreuses tâches (synchronisation, envoi des messages en attente, récupération des messages chez le FAI, etc.).

#!/bin/sh
iface=$1
netmask=$2
localip=$3
remoteip=$4
metric=$5
# mise à jour de l'heure et de la date
# netdate ntp.server.somecountry
# s'occupe des mails dans la file d'attente
# runq
echo `date` $1 $2 $3 $4 $5 | mail -s "diald - connexion" root@localhost


Page suivante - Page précédente - Table des matières