(( Linux ISDN HOWTO ))
Comment configurer l'accès Numéris à Internet avec GNU/Linux
Documentation obsolète sur la configuration du sous-système (RNIS|ISDN) des noyaux LINUX de la série 2.4.xx
Consultez les documents du site [inetdoc.LINUX] pour obtenir des informations à jour.

précédent suivant

débutsuivant Choix de la configuration

Il existe de nombreuses solutions pour la configuration de l'accès synchrone. Ces solutions vont de l'utilisation d'un paquetage de distribution à l'écriture de ses propres scripts de connexion.

A l'exception de la distribution Debian, les paquetages de connexion ne sont pas documentés ici. Voir la page Ressources & Contributeurs.

Cette page présente 3 modes de configuration :

  • Une adaptation du paquetage isdnutils de Debian.
  • Un jeu de scripts de connexion pour les niveaux de démarrage Système V.
  • Une adaptation du même jeu de scripts indépendante de la technique de démarrage des services.

débutsuivant Adaptation du paquetage isdnutils
Pourquoi ?

J'ai posé la question sur l'utilité de l'option readconf de l'outil isdnctrl à Paul Slootman, le responsable des paquetages RNIS/ISDN Debian. Il m'a répondu qu'il ne l'utilisait pas pour des questions compatibilité avec les versions antérieures de ses scripts et qu'il n'y avait aucune raison de ne pas l'utiliser.

Comme j'ai utilisé cette option depuis les toutes premières versions de ces pages, je continue donc à proposer cette alternative de configuration. Il s'agit donc d'adapter les 2 fichiers des configuration des interfaces et de la gestion de connexion aux 2 fichiers du paquetage isdnutils.

Configuration des interfaces

C'est le rôle du fichier /etc/isdn/device.ippp0.

Fichier /etc/isdn/device.ippp0

#!/bin/sh

# Instructions: read the comments for each command, and if necessary, edit
# the command (e.g. replace EAZ with your real EAZ or MSN). Look for lines
# marked with XXX_, which is probably all you need to change.
# If the command is commented out, remove the leading '#' to enable it if
# the command is needed.

# If using dynamic IP addresses:
# Check out the /etc/ppp/ip-up.d/isdnutils and /etc/ppp/ip-down.d/isdnutils
# scripts, to ensure that any routing is done correctly there (the
# ip-up.d/isdnutils script is run after a syncPPP link is established, and the
# ip-down.d/isdnutils script is run after the link goes down).
# You need to have the ppp package installed for those scripts to work.

set -e  # exit on _any_ error

# Get the device name
device=ippp0

# The (dummy) IP addresses
#
# Use 10.0.0.1 for LOCALIP and 10.0.0.2 for REMOTEIP if you have
# dynamic IP addresses; with static address fill in the real values!

LOCALIP=192.168.1.200
REMOTEIP=192.168.1.201

# Configuration (start)

case "$1" in
start)
    # If running kernel 2.0.31 or higher, enable the IP dynamic hack
    # (if needed). See linux/Documentation/networking/ip_dynaddr.txt .
    # Default is: enabled. If you have static IP numbers, you can remove
    # the next line.
    [ -f /proc/sys/net/ipv4/ip_dynaddr ] && echo 5 > /proc/sys/net/ipv4/ip_dynaddr

    # First you need to create the interface(s)
    isdnctrl readconf /etc/isdn/device.conf

    #   verbose num
    # Set verbosity level to <num>.
    # (2 shows the first package of every connection, that is very useful.)
    # WARNING: this is a global parameter, that affects all isdn devices!
    isdnctrl verbose 2

    ifconfig ${device} $LOCALIP pointopoint $REMOTEIP netmask 255.255.255.255
    set +e      # ignore errors from here on

    route del -host $REMOTEIP ${device} 2>/dev/null
    route add -host $REMOTEIP ${device}

    # setting default route here is only useful if this is your only
    # outside connection... The default is ippp0 for the default route.
    route del default 2>/dev/null
    route add default netmask 0 ${device}

    ;;

