26.6. Utiliser SLIP

Contribution originale de Satoshi Asami. Avec la participation de Guy Helmer et Piero Serini.

26.6.1. Configurer un client SLIP

Ce qui suit décrit une manière de configurer une machine FreeBSD pour utiliser SLIP sur un réseau où les noms de machine sont statiques. Si le nom de machine est affecté dynamiquement (votre adresse change à chaque connexion), vous devrez probablement utiliser une méthode plus sophistiquée.

Tout d'abord, déterminez sur quel port série votre modem est connecté. De nombreuses personnes utilisent un lien symbolique, comme /dev/modem, pour pointer vers le nom réel du périphérique, /dev/cuaaN (ou /dev/cuadN sous FreeBSD 6.X). Ceci vous permet de faire abstraction du véritable nom du périphérique même si vous déplacez le modem vers un autre port. Cela évite le côté pénible de devoir modifier un certain nombre de fichiers dans le répertoire /etc et les fichiers .kermrc pour l'ensemble du système!

Note : /dev/cuaa0 (ou /dev/cuad0 sous FreeBSD 6.X) représente COM1, cuaa1 (ou /dev/cuad1) COM2, etc.

Assurez-vous d'avoir dans votre fichier de configuration du noyau ce qui suit:

device   sl

Sous FreeBSD 4.X, utilisez à la place la ligne suivante:

pseudo-device   sl      1

Cette configuration fait partie du noyau GENERIC, aussi cela ne devrait pas être un problème à moins que vous ne l'ayez effacée.

26.6.1.1. Ce que vous n'aurez à faire qu'une seule fois

  1. Ajoutez votre machine, la passerelle et les serveurs de noms de domaines à votre fichier /etc/hosts. Le notre ressemble à ceci:

    127.0.0.1               localhost loghost
    136.152.64.181          water.CS.Example.EDU water.CS water
    136.152.64.1            inr-3.CS.Example.EDU inr-3 slip-gateway
    128.32.136.9            ns1.Example.EDU ns1
    128.32.136.12           ns2.Example.EDU ns2
    
  2. Assurez-vous que hosts apparaît avant bind dans votre fichier /etc/host.conf sous les versions de FreeBSD antérieures à 5.0. Depuis FreeBSD 5.0, le système utilise à la place le fichier /etc/nsswitch.conf, vérifiez que files est avant dns dans la ligne hosts de ce fichier. Sans ces paramètres, il peut se passer des choses bizarres.

  3. Editez le fichier /etc/rc.conf.

    1. Définissez votre nom de machine en éditant la ligne:

      hostname="myname.my.domain"
      

      Le nom Internet complet de la machine doit être utilisé ici.

    2. Ajoutez sl0 à la liste des interfaces réseau en modifiant la ligne:

      network_interfaces="lo0"
      

      en:

      network_interfaces="lo0 sl0"
      
    3. Définissez les paramètres de configuration de sl0 en ajoutant une ligne:

      ifconfig_sl0="inet ${hostname} slip-gateway netmask 0xffffff00 up"
      
    4. Indiquez la passerelle par défaut en modifiant la ligne:

      defaultrouter="NO"
      

      en:

      defaultrouter="slip-gateway"
      
  4. Créez un fichier /etc/resolv.conf qui contient:

    domain CS.Example.EDU
    nameserver 128.32.136.9
    nameserver 128.32.136.12
    

    Comme vous pouvez le voir, ceci définit les serveurs de noms de domaines. Bien entendu, les noms de domaines et les adresses dépendront de votre environnement.

  5. Donnez des mots de passe pour les utilisateurs root et toor (et à tous les autres comptes qui n'auraient pas de mot de passe).

  6. Redémarrez votre machine et vérifiez qu'elle a bien le nom voulu.

26.6.1.2. Etablir une connexion SLIP

  1. Téléphonez, tapez slip à l'invite, puis entrez votre nom de machine et votre mot de passe. Ce que vous devez entrer dépend de votre environnement. Si vous utilisez Kermit, vous pouvez essayer une procédure comme celle-ci:

    # configuration kermit
    set modem hayes
    set line /dev/modem
    set speed 115200
    set parity none
    set flow rts/cts
    set terminal bytesize 8
    set file type binary
    # The next macro will dial up and login
    define slip dial 643-9600, input 10 =>, if failure stop, -
    output slip\x0d, input 10 Username:, if failure stop, -
    output silvia\x0d, input 10 Password:, if failure stop, -
    output ***\x0d, echo \x0aCONNECTED\x0a
    

    Vous devez, bien évidemment, remplacer le nom d'utilisateur et le mot de passe par les votre. Après cela vous pouvez alors entrer simplement slip à l'invite de Kermit pour vous connecter.

    Note : Conserver votre mot de passe en clair dans un fichier quelconque est en général une mauvaise idée. Faites-le à vos risques et périls.

  2. Laissez ensuite Kermit tel quel (vous pouvez le mettre en arrière-plan avec Ctrl-z) et en tant que root, tapez:

    # slattach -h -c -s 115200 /dev/modem
    

    Si vous êtes en mesure d'envoyer un ping vers des machines situées de l'autre côté du routeur, c'est que vous êtes connecté! Si cela ne fonctionne pas, vous pouvez essayer l'option -a au lieu de -c en argument de slattach.

26.6.1.3. Comment couper la connexion

Effectuez ceci:

# kill -INT `cat /var/run/slattach.modem.pid`

pour tuer slattach. Gardez à l'esprit que vous devez avoir les droits du super-utilisateur pour faire cela. Revenez ensuite sous kermit (en tapant fg si l'avez mis en tâche de fond) et quittez-le (q).

