Configuration de l'accès internet avec RNIS (Numéris - ISDN)

De ClissXXI.

Dans le bassin minier, il existe des zones d'activités qui ne sont couvertes ni par le cable (numéricable) ni par l'ADSL. Dans ce cas, les réseaux ISDN ou plus précisément, en France, RNIS (Réseaux numériques à intégration de service), disponibles sur la totalité du territoire français, restent une solution particulièrement privilégiée. Voici le descriptif technique tel que CLISS XXI a pu l'implémenter.

Sommaire

Présentation générale

En France, la dénomination commerciale des réseaux RNIS est "Numéris". RNIS s'appuie sur des canaux logiques, les canaux B, qui transmettent à un débit de 64Kbit/s. Il s'agit de lignes entièrement numériques, qui arrivent sur le boitier installé par France Télécom (dans notre cas). Les données n'ont donc pas besoin d'être converties par un modem. Un autre avantage est que le délai d'établissement des connexions est très rapide, et il est possible de se déconnecter puis se reconnecter très souvent, sans perte de temps.

L'installation mise en place par CLISS XXI repose sur l'offre Numéris Itoo de France Télécom, qui consiste en 2 canaux B, de chacun 64Kbit/s, soit un débit total possible de 128Kbit / s.

Il est à noter que les 2 canaux B peuvent être gérés "à la demande" :

  • Utilisation des 2 canaux B pour internet : dans ce cas, le débit possible est de 128Kbit/s.
  • Utilisation d'un seul canal B. Le débit possible est alors de 64Kbits/s, et l'autre canal B est disponible, par exemple pour téléphoner, ou pour connecter un Fax, ou une carte modem pour recevoir les fax sur l'ordinateur.
  • Quand internet n'est pas lancé, les 2 canaux sont disponibles, pour téléphoner, faxer...

Nous verrons plus loin que l'on passe de la gestion d'un canal à la gestion de deux canaux très simplement.

L'architecture informatique

France télécom fournit et installe le boitier numéris, et le cordon pour relier ce boitier à l'ordinateur. Il faut donc installer une carte spécifique dans l'ordinateur. Dans notre cas, il s'agit d'une carte Gazel 128, de la société Bewan Systems. La carte est connectée sur le bus PCI.

L'ordinateur est configuré sous Debian GNU/Linux. Nous avons implémenté sans problème la même solution avec des noyaux 2.4.x et 2.6.x

La première chose à installer, ce sont les paquets logiciels. On est sous Debian GNU/linux :

  • apt-get install isdnutils-doc : installation de la FAQ isdn4Linux.
  • apt-get install isdnutils : installation des outils nécessaires au pilotage d'une carte RNIS/ISDN. Dans le même temps, apt-get installera aussi le paquet isdnutils-xtools ainsi que les utilitaires graphiques xmonisdn et xisdnload.
  • apt-get install ipppd (en fait ce paquet est également installé avec isdnutils). Il s'agit du démon de connexion synchrone pppd.

Les derniers noyaux 2.4.x et 2.6.x contiennent déjà les modules nécessaires au pilotage d'une carte RNIS/ISDN. Cependant, si vous êtes amenés à reconfigurer et recompiler un nouveau noyau, les options suivantes sont nécessaires (après make menuconfig) :

Device drivers --> ISDN Subsystems :

  • Activer l'option "ISDN support", pour activer le sous-système RNIS.

Device drivers --> ISDN Subsystems --> ISDN Support

  • Activer l'option "Old ISDN4Linux". Ne soyez pas effrayé par le terme "Old". C'est simplement parce que le support RNIS sous GNU/Linux intègre désormais une nouvelle interface (CAPI). L'ancienne interface (HiSax) est toujours d'actualité, et c'est elle que nous implémenterons.

Device drivers --> ISDN Subsystems --> ISDN Support --> Old ISDN4Linux

  • Activer l'option "Support synchronous PPP", pour utiliser la transmission synchrone sur la ligne RNIS.

