Laurent Sintes Exemple de configuration multi-fournisseurs d'accès Ce texte est un court exemple de configuration de ppp sour Linux pour 2 ou plusieurs fournisseurs d'accès distincts. Dans cet exemple, nous traiterons le cas d'une configuration avec 2 fournisseurs: cadrus et oleane, mais l'exemple se veut générique. Nous présupposons que au minimum: ---- ------------ --- -- ------- - vous avez bien donné un nom à votre machine - l'interface de loopback a bien été initialisé au démarrage de la machine (généralement par le script /etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1 /sbin/route add 127.0.0.1 Il n'est pas nécessairement inutile de tester le bon fonctionnement de l'adresse de loopback hors connexion: ping 127.0.0.1 - le fichier /etc/host.conf existe et ressemble à quelque chose de ce genre: order hosts,bind multi on - vous avez bien créé le périphérique /dev/modem: (exemple pour un modem en com2) cd /etc ./MAKEDEV cua1 #si cua1 n'existe pas ln -s cua1 modem Note: si vous utilisez la distribution RedHat, l'utilitaire netcfg, sous X11, permet de configurer tout ça assez facilement. A partir de là, tout est simple: * Le fichier /etc/hosts -- ------- ---------- Dans mon cas il y en a deux. /etc/hosts.oleane /etc/hosts.cadrus Ils contiendront au minimum: /etc/hosts.oleane 127.0.0.1 localhost loopback 127.0.0.1 mercedes.oleane.com mercedes /etc/hosts.cadrus 127.0.0.1 localhost loopback 127.0.0.1 mercedes.cadrus.fr mercedes * Le fichier /etc/resolv.conf -- ------- ---------------- Pareil, on en créé deux: /etc/resolv.conf.oleane search oleane.com nameserver 194.2.0.20 nameserver 194.2.0.50 /etc/resolv.conf.cadrus search cadrus.com nameserver 194.51.236.33 nameserver 194.2.128.1 * Le fichier sendmail.cf -- ------- ----------- Si vous comptez utiliser un relai SMTP différent pour chaque fournisseur il vous faudra générer deux fichiers /etc/sendmail.cf /etc/sendmail.cf.fournisseur1 /etc/sendmail.cf.fournisseur2 et rajouter dans le script ip-up: kill -1 `tail -1 /var/run/sendmail.pid` * Le fichier /etc/ppp/options -- ------- ---------------- #/etc/ppp/options.oleane asyncmap 0 mru 296 mtu 1064 noipdefault modem defaultroute crtscts debug -detach lock usehostname #/etc/ppp/options.cadrus netmask 255.255.255.224 asyncmap 0 noipdefault modem defaultroute crtscts debug -detach lock usehostname * Le script ip-up (/etc/ppp/ip-up) -- ------ ----- -------------- Contiendra au minimum pour notre exemple: kill -1 `tail -1 /var/run/sendmail.pid` #on force la lecture #du nouveau sendmail.cf * Les scripts de connexion --- ------- -- --------- /usr/local/bin/ppp-on.oleane #/bin/sh cat /etc/ppp/options.oleane > /etc/ppp/options cat /etc/resolv.conf.oleane > /etc/resolv.conf cat /etc/sendmail.cf.oleane > /etc/sendmail.cf cat /etc/hosts.oleane > /etc/hosts chmod 644 /etc/resolv.conf setserial /dev/modem spd_vhi #autorise 115200 bps #cette ligne est normalement inutile mais deux précautions valent #mieux qu'une :) stty crtscts speed 38400 < /dev/modem #mise en fonction de rts + cts #grace à l'option spd_vhi de #setserial, le DTE sera positionné #à 115200bps cat /etc/sendmail.cf.oleane > /etc/sendmail.cf exec pppd connect '/usr/sbin/chat -v \ "" "ATZ" OK "AT%X2DT0562301170,," CONNECT "" TIMEOUT 10 ogin:--ogin: xxxxx ssword: yyyyy' \ /dev/modem 38400 /usr/local/bin/ppp-on.cadrus #/bin/sh cat /etc/ppp/options.cadrus > /etc/ppp/options cat /etc/resolv.conf.cadrus > /etc/resolv.conf cat /etc/sendmail.cf.cadrus > /etc/sendmail.cf cat /etc/hosts.cadrus > /etc/hosts chmod 644 /etc/resolv.conf setserial /dev/modem spd_vhi #autorise 115200 bps #cette ligne est normalement inutile mais deux précautions valent #mieux qu'une :) stty crtscts speed 38400 < /dev/modem #mise en fonction de rts + cts cat /etc/sendmail.cf.cadrus > /etc/sendmail.cf exec pppd connect '/usr/sbin/chat -v \ "" "ATZ" OK "ATDT0561003001,,," CONNECT "" TIMEOUT 5 name:--name:--name:--name:--name: xxxx ssword: yyyyy nex: ppp' \ /dev/cua1 38400 * Le script de lancement -- ------ -- --------- Sous root, il est possible de lancer ppp-on.oleane ou ppp-on.cadrus sans problème au prompt du shell. Si vous voulez autoriser n'importe quel membre du groupe 'ppp' par exemple à utiliser la connexion internet, il vous faudra utiliser un binaire setuid (ppp-on par exemple): chmod 4750 /usr/local/bin/ppp-on chown root.ppp /usr/local/bin/ppp-on #chmod 4755 au lieu de 4750 pour autoriser n'importe qui à lancer #la connexion ppp Puis un exemple de programme ppp-on.c qui, après compilation par gcc -Wall ppp-on.c -o ppp-on donnera le binaire ppp-on: #include #include #include int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "usage ppp-on nom_fournisseur\n"); return 1; } if (! strcmp(argv[1], "oleane")) execl ("/usr/local/bin/ppp-on.oleane", "oleane", NULL); else if (! strcmp(argv[1], "cadrus")) execl ("/usr/local/bin/ppp-on.cadrus", "cadrus", NULL); else { fprintf(stderr, "fournisseur inconnu: %s\n", argv[1]); return 1 } /* cas où execl est revenu */ perror ("erreur d'exécution: "); return 1; }