La page de manuel de slattach(8) dit que vous devez employer la commande ifconfig sl0 down pour indiquer que l'interface n'est plus active, mais cela ne change apparemment rien (les diagnostics donnés par la commande ifconfig sl0 restent identiques).

Il arrive que parfois que votre modem refuse de raccrocher. Dans ce cas, relancez kermit et quittez-le de nouveau. Cela fonctionne en général à la seconde tentative.

26.6.1.4. Dépannage

Si cela ne fonctionne pas, n'hésitez pas à contacter la liste de diffusion freebsd-net. Voici les problèmes que certains ont rencontré jusqu'ici:

  • Ne pas utiliser l'option -c ou -a avec slattach (Cela ne devrait pas poser de problème, mais des utilisateurs ont signalé que l'utilisation de cet indicateur a résolu leur problème).

  • Utiliser s10 au lieu de sl0 (avec certaines polices de caractères, il est parfois difficile de faire la différence).

  • Essayez ifconfig sl0 pour connaître la configuration de votre interface. Vous obtiendrez, par exemple:

    # ifconfig sl0
    sl0: flags=10<POINTOPOINT>
            inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00
    
  • Si vous obtenez le message d'erreur “no route to host” lors de l'utilisation de ping(8), il se peut qu'il y ait un problème avec votre table de routage. Vous pouvez utiliser la commande netstat -r pour afficher les routes actives:

    # netstat -r
    Routing tables
    Destination      Gateway            Flags     Refs     Use  IfaceMTU    Rtt    Netmasks:
    
    (root node)
    (root node)
    
    Route Tree for Protocol Family inet:
    (root node) =>
    default          inr-3.Example.EDU  UG          8   224515  sl0 -      -
    localhost.Exampl localhost.Example. UH          5    42127  lo0 -       0.438
    inr-3.Example.ED water.CS.Example.E UH          1        0  sl0 -      -
    water.CS.Example localhost.Example. UGH        34 47641234  lo0 -       0.438
    (root node)
    

    Les exemples précédents proviennent d'un système relativement chargé. La valeurs sur votre système varieront en fonction de l'activité réseau.

26.6.2. Configurer un serveur SLIP

Ce document donne des indications pour la mise en oeuvre d'un serveur SLIP sur un système FreeBSD, ce qui signifie généralement configurer votre système pour ouvrir automatiquement une connexion à l'ouverture d'une session depuis un client SLIP distant.

26.6.2.1. Prérequis

