Mise en oeuvre du callback sur une machine linux ------------------------------------------------ Par Hervé LEMOINE (màj de C. Tardif) Note : je ne suis pas certain que tout cela fonctionne au mieux car lorsque je suis rappelé par le serveur le modem décroche la ligne puis se plante lors de l'appel de pppd. Mais cela relève peut-être d'un problème sans rapport avec le callback lui-même. Pré-requis ---------- Avant de mettre en oeuvre le callback (décrochage puis rappel de la machine appellée), il est préférable de s'assurer que la machine appelée est capable de répondre aux appels entrants. Précisons que les outils de callback présentés ici s'appuient préférentiellement sur mgetty et que l'utilisation d'un autre outil (getty-ps, uugetty, autres ...) n'a pas été testé. L'installation du package callback requiert l'utilisation de Icmake que l'on peut trouver sur ftp.icce.rug.nl dans le répertoire /pub/unix Où le trouver ? --------------- On peut le récupérer par ftp sur ftp.lip6.fr. Le package qui a été utilisée est le callback-4.22.tar.gz. Sa taille est de 124950 octets. Ce package est très facile à installer et la documentation est très claire. Composition du package ---------------------- Le package comprend : les sources, les binaires, les man pages, des examples des fichiers de configuration des fichiers d'aide à l'installation une FAQ Une documentation plus complète peut etre récupérée à la source sur ftp.icce.rug.nl dans le répertoire /pub/http/callback.txt.gz Ce fichier est disponible dans les formats txt ou ps. Une documentation en ligne est disponible à l'adresse http://www.icce.rug.nl/docs/programs/callback/callback.html En cas de problèmes ou pour de plus amples renseignements le contact est Franck B. Brokken (frank@icce.rug.nl). INSTALLATION ------------ Le décompactage du fichier callback-4.22.tar.gz crée un répertoire callback dans lequel on trouve l'utilitaire de compilation et d'installation "build" cd callback Avant de compiler les sources, il faut éditer le fichier configure.h et adapter son contenu à votre système. /* What is the name of the modem-process (without the ttySx-suffix) #define MODEMPROCESS "/usr/local/sbin/modem" Ceci permet à l'outil de callback (cbmgetty) de savoir où se trouve l'outil qui va lui permettre de décrocher la ligne (mgetty dans notre cas)). Par la suite, on créera un lien entre /usr/local/sbin/modem.ttyS0 et mgetty pour définir son emplacement (variable selon les distributions). #define MGETTY_PATH "/etc/mgetty/mgetty.config" Définit l'emplacement du fichier de configuration de mgetty /* What is the name of the base-path for the callback-configuration files ? */ /* Note: the default MUST have a trailing / */ #define BASE_PATH "/conf/callback/" Définit l'emplacement des fichiers de configuration du callback. Il est à noter que le principal fichier de configuration (callback.setup) n'est pas concerné par cette rubrique. Ce sont les variables FIRSTSETUP, SECONDSETUP, THIRDSETUP qui fixent sont emplcement. #define NOLOGIN_FILE "/etc/nologin.%s" Permet de définir le nom et l'emplacement du fichier qui précise à mgetty de ne pas décrocher %s est le nom du port d'écoute (ttyS0, ttyS1, etc ...) La compilation des programmes par build progs génère les binaires cb, clogin et cbmgetty dans le répertoire cb ATTENTION : Ceci suppose que vous ayez placé Icmake dans un répertoire présent dans le PATH de votre machine linux. La version utilisée ici est icmake-6.20 Créer ensuite un répertoire à l'endroit que vous avez définit pour la variable BASE_PATH (/conf/callback par défaut) A ce stade de l'installation, vous devez choisir le mode de fonctionnement des outils de callback. mode dial-in accès direct à la machine sans rappel, mode callback décrochage puis rappel de la machine Si vous choisissez le mode dial-in, taper build install dialin puis cp examples/dialin.setup /etc/callback.setup En mode callback, taper build install callback puis cp examples/callback.setup /etc/callback.setup Ceci copie le programme cb/cb (le programme de rappel) dans BASE_PATH Créer le lien symbolique ln -s /conf/callback/cb /sbin/cb puis copier les fichiers correspondant à votre port d'écoute (ttyS0, ttyS1, etc ...) dans BASE_PATH cp examples/*.ttyS0 /conf/callback Créer le lien symbolique ln -s /usr/local/sbin/mgetty /sbin/modem.ttyS0 si votre port d'écoute est le port ttyS0 (le lien doit être créé vers le mgetty fourni dans le package callback) Mettre à jour le fichier /etc/inittab de la façon suivante : s1:34:respawn:/conf/callback/cbmgetty ttyS0 Adapter le fichier /etc/callback.setup à votre système (voir Configuration du fichier /etc/callback.setup) Faire chmod 600 /etc/callback.setup pour que les numéros de téléphone ne soient visible que par l'utilisateur root. Modifier le fichier de configuration de mgetty login.config * - - /conf/callback/cblogin @ Pour que les modifications soient prises en compte et réinitialiser le processus d'init, taper cb init A ce moment, on doit voir le processus modem.ttyS0 apparaitre dans la liste des processus actifs Configuration du fichier /etc/callback.setup -------------------------------------------- ############################################################################ # The callback programs look for this file in the following order: # 1. /etc/callback.setup # 2. /usr/etc/callback.setup # 3. /usr/local/etc/callback.setup # As soon as one of these files is found, further searching stops. # Mode callback pour se faire rappeler # Mode dial-in pour les appels entrants mode: callback # Le port sur lequel on attends les appels line: ttyS0 # A activer si l'on souhaite voir la liste des numéros de téléphone phonenumbers # La partie a examiner pour fixer les numéro à rappeler destinations: pppcb: home 0123456789 pppin: open direct users: cbppp: pppcb ppp: pppin Il faut définir des "destinations" que nous avons appelé pppcb et pppin À la destination pppcb nous avons associé le numéro 0123456789 qui est le numéro auquel on souhaite etre rappelé. "home" représente un mot clé que la machine appelante devra connaître pour pouvoir se faire rappeler. La rubrique users" sert à définir quels logins on devra utiliser pour être authorisé à pénétrer dans le système. Dans notre exemple, le login cbppp est associé à la destination "pppcb" qui elle meme est associée au numéro de téléphone 0123456789. Si bien que lorsque l'on appelle la machine de callback avec le login cbppp, cbmgetty décroche le modem puis raccroche et rappelle au numéro 0123456789. La destination pppin est particulière car elle est associée au mot clé "direct", ce qui signifie que les logins qui sont associés à cette destination (ppp en l'occurence) sont authorisés à entrer dans le système mais ne seront pas rappelés. La séquence d'appel par chat ---------------------------- Du coté de l'appellant il faut intégrer le mot clé "home" entre le login et le mot de passe (s'il y en a un) TELEPHONE=9876543210 (numéro d'appel du serveur callback) ACCOUNT=cbppp PASSWORD=cbppp /usr/sbin/chat -v -t 30 \ ABORT '\nBUSY\r' \ ABORT '\nNO CARRIER\r' \ ABORT '\nNO ANSWER\r' \ '' \rATS40=3 \ '' \rATZ \ 'OK-+++\c-OK' ATH0 \ OK ATDT$TELEPHONE \ CONNECT '' \ ogin:--ogin: $ACCOUNT \ '' home \ assword: $PASSWORD Quelques commandes utiles.... ----------------------------- $ cb list Default tty-line: ----------------- ttyS0 Callback users: --------------- Possible callback destinations: ------------------------------- home -- 0123456789 Possible callback destinations: ------------------------------- open -- dial-in Affiche la liste des numéros (si l'option est positionnée dans /etc/callback.setup) $ cb list ppp Possible callback destinations: ------------------------------- open -- dial-in Donne la liste des destinations pour le login "ppp" $ cb cbppp home Permet d'appeler manuellement la destination "home" $ cb file Active file: "/etc/mgetty+sendfax/callback/active.ttyS0": speed 38400 port ttyS0 modem-type data rings 2 login-prompt This is modem port \L of @\r\n\nPlease login:\040 init-chat "" ATZ OK notify root switchbd 19200 Callback state ttyS0: ready for incoming calls. Affiche la configuration du callback $ cb init redémarre le processus init et recharge mgetty $ cb state Callback state ttyS0: ready for incoming calls. Sans commentaires ...