# Delete the interface
stop)
    set +e      # ignore errors from here on

    isdnctrl dialmode $device off >/dev/null 2>&1

    # Commands to undo the network stuff
    route del $REMOTEIP $device 2> /dev/null
    # only delete default route if set above!
    # The default is to use ippp0 for your default route.
    route del default netmask 0 2> /dev/null
    ifconfig $device down       2> /dev/null
    isdnctrl delif $device      2> /dev/null
    # If this was the master device,
    # the delif will also have removed the slaves.
    ;;

# the rest is generic, don't touch
*)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac

exit 0

Quelques remarques :

  • L'utilisation de l'option readconf :
LinuxBox# isdnctrl readconf /etc/isdn/device.conf

  • Comme indiqué lors de la validation manuelle de l'interface, le fichier /etc/isdn/device.conf est un lien symbolique :
LinuxBox# cd /etc/isdn
LinuxBox# ln -s isdn2B.conf device.conf

  • Par rapport à la version originale issue du paquetage, j'ai effacé toutes les commandes de pare-feu. Il existe un paquetage ipchains qui cohabite très bien avec isdnutils.
Gestion de la connexion

C'est le rôle du fichier /etc/isdn/ipppd.ippp0.

Fichier /etc/isdn/ipppd.ippp0
/dev/ippp0
/dev/ippp1
+mp
defaultroute
debug
name !!login-name!!

Comme indiqué lors de la configuration du démon ipppd, ce fichier est un lien symbolique vers ioptions2B.

LinuxBox# cd /etc/isdn
LinuxBox# ln -s ioptions2B ipppd.ippp0


débutsuivant Chargement des modules

Sachant que le sous-système RNIS/ISDN du noyau Linux ne peut se compiler que sous forme modulaire, on utilise le démon kerneld pour le chargement automatique des modules lors du démarrage de la machine.

Ce démon utilise le fichier /etc/modules.conf qui est complété manuellement ou généré.

Debian

Dans le cas de la distribution Debian, le fichier /etc/modules.conf est généré par l'utilitaire update-modules à partir de la liste du répertoire /etc/modutils.

  • Dans le répertoire /etc/modutils, on créé un fichier pour les options du module HiSax :
LinuxBox# cd /etc/modutils
LinuxBox# echo "hisax options type=35 protocol=2">hisax

  • On exécute l'utilitaire update-modules pour générer le fichier /etc/modules.conf:
LinuxBox# update-modules
LinuxBox# cat /etc/modules.conf |grep hisax

Cette technique présente l'avantage de séparer le paramétrage des modules chargés par le démon kerneld. L'ajout ou le retrait d'un paquetage ne modifie pas directement le fichier /etc/modules.conf. On préserve ainsi l'état de la configuration système.

Mandrake - RedHat

Dans ce cas, on édite manuellement le fichier /etc/modules.conf.

LinuxBox# echo "hisax options type=35 protocol=2" >> /etc/modules.conf


débutsuivant Configuration sans paquetage

Les scripts proposés ci-dessous sont sans utilité si la distribution installée possède un paquetage de gestion des connexions RNIS/ISDN. Comme c'est le cas de la plupart des distributions, cette partie est présente uniquement pour mémoire.

Chargement manuel

Une première technique de chargement consiste à écrire un fichier shell /etc/isdn/init-isdn dont voici le contenu :

Fichier /etc/isdn/init-isdn

#!/bin/sh

#
# Partie 1 : chargement du pilote de carte

/sbin/modprobe hisax type=34 protocol=2

#
# Partie 2 : configuration des interfaces

/sbin/isdnctrl readconf /etc/isdn/isdn2B.conf

#
# Partie 3 : chargement du gestionnaire de connexion

/sbin/ipppd file /etc/isdn/ioptions2B