Cette section est très technique, il vous faut donc quelques connaissances de base. On supposera que vous connaissez le protocole réseau TCP/IP et, en particulier, l'adressage des réseaux et des noeuds, les masques de sous-réseau, les sous-réseaux, le routage et les protocoles de routage tels que RIP. Ce sont les concepts que vous devez maîtriser pour configurer les services SLIP sur un serveur de connexions, et si ce n'est pas le cas, veuillez lire TCP/IP Network Administration de Craig Hunt chez O'Reilly & Associates, Inc. (ISBN 0-937175-82-X), ou les ouvrages de Douglas Comer sur le protocole TCP/IP.

On suppose également que vous avez déjà installé vos modems et configuré les fichiers systèmes appropriés pour permettre l'ouverture de session via vos modems. Si vous ne l'avez pas encore fait reportez-vous à la Section 25.4 pour des informations sur la configuration des connexions entrantes. Vous pouvez aussi consulter les pages de manuel de sio(4) pour plus d'information sur le pilote du port série et ttys(5), gettytab(5), getty(8), & et init(8) en ce qui concerne la configuration du système pour qu'il autorise les connexions en provenance de modems, et peut-être la page de manuel stty(1) pour des informations sur le paramétrage des ports série (comme clocal pour les interfaces série directement connectées).

26.6.2.2. Rapide vue d'ensemble

Une configuration typique d'utilisation de FreeBSD comme serveur SLIP fonctionne de la manière suivante: un utilisateur SLIP appelle votre serveur SLIP FreeBSD et ouvre une session sous un identifiant utilisateur SLIP particulier qui lance /usr/sbin/sliplogin comme interpréteur de commandes. Le programme sliplogin consulte le fichier /etc/sliphome/slip.hosts à la recherche d'une ligne correspondant à cet utilisateur particulier, et s'il la trouve, connecte la ligne série à une interface SLIP disponible et lance ensuite la procédure /etc/sliphome/slip.login pour configurer cette interface SLIP.

26.6.2.2.1. Un exemple d'ouverture de session sur un serveur SLIP

Par exemple, si Shelmerg était un identifiant utilisateur SLIP, l'entrée pour Shelmerg ressemblerait à ceci:

Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin

Quand Shelmerg ouvre une session, sliplogin consulte /etc/sliphome/slip.hosts à la recherche d'une ligne correspondant à l'identifiant de l'utilisateur correspondant; par exemple, il peut y avoir dans le fichier /etc/sliphome/slip.hosts la ligne:

Shelmerg        dc-slip sl-helmer       0xfffffc00		  autocomp

sliplogin trouvera alors cette ligne, affectera la ligne série à l'interface SLIP suivante,et ensuite exécutera /etc/sliphome/slip.login avec les arguments suivants:

/etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp

Si tous se passe bien, /etc/sliphome/slip.login exécutera un ifconfig sur l'interface SLIP que s'est attribué sliplogin (l'interface SLIP 0, dans l'exemple ci-dessus, qui est le premier paramètre passé à slip.login) pour définir l'adresse IP locale (dc-slip), l'adresse IP de la machine distante (sl-helmer), le masque de sous-réseau de l'interface SLIP (0xfffffc00), et tout autre indicateur supplémentaire (autocomp). Si quelque chose se passe mal, sliplogin fournit en général des messages d'information via la fonctionnalité de trace du “démon” syslogd, qui les enregistre habituellement dans le fichier /var/log/messages (reportez-vous au pages de manuel de syslogd(8) et syslog.conf(5) et consultez peut-être aussi le fichier /etc/syslog.conf pour voir ce que trace syslogd et où il enregistre ces messages.).

26.6.2.3. Configuration du noyau

Le noyau par défaut de FreeBSD (GENERIC) fourni le support SLIP (sl(4)); dans le cas d'un noyau personnalisé, vous devez ajouter la ligne suivante à votre fichier de configuration du noyau:

device   sl

Sous FreeBSD 4.X, utilisez la ligne suivante:

pseudo-device   sl      2