Device drivers --> ISDN Subsystems --> ISDN Support --> Old ISDN4Linux --> Support synchronous PPP (options à implémenter) :

  • Use VJ-compression with synchronous PPP (pour utiliser

la compression des en-têtes TCP suivant l'algorithme de Van Jacobson).

  • Support generic MP (RFC1717) (pour lier ensemble plusieurs canaux B, autrement dit, dans notre cas, pour utiliser les 2 canaux B et donc obtenir une connexion à 128Kbps).
  • Support BSD compression (pour utiliser la compression BSD).

Device drivers --> ISDN Subsystems --> ISDN Support --> Old ISDN4Linux --> Passive Cards

  • Activer l'option "HiSax SiemensChipSet driver support", pour activer le module HiSax.

Device drivers --> ISDN Subsystems --> ISDN Support --> Old ISDN4Linux --> Passive Cards --> HiSax SiemensChipSet driver support (options à implémenter) :

  • HiSax Support for EURO/DSS1 (pour choisir le protocole

communication Européen sur le canal D. {Qu'est-ce que c'est ?} le canal D est un canal spécifique, distinct des canaux B, qui permet le transport des informations de signalisation : appels, demandes de service, routage des données sur les canaux B, libération des connexions. C'est l'existence de ce canal D, distinct des canaux B, qui permet des temps de connexion très bas).

Dans le même sous-menu, activer les options concernant votre carte. Aidez vous de la commande lspci, pour avoir des infos sur votre carte. Pour ce qui nous concerne :

  • Gazel cards
  • HFC PCI-Bus cards


À partir de là, vous compilez et installez le noyau selon vos pratiques habituelles (c'est à dire en copiant les fichiers à la main, ou en passant par un paquet Debian.

Concernant le chargement des modules, vous procédez également comme bon vous semble (en chargeant les modules au boot : vous pouvez utiliser modconf, et vérifier que /etc/modules contient bien les modules isdn et hisax; en chargeant dynamiquement les modules : vous pouvez créer un fichier numeris dans /etc/modprobe.d et ensuite lancer update-modules).

Configurations logicielles

Les fichiers de configuration se trouvent dans /etc/isdn/. Le plus simple est de générer des fichiers types, et ensuite de les modifier à la main. Pour cela, on utilise isdnconfig :

  • Option 1 : network interface. Cette option permet de générer un fichier par interface (ippp0 et ippp1) correspondant chacune à un canal B. Les fichiers générés sont /etc/isdn/device.ippp0 et /etc/isdn/device.ippp1.
  • Option 2 : synchronous ppp daemon. Cette option génère le fichier /etc/isdn/ipppd.ippp0, ainsi que les fichiers nécessaires au démon pppd (/etc/ppp/auth-up, /etc/ppp/auth-down et /etc/ppp/pap-secrets).

Il ne faut pas utiliser l'option 2 de isdnconfig pour générer un fichier /etc/isdn/ipppd.ippp1. En effet, un seul démon ipppd est nécessaire pour toutes les interfaces ippp*, et utilise un seul fichier de configuration ipppd.ippp0.

Les 3 fichiers /etc/isdn/device.ippp0, /etc/isdn/device.ippp1 et /etc/isdn/ipppd.ippp0 qui ont été générés par isdnconfig sont donc des fichiers types. Les modifications à effectuer à la main sont en fait très simples : elles sont indiquées dans le corps du fichier sous forme de commentaires balisés par XXX. Les modifications à apporter concernent essentiellement votre numéro de ligne, ainsi que le numéro de votre fournisseur d'accès. N'oubliez pas, enfin, de modifier le fichier /etc/ppp/pap-secrets, contenant le code d'accès à votre fournisseur internet. Voici, à titre d'exemple, nos fichiers de configuration :

  • device.ippp0

Fichier:Device.ippp0

  • /etc/isdn/ipppd.ippp0
###############################################################
# CLISS XXI - Juillet 2004
# Fichier de configuration pour l'interface ippp0
# /etc/isdn/ipppd.ippp0
# Attention : si vous souhaitez gérer une 2ème interface
# ippp1, pour 2 canaux B et une connexion à 128Kbit/s,
# il n'est pas utile de créer un fichier /etc/isdn/ipppd.ippp1
# Un seul démon pppd sera lancé, et utilisera un seul fichier 
# de configuration /etc/isdn/ipppd.ippp0
###############################################################
# STANDARD OPTIONS
+mp			# enable multi line ppp
# ppp handshake : tuning
lcp-restart 1		# Set timeout for LCP 
# AUTHENTICATION
name ##########		# Votre login, tel que votre fournisseur internet vous l'a communiqué
user ##########		# En général, user = name
usehostname		# use hostname for auth
remotename ######	# le nom du serveur distant, tel que vous l'a communiqué votre fournisseur internet
noauth			# (dont) require peer (the other) to auth
# COMPRESSION
noccp			# compression negotation on/off
nolzs			# LZS compression off (not yet supported fully)
# IP NETWORKING
noipdefault		#  do not  use name for default ip addr
netmask 255.255.255.255	#  do      set netmask, 255.255.255.255 for pointopoint
nohostroute		#  do not  set host route
mru 1524		#  do      set maximum size of receive units to X
mtu 1500		#  do      set max size of transmit units (1500 is OK)
ipcp-accept-local	# Accept peer's address for us 
ipcp-accept-remote	# Accept peer's address for it 
  • /etc/ppp/pap-secrets
# CLISS XXI - Juillet 2004
#client         server          		secret          IP_adresses
VotreLogin      LeServeurduFournisseur          VotreMotdePasse

La connexion à internet

C'est quand même l'objectif ;-)

On utilise le script /etc/init.d/isdnutils start, qui lance pppd. On doit voir que les modules isdn et hisax sont utilisés (lsmod)

hisax                 547908   3
isdn_bsdcomp            5900   0  (unused)
isdn                  127392   3  [hisax isdn_bsdcomp]
slhc                    4624   1  [isdn]

On doit voir également le démon pppd lancé (ps aux)

  • /usr/sbin/ipppd file /etc/isdn/ipppd.ippp0 /dev/ippp0 /dev/ippp1

Pour effectuer les opérations inverses : /etc/init.d/isdnutils stop.

Il vous faudra décider de la manière dont vous comptez utiliser ces 2 scripts : soit au coup par coup, soit au boot et au shutdown de la machine (auquel cas il faudra créer des liens symboliques de la forme /etc/rc?d/K20isdnutils ou S20isdnutils -> /etc/init.d/isdnutils

Enfin, on utilise l'outil usr/sbin/isdnctrl qui gère le mopdule HiSax. Les principales options sont les suivantes :

  • Pour visualiser les devices configurés : isdnctrl list ippp0 ou isdnctrl list all
  • Pour lire la configuration mémorisée dans /etc/isdn/isdn.conf : isdnctrl readconf (si le fichier existe)
  • Lancement de la connexion ISDN : isdnctrl readconf dial ippp0 (lit le fichier /etc/isdn.conf et lance la connexion)
  • État de la connexion : isdnctrl status ippp0 ou isdnctrl status all
  • Arrêt de la connexion : isdnctrl hangup ippp0

Un fichier important : /etc/isdn/isdn.conf. C'est en effet ce fichier qui est lu par la commande isdnctrl readconf dial ippp0, pour la connexion à internet. Pour écrire ce fichier, la première fois, nous vous recommendons de le générer par la commande isdnctrl writeconf, et ensuite de l'éditer pour le modifier.

La gestion des 2 canaux B

Il peut être important d'avoir le choix, et d'utiliser soit un seul canal B (pour utiliser l'autre pour téléphoner ou pour le fax, par exemple) ou les 2 (pour des gros téléchargements par exemple). Il faudra donc s'appuyer sur 2 fichiers isdn.conf différents. Nous avons procédé de la manière suivante :

  • Utilisation d'un seul canal B, soit une connexion à 64Kbit/s. Dans ce cas, il faut s'appuyer sur le fichier isdn-1canal.conf, qui ne gère que ippp0.
  • Utilisation des 2 canaux B, soit une connexion à 128Kbit/s. On crée alors un nouveau fichier isdn-2canaux.conf. L'interface pour le 2ème canal (ippp1) est alors "esclave" de ippp0 "maître". Il convient alors de renommer device.ippp1 en device.ippp0+1 : cela signifie que ippp1 est esclave de ippp0, et sera donc lancé en tant qu'esclave.

Voici, toujours à titre d'exemple, nos fichiers de configuration :

  • /etc/isdn/device.ippp0+1


  • /etc/isdn/isdn-1canal.conf
###############################################################################
# CLISS XXI - Juillet 2004
# /etc/isdn/isdn.conf 
# Générez un fichier type avec isdnctrl writeconf, et adapter ensuite le
# fichier résultat : /etc/isdn/isdn.conf
# Ici la configuration concerne une seule interface ippp0
# On a donc renommé le fichier /etc/isdn/isdn-1canal.conf
# appel : isdnctrl readconf /etc/isdn/isdn-1canal.conf dial ippp0
###############################################################################
[ISDNCTRL]
INTERFACES = {
 [INTERFACE]
 NAME = ippp0
 EAZ = ####			# Les 4 derniers digits de votre ligne internet (et non de votre ligne "tête de pont"
 PHONE_OUT = ##########	# Les 10 digits du numéro de votre fournisseur internet, y compris le 0 de zone
 SECURE = on
 DIALMODE = manual		# autre choix : auto
 DIALMAX = 1
 HUPTIMEOUT = 180		# on raccroche au bout de 3' d'inactivité
 IHUP = on
 CHARGEHUP = off
 L2_PROT = hdlc
 L3_PROT = trans
 ENCAP = syncppp
 PPPBIND = 0
}


  • /etc/isdn/isdn-2canaux.conf
###############################################################################
# CLISS XXI - Juillet 2004
# /etc/isdn/isdn.conf 
# Générez un fichier type avec isdnctrl writeconf, et adapter ensuite le
# fichier résultat : /etc/isdn/isdn.conf
# Ici la configuration concerne une interface maître ippp0 et une
# interface esclave ippp1
# On a donc renommé le fichier /etc/isdn/isdn-2canaux.conf
# appel : isdnctrl readconf /etc/isdn/isdn-2canaux.conf dial ippp0
###############################################################################
[ISDNCTRL]
INTERFACES = {
 [INTERFACE]
 NAME = ippp0
 EAZ = ####			# Les 4 derniers digits de votre ligne internet (et non de votre ligne "tête de pont"
 PHONE_OUT = ##########	# Les 10 digits du numéro de votre fournisseur internet, y compris le 0 de zone
 SECURE = on
 DIALMODE = manual		# autre choix : auto
 DIALMAX = 1
 HUPTIMEOUT = 180		# on raccroche au bout de 3' d'inactivité
 IHUP = on
 CHARGEHUP = off
 L2_PROT = hdlc
 L3_PROT = trans
 ENCAP = syncppp
 ADDSLAVE = ippp1		# indique l'interface esclave
 SDELAY = 30			# la connexion gèrera le 2ème canal B 30s après le 1er canal
 TRIGGER = 6000
 PPPBIND = 0

 [SLAVE]
 NAME = ippp1
 EAZ = ####			# Idem ippp0
 PHONE_OUT = ##########	# Idem ippp0
 SECURE = on
 DIALMODE = auto		# Obligatoirement auto pour l'interface esclave
 DIALMAX = 3
 HUPTIMEOUT = 180
 IHUP = on
 CHARGEHUP = off
 L2_PROT = hdlc
 L3_PROT = trans
 ENCAP = syncppp
 PPPBIND = 1
}


La différence essentielle entre la configuration de l'interface maître ippp0 et l'interface esclave ippp1, c'est que le mode de dialogue (DIALMODE de l'interface maître peut être soit auto (reconnexion automatique à chaque connexion réseau) ou manual (connexion manuelle volontaire), alors que le mode de connexion de l'esclave est obligatoirement auto. Il est bien sûr possible de "jouer" avec les autres paramètres, suivant les besoins liés à votre installation (par exemple : paramètre HUPTIMEOUT, pour raccrocher la ligne après un certain temps d'inactivité. Pour en savoir plus : man isdnctrl.

Comment utiliser l'un ou l'autre des 2 fichiers : tout simplement dans l'appel de isdnctrl dial avec l'option readconf :

  • isdnctrl readconf /etc/isdn/isdn-1canal.conf dial ippp0
  • isdnctrl readconf /etc/isdn/isdn-2canaux.conf dial ippp0

Et maintenant...

Tout fonctionne ? Formidable ! :-)

Pourquoi ne pas profiter de toutes les fonctionnalités proposées par ISDN ? Par exemple, pourquoi ne pas rajouter une carte modem dans l'ordinateur, reliée à une ligne analogique du package Itoo, et gérer les arrivées de fax directement sur l'ordinateur, grâce au package Hylafax ?

Enfin, si la connexion à internet est utilisée par d'autres machines en réseau, il faudra veiller à implémenter des règles de Firewalling, notamment en utilisant iptables. Typiquement, dans le cas de notre connexion pppd, ces règles pourront être implémentées dans un fichier 00-ipppd, situé dans le répertoire /etc/ppp/ip-up.d. C'est un point à ne surtout pas négliger :-)) !

Outils personnels