Mise en place de diald pour Linux - un exemple
GNU Copyright par Harish Pillay,
[email protected] version
fran�aise par Xavier Serpaggi
1996
Ce qui suit est un exemple de configuration que j'ai faite fonctionner
sur plusieurs machines et qui autorise l'installation automatique de
diald au moment du d�marrage. Quand une demande de connexion se
pr�sente, il t�l�phone automatiquement � mon FAI (Fournisseur d'Acc�s
Internet) pr�f�r�, Pacific Internet ici � Singapour.
______________________________________________________________________
Table des mati�res
1. Fichiers de configuration
1.1 Fichier /etc/rc.d/rc.local
1.2 Script PPP � l'aveuglette
1.3 Fichier /etc/diald.conf
1.4 Fichier diald.defs
2. Ma configuration
3. Remarques
______________________________________________________________________
11.. FFiicchhiieerrss ddee ccoonnffiigguurraattiioonn
Merci beaucoup � Eric Schenk pour le super outil qu'est diald.
11..11.. FFiicchhiieerr //eettcc//rrcc..dd//rrcc..llooccaall
#! /bin/sh
# Mettez ici toutes les commandes de configuration locale
# On lance gpm
echo "Lancement de gpm..."
gpm -t ms &
# d�marrage d'innd
/etc/rc.d/rc.news
# d�marrage du d�mon httpd du CERN
echo "D�marrage de CERN httpd avec proxy et cache."
/usr/local/bin/httpd
# chargement des modules n�cessaires
/etc/rc.d/rc.modules
# d�marrage de diald
echo "D�marrage du d�mon diald pour Pacific Internet ..."
cd /usr/lib/ppp
/usr/lib/ppp/diald.pacific.internet
/usr/lib/ppp/diald.pacific.internet
/usr/sbin/diald /dev/ttyS1 /dev/ttyS1 lock debug 20 -m ppp local 127.0.0.2 \
remote 127.0.0.3 defaultroute modem crtscts \
connect "chat -v -f /usr/lib/ppp/pppchat.pi" \
dynamic -- debug noipdefault
/usr/lib/ppp/pppchat.pi
ABORT "NO CARRIER"
ABORT BUSY
"" ATZ OK
ATm1s50=255s111=0DT1-800-555-1212
CONNECT ""
login MONNOMDELOGIN
ssword MOMMOTDEPASSE
11..22.. SSccrriipptt PPPPPP �� ll''aavveeuugglleettttee
� Amor�age de minicom.
� Connexion au fournisseur d'acc�s
� Invoquer PPP de l'autre c�t�
� Suspendre minicom (alt-A-J).
� Invoquer le script suivant
#!/bin/sh
# Mise en place d'une liaison PPP � l'aveuglette - script appel� blind.ppp
DEVICE=ttyS1
(
stty 38400 -tostop
pppd -detach debug noipdefault defaultroute mru 1500 /dev/$DEVICE &
exit 0
) /dev/$DEVICE
11..33.. FFiicchhiieerr //eettcc//ddiiaalldd..ccoonnff
Mon fichier /etc/diald.conf (inchang� par rapport � la distribution
originale) :
# Voici un ensemble de r�gles de filtrages assez compliqu�es
# (Ce sont les r�gles 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.
#------------------------------------------------------------------------------
# R�gles pour les trames TCP.
#------------------------------------------------------------------------------
# Commentaires g�n�raux sur cet ensemble de r�gles :
#
# En g�n�ral nous n'aimerions 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�e.
# 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�e.
# 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 rejetter 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 la liaison qui se cr�ee et se coupe � chaque document.
#
# En dehors de WWW l'utilisation la plus courante de TCP est pour les
# connexions de longues dur�es 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. Ceci 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 alors 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 la part 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 de maintenir le lien actif (autres que les trames
# vides SNY).
ignore tcp ip.tot_len=40,tcp.live
# On s'assure que le transfert http maintient la ligne active pendant 2
# minutes, m�me apr�s que ce soit 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
# 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 au dessus, donnons au
# lien 10 minutes de plus.
accept tcp 600 any
# R�gles pour les trames UDP.
#
# Nous donnons d�s � pr�sent un temps limite aux requettes de domaine puisque
# nous voulons juste qu'elles �tablissent le lien, pas qu'elles le maintiennent
# pour un long moment.
# Ceci 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 trames que nous n'avons pas trait�es auparavant et donner 30
# secondes de dur�e de vie � la connexion.
accept any 30 any
11..44.. FFiicchhiieerr ddiiaalldd..ddeeffss
Mon fichier diald.defs (inchang� par rapport � la distribution
originale) :
# D�finition des r�gles de protocole par d�faut
prule tcp tcp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9
prule udp udp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9
prule icmp icmp 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9
prule any any 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9
# D�finition des en-t�tes des trames internet.
var ip.ihl 0(24)&0xf
var ip.version 0(28)&0xf
var ip.tos 1(24)&0xff
var ip.tot_len 2(16)&0xffff
var ip.id 4(16)&0xffff
var ip.frag_off 6(16)&0x3fff
var ip.ttl 8(24)&0xff
var ip.protocol 9(24)&0xff
var ip.check 10(16)&0xffff
var ip.saddr 12
var ip.daddr 16
# D�finition des en-t�tes des trames TCP.
var tcp.source +0(16)&0xffff
var tcp.dest +2(16)&0xffff
var tcp.seq +4
var tcp.ack_seq +8
var tcp.doff +12(28)&0xf
var tcp.fin +13(24)&0x1
var tcp.syn +13(25)&0x1
var tcp.rst +13(26)&0x1
var tcp.psh +13(27)&0x1
var tcp.ack +13(28)&0x1
var tcp.urg +13(29)&0x1
var tcp.live +127
# D�finition de en-t�tes des trames UDP.
var udp.source +0(16)&0xffff
var udp.dest +2(16)&0xffff
var udp.len +4(16)&0xffff
var udp.check +6(16)&0xffff
# D�finition des en-t�tes des trames ICMP.
var icmp.type +0(24)&0xff
var icmp.code +1(24)&0xff
var icmp.checksum +2(16)&0xffff
var icmp.echo.id +4(16)&0xffff
var icmp.echo.sequence +6(16)&0xffff
var icmp.gateway +4
22.. MMaa ccoonnffiigguurraattiioonn
� Un 486/66 avec 20 Mo de ram et plein d'espace disque :-)
� des UART 16550 en abondance
� diald 0.11, pppd 2.2.0d, noyau 1.3.95 avec modules.
33.. RReemmaarrqquueess
� Changez le nom du port s�rie /dev/ttyS1 ``ci-dessus'' de mani�re �
ce qu'il corresponde � vos attentes.
� Assurez vous que vous pouvez vous connecter avec PPP en utilisant
le script blind.ppp.
Si vous avez des questions �crivez � Harish Pillay �
[email protected]