Note : Le chiffre en fin de ligne représente le nombre maximum de connexions SLIP qui peuvent cohexister. Depuis FreeBSD 5.0, le pilote sl(4) est capable d'“auto-clonage”.

Par défaut, votre machine FreeBSD ne transmettra pas les paquets. Si vous désirez que votre serveur SLIP FreeBSD agisse en routeur, vous devez éditer le fichier /etc/rc.conf et positionner la variable gateway_enable à YES.

Vous devrez ensuite redémarrer pour que les nouveaux paramètres prennent effet.

Veuillez vous référer à la Chapitre 8 sur la configuration du noyau pour de l'aide sur ce sujet.

26.6.2.4. Configuration de sliplogin

Comme indiqué plus haut, il y a trois fichiers dans le répertoire /etc/sliphome qui servent à la configuration de /usr/sbin/sliplogin (voyez sliplogin(8) pour avoir la page de manuel de sliplogin): slip.hosts, définit les utilisateurs SLIP et les adresses IP qui leur sont associées, slip.login, qui ne fait en général que configurer l'interface SLIP, et (facultatif) slip.logout, qui effectue le travail inverse de slip.login quand la connexion série est terminée.

26.6.2.4.1. Configuration de slip.hosts

/etc/sliphome/slip.hosts contient des lignes avec au moins quatre champs séparés par des espaces:

  • L'identifiant (ID) d'utilisateur SLIP;

  • L'adresse locale (locale au serveur SLIP) de la liaison SLIP;

  • L'adresse de l'autre extrémité de la liaison SLIP;

  • Le masque de sous-réseau.

Les adresses locales et distantes peuvent être des noms de machines (qui seront convertis en adresses IP via /etc/hosts ou par le service de noms de domaines, en fonction de ce que contient le fichier /etc/nsswitch.conf, ou /etc/host.conf si vous utilisez FreeBSD 4.X), et le masque de sous-réseau peut être un nom qui sera converti en consultant le fichier /etc/networks. Par exemple, /etc/sliphome/slip.hosts contiendra:

#
# login local-addr      remote-addr     mask            opt1    opt2
#                                               (normal,compress,noicmp)
#
Shelmerg  dc-slip       sl-helmerg      0xfffffc00      autocomp

La ligne se termine par une ou plusieurs options:

  • normal — pas de compression des en-têtes;

  • compress — compression des en-têtes;

  • autocomp — compression des en-têtes si la machine distante l'autorise;

  • noicmp — interdit les paquets ICMP (de sorte que les paquets “ping” seront ignorés au lieu de consommer votre bande passante).

Le choix des adresses pour les deux extrémités des liaisons SLIP dépend du fait que vous leur dédiez un sous-réseau TCP/IP ou que vous comptiez utiliser un “proxy ARP” sur votre serveur SLIP (ce n'est pas un “vrai” proxy ARP, mais c'est la terminologie que nous utiliserons dans ce document pour le désigner). Si vous n'êtes pas sûr de la méthode à choisir ou de la façon d'assigner les adresses IP, référez-vous aux ouvrages sur le TCP/IP mentionnés à section sur les prérequis (Section 26.6.2.1) et/ou consultez l'administrateur de votre réseau IP.

Si vous comptez utiliser un sous-réseau IP séparé pour vos clients SLIP, vous devrez définir l'adresse de sous-réseau à partir de votre réseau IP et attribuer à chacun de vos clients SLIP une adresse IP sur ce sous-réseau. Ensuite, vous devrez probablement configurer sur votre routeur IP le plus proche une route statique vers votre sous-réseau SLIP via votre serveur SLIP.

Sinon, si vous avez l'intention d'utiliser la méthode du “proxy ARP”, vous devrez assigner à vos clients SLIP des adresses IP en provenance du sous-réseau Ethernet de votre serveur SLIP, et vous devrez également adapter vos procédures /etc/sliphome/slip.login et /etc/sliphome/slip.logout pour qu'elles utilisent arp(8) pour gérer les entrées proxy ARP dans la table ARP de votre serveur SLIP.

26.6.2.4.2. Configuration de slip.login

Le fichier /etc/sliphome/slip.login ressemble généralement à ceci:

