Rodney.van.den.Oever@tip.nl
Olivier.Fourmaux@lip6.fr
, 28 Novembre 1997). Mini-HOWTO décrivant
comment utiliser une machine de son réseau local comme routeur PPP avec
connexion à la demande. Le dial-on-demand correspond à
l'utilisation au besoin du modem, soit littéralement : composition à
la demande que nous traduisons en connexion à la demande.
(C)opyright 1997 Olivier Fourmaux pour la version française. Toute ressemblance avec les docs Linux de mon co-burote et néanmoins ami Christophe Deleuze, traducteur forcené depuis sa tendre enfance, serait purement fortuite.
Ce document décrit une configuration qui fonctionne pour moi, utilisez la à vos propres risques. S'il manque quoi que ce soit d'important ou si quelque chose est complètement faux, s'il vous plait, communiquez le moi !
Une chose que l'on peut rajouter, c'est la manière de configurer un serveur de noms local.
Les commentaires sur la traduction sont à envoyer à Olivier Fourmaux,
Olivier.Fourmaux@lip6.fr
. De même si vous trouvez des erreurs de
fond, demandez moi d'abord, j'ai peut-être traduit un peu vite :)
Ce document décrit comment gérer une connexion dial-on-demand et comment utiliser un hôte Linux connecté à un réseau local en tant que routeur PPP gérant la connexion à la demande.
Le kerneld-mini-HOWTO décrit déjà comment kerneld (daemon du
noyaux linux) exécute le script request-route
pour l'ajout
dynamique de route. Pour plus d'information, le kerneld-mini-HOWTO
existe en francais. Ici nous ne décrivons qu'une configuration détaillé
adaptée à l'ajout de route avec une connexion modem.
Si vous utilisez un petit réseau local chez vous, la connexion à la demande fournit une solution intéressante de gestion transparente d'un accès Internet pour plusieurs machines.
______________________________
__|__ ___|___ Liens PPP vers le
| | réseau local | | ______ fournisseur d'accès
| PC | 192.168.1.0 |Routeur|--| modem|------------------>
| | | Linux | |______| x.x.x.x
|_____| |_______| (adresse IP
named dynamique)
pppd
Cette configuration nécessite :
ppp-2.2.0f.tar.gz
ou plus récentmodules-2.0.0.tar.gz
ou plus récentipfwadm-2.3.tar.gz
(http://www.xos.nl/linux/ipfwadm
)Les étapes suivantes sont à réaliser :
Avant tout, il faut compiler un noyau avec kerneld, PPP et IP-masquerade. Ci-dessous sont indiquées les options nécessaires pour cette configuration (en Majuscule), les autres options réseau telles que firewall logging ou transparent proxying peuvent être choisies mais ne sont pas obligatoires.
cd /usr/src/linux
make config
ou
make menuconfig
* * Code maturity level options * Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [Y/n/?] * * Loadable module support * Enable loadable module support (CONFIG_MODULES) [Y/n/?] Set version information on all symbols for modules (CONFIG_MODVERSIONS) [N/y/?] Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?] * Networking support (CONFIG_NET) [Y/n/?] * * Networking options * Network firewalls (CONFIG_FIREWALL) [Y/n/?] TCP/IP networking (CONFIG_INET) [Y/n/?] IP: forwarding/gatewaying (CONFIG_IP_FORWARD) [Y/n/?] IP: firewalling (CONFIG_IP_FIREWALL) [Y/n/?] IP: masquerading (EXPERIMENTAL) (CONFIG_IP_MASQUERADE) [Y/n/?] * * Protocol-specific masquerading support will be built as modules. * IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG) [Y/n/?] IP: optimize as router not host (CONFIG_IP_ROUTER) [Y/n/?] * * Network device support * Network device support (CONFIG_NETDEVICES) [Y/n/?] * PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?] * * CCP compressors for PPP are only built as modules. * Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?] NE2000/NE1000 support (CONFIG_NE2000) [Y/m/n/?]
Cette dernière option dépend bien sur de la carte réseau utilisée.
Compilez le noyau avec :
make zlilo
make modules
make modules_install
Si vous n'utilisez pas LILO, copiez
/usr/src/linux/arch/i386/boot/zImage
à la bonne place pour
l'initialisation. Les modules sont installés dans
/lib/modules/x.x.x
, avec x.x.x
correspondant à la version
du noyau utilisé.
Les programmes suivants sont nécessaires :
Charge les modules nécessaires.
Supprime les modules inutiles.
Crée les dépendances.
Extension de Kerneld
pour charger les modules automatiquement.
Si vous ne les avez pas encore, installez les avec :
cd /usr/src
tar zxf modules-2.0.0.tar.gz
make install
Pour charger Kerneld au démarrage, vous devez éditer
/etc/rc.d/rc.S
ou créer un script rc.modules
qui est
appelé par rc.S
. Ajoutez ou modifiez les lignes suivantes :
/etc/rc.d/rc.modules: if [ ! -f /lib/modules/`uname -r`/modules.dep ] ; then echo "Updating module dependencies for Linux `uname -r`:" /sbin/depmod -a fi [ -x /sbin/kerneld ] && /sbin/kerneld
La première partie vérifie les dépendances des modules et les crée si elles n'existent pas encore.
Les programmes suivants sont nécessaires pour l'installation d'un lien PPP :
Daemon PPP.
Statistiques PPP.
Exécution de scripts.
A installer avec :
cd /usr/src
tar zxf ppp-2.2.0f.tar.gz
cd ppp-2.2.0f
./configure
make kernel
Les noyaux récents incluent le code de PPP, make kernel
ne
remplacera donc rien du tout. Vérifier les fichiers README
et
Makefile
pour le support du kit Shadow.
Exécutez alors :
make
make install
Cette configuration nécessite un modem. La configuration du port
serie est réalisée dans le fichier rc.serial
:
/etc/rc.d/rc.serial: ${SETSERIAL} /dev/cua0 uart 16450 port 0x3F8 irq 4 ${SETSERIAL} /dev/cua1 uart 16550A port 0x2F8 irq 3 spd_vhi
Dans cette configuration, COM1 (cua0
) est utilisé par la souris
et COM2 (cua1
) par un modem interne à 28,8 kb/s. Le paramètre
spd_vhi
remplace la valeur 38400 bps
par 115200 bps
dans
la table des vitesses, de même spd_hi
est utilisé pour la valeur
57600 bps
.
Il faut utiliser spd_vhi
pour un modem a 28,8 kb/s et
spd_hi
pour un à 14,4 kb/s. Mais on peut démarrer par prudence avec
la valeur 38400 bps
.
Vérifiez votre configuration modem à l'aide d'un programme de type
émulation de terminal, tel que minicom. Le modem doit afficher
(echo) les caractères frappés. Utilisez Ctrl-A P
pour changer
les paramètres de communication. Vérifiez si cela fonctionne encore à
57600 ou 115200 b/s. Tapez ATZ
, le modem devrait répondre OK
.
Utilisez Ctrl-A X
pour quitter minicom.
Minicom peut aussi être utilisé pour se connecter à son fournisseur de services manuellement. Notez préalablement ce que vous devez taper pour initier la connexion et quelles sont les réponses du serveur distant. Si votre fournisseur de services n'utilise pas PAP ou CHAP (protocoles d'échange de mots de passe), il faudra probablement entrer un nom d'utilisateur et un mot de passe, et peut être aussi une commande pour initialiser la liaison en mode PPP.
Le daemon pppd
recherche dans le repertoire /etc/ppp
les scripts et le fichier options
:
/etc/ppp/options: /dev/modem 38400 crtscts modem noipdefault defaultroute idle-disconnect 120
Ce qui signifie :
Dans ma configuration, un lien vers
/dev/cua1
.
A remplacer par 115200 (paramètre spd_vhi
dans
/etc/rc.d/rc.serial
)
Contrôle de flux matériel, RTS/CTS, ne pas utiliser le controle de flux Xon-Xoff!
Utilisation avec un modem.
L'adresse IP est attribuée automatiquement.
Affecte la route par défaut à l'interface PPP.
Avec PPP-2.2.0f déconnecte automatiquement un lien inutilisé apres 120 secondes.
Nous créons maintenant un script, nommé defaut
, pour
la connexion vers notre fournisseur de service habituel. Pour d'autres
connexions, créer d'autres scripts vers ces autres sites et les nommer
avec leur adresse IP distante, par exemple.
/etc/ppp/defaut: "" ats11=55dtXXXXXXXX CONNECT "" rname: UUUUU sword: PPPPP > ppp
Ce qui signifie :
Racourcit la durée des tonalités pour accélérer la connexion.
Correspond au numéro de téléphone du fournisseur de service.
chat
attend que le modem renvoi CONNECT
.
chat
attend rname
, et entre UUUUU
.
chat
attend sword
, et entre PPPPP
.
Remplacez UUUUU
et PPPPP
par votre nom d'utilisateur et
votre mot de passe. Utilisez rname
et sword
(à la place de
username
et password
) car quelquefois les premières lettres
sautent ou sont soit en majuscules soit en minuscules. Certains
fournisseurs de services demandent l'entrée du mot ppp
après le nom
d'utilisateur et le mot de passe, d'où l'attente de l'invite du routeur
(>
).
Si vous avez des erreurs du type serial line looped back
ou
serial line not 8-bit clean
, la liaison n'est pas encore sous PPP.
La commande de lancement est assez longue pour mériter un petit script :
/etc/ppp/ppp: #!/bin/sh /usr/sbin/pppd connect '/usr/sbin/chat -v -f /etc/ppp/default'
Vous devriez être capable de vous connecter à votre fournisseur de
service. Vous pouvez rajouter le paramètre debug
au fichier
/etc/ppp/options
et augmenter le loglevel de syslogd
pour voir ce qui ce passe :
/etc/syslog.conf: *.debug /var/log/messages
Si vous éditez syslog.conf
, soyez sûr d'indiquer au daemon
syslogd
le changement. Suivant la localisation de son fichier PID,
faîtes :
kill -1 `cat /var/run/syslog.pid`
ou
kill -1 `cat /etc/syslog.pid`
Après que la connexion soit établie, vérifiez avec ifconfig
l'existence de l'interface ppp0
. Vérifiez la route par défaut avec
netstat -r
, elle devrait indiquer le fournisseur de service.
Essayer aussi de pinguer (ping
) un serveur distant, tel que le
serveur de noms du fourniseur de service. Si ça marche, vous pouvez
ajouter ce serveur de noms dans le fichier /etc/resolv.conf
:
/etc/resolv.conf: search your.isp.domain nameserver x.x.x.x
Le daemon kerneld
peut être utilisé pour charger à la demande
des modules tels que PPP. Une autre possibilité signalée dans le
kerneld-HOWTO est le lancement d'un script si une route est
absente. Kerneld
surveille le fichier /sbin/request-route
.
Le script qui suit est la copie de celui fourni dans
modules-2.0.0.tar.gz
:
/sbin/request-route: #!/bin/sh LOCK=/var/run/request-route.pid export PATH=/usr/sbin:$PATH # for ppp-2.2* # # Ce script sera appele par kerneld avec la route demandee $1 # chatfile=/etc/ppp/$1 # # Si aucun script chat utilise une valeur par defaut (lien symbolique # vers le script prefere) : # [ ! -f $chatfile ] && chatfile=/etc/ppp/default # # Vérifie si le programme tourne toujours : # if [ ! -f $LOCK ] ; then pppd connect "chat -f $chatfile" & # # Temporisation supprimee par ip-up, a regler. Verifier les # delais de kerneld aussi. # sleep 60 & sleepid=$! echo $sleepid > $LOCK wait $sleepid rm -f $LOCK exit 0 fi exit 1
Kerneld
exécute ce script en utilisant la route absente comme
argument :
/sbin/request-route x.x.x.x
Le script utilise un fichier verrou pour eviter plusieurs
request-route
simultanés.
Au début, j'utilisais un script qui était déclenché par une requête
au serveur de noms, mais depuis je préfère fonctionner avec un serveur
de noms local, le resultat sera dans la mémoire cache et un second accès
ne déclenchera pas la connexion. C'est la raison pour laquelle j'ai
changé le script pour utiliser un script chat
si aucun n'existe.
Cela permet aussi de créer de multiples scripts chat
pour les
différentes liaisons et d'utiliser un script chat
par défaut pour
se connecter à son fournisseur de service.
Après que la liaison ait été initiée, le daemon pppd
exécute le
script /ppp/ip-up
qui retire le fichier verrou. Ajoutez les
commandes que vous voulez exécuter à chaque fois que la liaison est
initiée, par exemple surveiller la queue de sendmail :
#!/bin/ash LOCK=/var/run/request-route.pid [ -f $LOCK ] && kill `cat $LOCK` # # Execute ces commandes apres la connexion (exemple) : # /usr/sbin/sendmail -q
L'option idle-disconnect
déconnecte automatiquement une liaison
inutilisée. Pour se déconnecter immédiatement, utilisez ppp-off
:
/usr/sbin/ppp-off:. #!/bin/sh LOCK=/var/run/request-route.pid DEVICE=ppp0 rm -f $LOCK # # Si le fichier ppp0.pid est present alors le programme tourne. Stoppez # le. # if [ -r /var/run/$DEVICE.pid ]; then kill -INT `cat /var/run/$DEVICE.pid` # # Si ca marche, verifier que le fichier pid est retire. # if [ ! "$?" = "0" ]; then echo "removing stale $DEVICE pid file." rm -f /var/run/$DEVICE.pid exit 1 fi # # Reussite. Terminer avec le bon statut. # echo "$DEVICE link terminated" exit 0 fi # # La liaison n'est pas active # echo "$DEVICE link is not active" exit 1
Si votre machine Linux a une autre interface réseau, tel qu'une carte
ethernet ou si vous utilisez PLIP pour vous connecter vers un autre
hôte, vous pouvez configurer la machine multi-interface comme un
routeur. C'est ainsi que j'ai configuré mon réseau. J'entre toujours
toutes mes adresses IP dans /etc/hosts
pour n'avoir qu'un
fichier à modifier.
/etc/hosts: 127.0.0.1 localhost 10.0.0.1 your.domain.com host 10.0.0.2 some.other.machine
/etc/networks: loopback 127.0.0.0 localnet 10.0.0.0
/etc/rc.d/inet1: # Loopback interface: ifconfig lo localhost route add -net loopback # Local interface: ifconfig eth0 host route add -net localnet eth0
La dernière ligne ajoute une route au réseau local. Nous n'avons pas besoin d'entrer la passerelle par défaut ici, puisque nous n'en avons pas, tant que la liaison PPP n'existe pas.
Si vous devez connecter différentes machines, mais possédez seulement une adresse IP, vous pouvez utiliser les fonctionnalités d'IP-masquerade de Linux. Cela vous permet de configurer des adresses IP interne à un réseau qui seront converties en l'adresse IP assignée à l'intreface PPP.
Vous pouvez utiliser librement les adresses de réseau suivantes :
Class A: 10.0.0.0
Class B: 172.16.0.0 - 172.31.0.0
Class C: 192.168.0.0 - 192.168.254.0
(NdT : à utiliser sans angoisse, adresses non routées dans l'Internet)
Ajouter ensuite les lignes suivantes à /etc/rc.d/rc.inet1
:
/etc/rc.d/rc.inet1: FW=/sbin/ipfwadm ${FW} -F -f ${FW} -F -a m -P tcp -S localnet/8 -D default/0 ${FW} -F -a m -P udp -S localnet/8 -D default/0 # Masquerading timeout-values (tcp tcpfin udp), defaults: ${FW} -M -s 3600 0 0 # Load module for special protocols: /sbin/modprobe ip_masq_ftp /sbin/modprobe ip_masq_raudio /sbin/modprobe ip_masq_irc
Les deux lignes d'IP-masquerade vont adapter les trafics UDP et TCP
à l'adresse IP utilisée par la passerelle par défaut (l'interface PPP).
Les autres protocoles ne fonctionneront pas à partir des autres hôtes.
Par exemple ping
qui utilise le protocole ICMP, ne fonctionnera que
du routeur. Ici on utilise le réseau 10.0.0.0 avec le masque de
sous réseau 255.0.0.0, ou en notation CIDR : /8.
Les lignes suivantes évitent la fin prématurée des connexions FTP, en augmentant la valeur des temporisation TCP (timeout).
Les modules sont nécessaires seulement si vous désirez utiliser ces
protocoles à travers un pare-feu (firewall). C'est à dire, si vous voulez
utiliser un FTP normal à travers un pare-feu, vous devez charger le
module ip_masq_ftp
.
Configurez vos autres machines (stations) pour votre réseau local, puis pour utiliser la machine Linux (routeur) comme passerelle par defaut.