Utiliser le modem ECI USB sous Linux
Ayant besoin d’une connexion à haut débit pour mon travail (je travaille à domicile), et travaillant sous linux, il m’a fallu passer par les affres de la configuration d’une connexion ADSL sous linux.
La configuration en question n’a pas été sans difficulté : tout d’abord équipé d’un modem ethernet (dont la configuration est supposément plus aisée sous linux), je n’ai jamais pu faire marcher celui-ci pour une raison que je n’ai pas pu déterminer (pour ceux intéressés, les requêtes de connexion restaient sans réponses).
C'est donc avec bonheur que j’ai constaté que la connexion avec un modem USB ECI pouvait se faire sans trop de problèmes grâce au pilote eci-adsl développé sur SourceForge.
Installation du pilote
Après avoir téléchargé l’archive compressée depuis le site du projet, et en ayant suivi les différentes indications d’installation (en particulier, la création du fichier /etc/ppp/peers/adsl
), j’ai pu lancer la commande /usr/bin/local/startmodem
et voir mon modem se connecter à mon fournisseur d’accès (Nerim) du premier coup.
Le hic, c'est qu'il n’a voulu le faire que le premier coup ! Il bloquait ensuite lors de la deuxième partie de la connexion au block 259, ce qui, après moultes recherches s'avéra être dû à un mauvais fichier de synchronisation, qui, une fois changé pour une autre version (version DMT sur Aix-en-Provence), m’a permis de me connecter sans difficulté sur Internet.
Les modules pour le noyau (version 2.4.x) nécessaires à la connexion sont les suivants :
usb-uhci
pour la gestion du système USB (le piloteuhci
compilé directement dans le noyau ne fonctionnait pas avec le modem)ppp_deflate
,ppp_generic
,slhc
,ppp_synctty
,af_packet
,n_hdlc
pour la gestion de la connexion PPP
Réseau local par N.A.T.
Disposant de plusieurs ordinateurs à domicile, j’ai mis en place une translation d’adresse réseau permettant aux autres ordinateurs relié à l’ordinateur assurant la connexion d’accéder à Internet de manière transparente.
Pour cela, il m’a fallu activer les iptables
, qui nécessitent les modules suivants : ip_tables
, ip_conntrack
, iptables_nat
, ipt_MASQUERADE
, iptable_filter
. Les procédures d’installation sont détaillées dans un HOWTO.
Une fois cela fait, utilisant Debian (Woody), j’ai ajouté le fichier iptables
suivant dans le répertoire /etc/ppp/ip-up.d/
:
#!/bin/sh /bin/echo "1" > /proc/sys/net/ipv4/ip_forward /sbin/iptables -t nat -A POSTROUTING -o $PPP_IFACE -j MASQUERADE
La première ligne active la transmission des paquets réseaux d’une interface réseau à une autre. La deuxième active la translation d’adresse réseau depuis l’interface indiquée par la variable PPP_IFACE vers les autres interfaces (en l’occurrence, eth0
pour mon installation).
Ensuite, j’ai installé un service DHCP sur l’ordinateur de la connexion avec le fichier /etc/dhcp.conf
suivant :
default-lease-time 600; max-lease-time 7200; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.2 192.168.0.20; option routers 192.168.0.1; option domain-name-servers 62.4.16.70, 62.4.17.109; }
Cela permet à tout ordinateur sur le réseau local de se connecter directement à internet via DHCP. 192.168.0.1
est l’adresse affectée à l’ordinateur connecté au modem, et que j’ai dû indiquer "en dur" les serveurs DNS de mon fournisseur d’accès (faute d’avoir trouvé un autre moyen).
Branchement à chaud (hotplug)
Devoir lancé en tant que root la commande /usr/local/bin/startmodem
ne me paraissant pas très "convivial", j’ai décidé de faire en sorte que la connexion se lance automatiquement lorsque le modem est branché.
J’utilise pour cela les scripts de hotplug (disponible sous débian dans le paquet hotplug
). La mise en place de ces scripts pour le cas de mon modem ECI USB se fait de la manière suivante :
- le fichier
/etc/hotplug/usb.usermap.local
est comme suit:Content of usb.usermap.local in a tabularized format for better reading # usb module match_flags idVendor idProduct bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info # match_flags set to 0x0003 seems to correspond to a device matching idVendor and idProduct # Device of the chip before loading the firmware ez-usb 0x0003 0x0547 0x2131 0x0000 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00000000 # Device of the modem itself modem-adsl 0x0003 0x0915 0x8000 0x0000 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00000000 /usr/sbin/update-usb.usermap
[ceci s'applique sans doute uniquement à Debian, pour les autres distributions, il doit sans doute falloir éditer/etc/hotplug/usb.usermap
directement] - ensutie, j’ai créé les fichiers suivants (en prenant soin de les rendre exécutables), consistant essentiellement en le contenu de
/usr/local/bin/startmodem
divisé convenablement :/etc/hotplug/usb/ez-usb
:#!/bin/sh /usr/local/bin/eci-load1 /usr/local/bin/eci_firm_kit_wanadoo.bin if [ $? -ne 0 ] ; then echo "Failed to load firmware" ; exit -1 ; fi ; echo "Load Firmware OK"
/etc/hotplug/usb/modem-adsl
:#!/bin/sh /usr/local/bin/eci-load2 /usr/local/bin/eci_wan3.bin if [ $? -ne 0 ] ; then echo "Failed to setup the modem" ; exit -1 ; fi ; echo " … Setup Modem OK" ; echo "… modem init OK" ; echo "Connect Modem …" ; nice --20 pppd call adsl updetach if [ $? -ne 0 ] ; then echo "Connexion failed" ; exit -1 ; fi ; echo "… Connect Modem OK" ;
Désormais, ma connexion s'établit automatiquement lorsque le modem est branché ! Notez que, en théorie, cela n’est quasiment jamais nécessaire (surtout en ayant l’option persist
dans /etc/ppp/peers/adsl
), mais que dans la pratique, cela s'avère bien utile :)