#!/bin/sh -
#
#       @(#)slip.login  5.1 (Berkeley) 7/1/90

#
# procédure générique d'ouverture de session pour
# une liaison SLIP.  sliplogin l'appelle avec les paramètres:
#      1        2         3        4          5         6     7-n
# interface vitesse nom adresse-locale adresse-distante masque arg-optionnels
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6

Ce fichier slip.login ne fait qu'exécuter ifconfig sur l'interface SLIP appropriée avec comme paramètres les adresses locales et distantes et le masque de sous-réseau de l'interface SLIP.

Si vous avez choisi d'utiliser la méthode du “proxy ARP” (au lieu d'affecter un sous-réseau distinct à vos clients SLIP), votre fichier /etc/sliphome/slip.login devra ressembler à ceci:

#!/bin/sh -
#
#       @(#)slip.login  5.1 (Berkeley) 7/1/90

#
# procédure générique d'ouverture de session pour
# une liaison SLIP.  sliplogin l'appelle avec les paramètres:
#     1         2    3         4              5           6     7-n
# interface vitesse nom adresse-locale adresse-distante masque arg-optionnels
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
# répondre aux requêtes ARP concernant le client SLIP avec notre
# adresse Ethernet
/usr/sbin/arp -s $5 00:11:22:33:44:55 pub

La ligne supplémentaire dans ce fichier slip.login, arp -s $5 00:11:22:33:44:55 pub, crée une entrée ARP dans la table ARP du serveur SLIP. Cette entrée ARP fait que le serveur SLIP répond avec sa propre adresse MAC lorsqu'un autre noeud IP du réseau Ethernet demande à dialoguer avec le client SLIP qui possède cette adresse IP.

Dans l'exemple donné ci-dessus, remplacez l'adresse MAC Ethernet (00:11:22:33:44:55) avec l'adresse MAC de la carte Ethernet de votre système, ou sinon votre “proxy ARP” ne fonctionnera jamais! Vous pouvez déterminer l'adresse MAC de votre serveur SLIP en examinant le résultat de la commande netstat -i; la seconde ligne doit ressembler à ce qui suit:

ed0   1500  <Link>0.2.c1.28.5f.4a         191923	0   129457     0   116

Cela indique que l'adresse MAC Ethernet de ce système est 00:02:c1:28:5f:4a — les points dans les adresses MAC que donne netstat -i doivent être remplacés par des “:” et il faut ajouter un zéro devant chaque valeur hexadécimale donnée sur un seul digit pour obtenir des adresses dans le format requis par arp(8); consultez la page de manuel d'arp(8) pour avoir des informations complètes sur ces conventions.

Note : Quand vous créez les fichiers /etc/sliphome/slip.login et /etc/sliphome/slip.logout, le bit “exécutable” (i.e., chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout) doit être positionné, ou sinon sliplogin sera incapable d'exécuter la procédure.

26.6.2.4.3. Configuration de slip.logout

/etc/sliphome/slip.logout n'est pas strictement indispensable (à moins que vous n'implémentiez un “proxy ARP”), mais si vous décidez de la créer, voici un exemple de procédure slip.logout élémentaire:

#!/bin/sh -
#
#       slip.logout

#
# procédure générique de fermeture de session pour
# une liaison SLIP.  sliplogin l'appelle avec les paramètres:
#     1         2    3         4              5           6     7-n
# interface vitesse nom adresse-locale adresse-distante masque arg-optionnels
#
/sbin/ifconfig sl$1 down

Si vous utilisez la méthode “proxy ARP”, vous voudrez que /etc/sliphome/slip.logout supprime l'entrée ARP pour le client SLIP:

#!/bin/sh -
#
#       @(#)slip.logout

#
# procédure générique de fermeture de session pour
# une liaison SLIP.  sliplogin l'appelle avec les paramètres:
#     1         2    3         4              5           6     7-n
# interface vitesse nom adresse-locale adresse-distante masque arg-optionnels
#
/sbin/ifconfig sl$1 down
# Cesser de répondre aux requêtes ARP concernant le client SLIP
/usr/sbin/arp -d $5