Ce script comprend 3 parties :

  1. Chargement du pilote HiSax :
    Pour une carte ISA Pnp, il est obligatoire de fournir les valeurs des Entrées/Sorties io et irq. Pour une carte PCI, on ne doit fournir que son type : 34 pour les cartes Gazel et le protocole de contrôle Euro ISDN (EDSS1).
  2. Configuration des interfaces :
    L'exemple donné correspond à une connexion à 128Kbps.
  3. Définition de l'interface par défaut :
    L'interface /dev/ippp0 activée par le chargement du démon ipppd.

Le fichier /etc/isdn/init-isdn doit être exécutable :

chmod 755 /etc/isdn/init-isdn

Il faut copier ce script dans le répertoire /etc/rc.boot pour qu'il soit exécuté à chaque démarrage de la machine.

Définition de l'interface par défaut d'un poste routeur RNIS/ethernet
Normalement, une fois le démon ipppd chargé et l'interface RNIS /dev/ippp0 créée avec isdnctrl, la route par défaut vers l'Internet ne doit plus changer. En fait la table de routage est modifiée à chaque connexion téléphonique. Il est donc nécessaire de créer un script de "maintien" de la route par défaut.

Fichier /etc/ppp/ip-down.local

#!/bin/sh
route add default dev ippp0

Chargement automatique

Cette technique s'intègre dans le modèle normalisé d'initialisation des périphériques Système V. Elle permet un chargement automatique au démarrage de la machine ainsi qu'une possibilité de réinitialisation dynamique.

Il faut suivre les étapes suivantes en étant connecté superviseur :

Compléter le fichier /etc/conf.modules avec les lignes suivantes :


# kerneld ISDN config
#
alias isdn hisax 

# Cartes R647/648 et R742 
# (les valeurs io et irq sont indicatives)
options hisax type=34 protocol=2 io=0x240 irq=9

# Cartes R685 et R753
#
options hisax type=34 protocol=2

# Carte R841
#
options hisax type=35 protocol=2


Editer le script de chargement /etc/rc.d/init.d/isdn :

Fichier /etc/rc.d/init.d/isdn

#!/bin/bash

case "$1" in
  start)
        echo -n "Starting isdn configuration: "
        /sbin/modprobe slhc
        /sbin/modprobe isdn
        echo -n isdn
        echo
        touch /var/lock/subsys/isdn
        ;;
  stop)
        echo -n "Stopping isdn configuration: "
        /sbin/rmmod -s hisax
        /sbin/rmmod -s isdn
        /sbin/rmmod -s slhc

        rm -f /var/lock/subsys/isdn
        echo -n isdn
        echo
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  status)
        cat /proc/devices | grep -q "\(isdn\)"
        if [ $? = 0 ]; then
            lsmod | grep -q "\(slhc\|isdn\|hisax\)"
            echo "isdn card detected."
        else
          echo "Isdn card not configured."
        fi
        ;;
  *)
        echo "Usage: isdn {start|stop|status|restart}"
        exit 1
esac

exit 0

Ce script doit être exécutable :

chmod 755 /etc/rc.d/init.d/isdn

Rendre le script ci-dessus utilisable par les "runlevels"

ln -s /etc/rc.d/init.d/isdn /etc/rc.d/rc0.d/K17isdn
ln -s /etc/rc.d/init.d/isdn /etc/rc.d/rc1.d/K17isdn
ln -s /etc/rc.d/init.d/isdn /etc/rc.d/rc2.d/K17isdn
ln -s /etc/rc.d/init.d/isdn /etc/rc.d/rc3.d/S87isdn
ln -s /etc/rc.d/init.d/isdn /etc/rc.d/rc5.d/S87isdn
ln -s /etc/rc.d/init.d/isdn /etc/rc.d/rc6.d/K17isdn


précédent suivant

$Revision: 730 $ - $Date: 2005-11-11 22:28:26 +0100 (ven, 11 nov 2005) $

Ces pages sont écrites en DHTML à la main avec WML et sont garanties 100% logiciel libre.
Documentation sous licence OpenContent