La commande arp -d $5 supprime l'entrée ARP que la procédure slip.login pour le “proxy ARP” a ajouté quand le client SLIP a ouvert la session.

Il n'est pas inutile de répéter: assurez-vous que le bit “exécutable” de la procédure /etc/sliphome/slip.logout a été positionné après que vous l'ayez créée (i.e., chmod 755 /etc/sliphome/slip.logout).

26.6.2.5. A propos du routage

Si vous n'utilisez pas “proxy ARP” pour router les paquets entre vos clients SLIP et le reste de votre réseau (et peut-être l'Internet), vous devrez probablement ajouter des routes statiques vers le(s) routeur(s) par défaut le(s) plus proche(s) pour router le sous-réseau de vos clients SLIP via votre serveur SLIP.

26.6.2.5.1. Routes statiques

Ajouter des routes statiques vers vos routeurs les plus proches peut être problématique (voire impossible si vous n'avez pas les autorisations pour...). Si vous avez un réseau avec plusieurs routeurs, certains d'entre eux, tels que les Cisco et les Proteon, devront non seulement être configurés pour la route statique vers le sous-réseau SLIP, mais devront aussi savoir quelles routes statiques ils doivent annoncer aux autres routeurs, donc quelques compétences, un peu de dépannage ou de “bidouille” pourront être nécessaire pour que vos routes statiques fonctionnent.

26.6.2.5.2. Utiliser GateD®

Note : GateD est désormais un logiciel propriétaire et les sources ne seront donc plus disponibles (plus d'information sur le site Web de GateD). Cette section existe uniquement pour des raisons de compatibilité pour ceux qui utilisent encore une ancienne version.

Une alternative aux maux de tête que provoquent les routes statiques est d'installer GateD sur votre serveur SLIP FreeBSD et de le configurer pour qu'il utilise les protocoles de routage appropriés (RIP/OSPF/BGP/EGP) pour annoncer aux autres routeurs votre sous-réseau SLIP. Vous aurez besoin de créer un fichier /etc/gated.conf pour configurer GateD; voici un exemple, semblable à celui que l'auteur a utilisé sur un serveur SLIP FreeBSD:

#
# fichier de configuration de gated dc.dsu.edu; pour la version
# 3.5alpha5
# diffusion des informations RIP pour xxx.xxx.yy via l'interface
# Ethernet "ed"
#
#
# options de trace
#
traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ;

rip yes {
  interface sl noripout noripin ;
  interface ed ripin ripout version 1 ;
  traceoptions route ;
} ;

#
# Activer un certain nombre d'informations de trace sur l'interface
# au noyau:
kernel {
  traceoptions remnants request routes info interface ;
} ;

#
# Propager la route vers xxx.xxx.yy via l'Ethernet interface et RIP
#

export proto rip interface ed {
  proto direct {
      xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections
  } ;
} ;

#
# Accepter les routes de RIP via les interfaces Ethernet "ed"

import proto rip interface ed {
  all ;
} ;

L'exemple de fichier gated.conf ci-dessus diffuse l'information de routage concernant le sous-réseau SLIP xxx.xxx.yy via RIP sur l'interface Ethernet; si vous utilisez un pilote de périphérique Ethernet différent du pilote ed, vous devrez modifier en conséquence les références à l'interface ed. Ce fichier d'exemple active également les journaux sur /var/tmp/gated.output pour pouvoir déboguer le fonctionnement de GateD; vous pouvez désactiver ces options de trace si GateD fonctionne correctement pour vous. Vous devrez remplacer xxx.xxx.yy par l'adresse réseau de votre propre sous-réseau SLIP (assurez-vous de remplacer également le masque de sous-réseau dans la clause proto direct).

Une fois que vous avez installé et configuré GateD sur votre système, vous devrez indiquer aux procédures de démarrage de FreeBSD de lancer GateD à la place de routed. La manière la plus simple de faire cela est de positionner les variables router et router_flags dans le fichier /etc/rc.conf. Veuillez consulter la page de manuel de GateD pour des informations sur les paramètres en ligne de commande.

Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.