
Orange™ nous a fournit, au boulot, une carte Option Fusion +, dans le cadre d'un essai. Cette carte correspond à priori à l'offre suivante : http://www.mobilite.fr.orange-business.com/public/oev4/html/fr/pme/echanger/be/be.php (forfait illimité, avec utilisation d'un VPN).

D'après Orange™, et d'après notre contact chez cet opérateur mobile, cette carte n'est pas garantie de marcher sous GNU/Linux. Qu'à cela ne tienne, j'ai réussi à la faire fonctionner, plus facilement que prévu en fin de compte, après avoir quand même pas mal bataillé. Ce document a pour but de vous guider dans l'installation et la configuration de cette carte.
Je ne garantie pas le bon (ou le mauvais) fonctionnement de cette méthode, et me dégage de tout problème (carte PCMCIA [FR] qui grille, départ de votre conjoint, défaite de l'équipe de France en finale de coupe du monde de football en allemagne) qui pourrait découler de l'utilisation bonne ou erronnée de ce document. Vous prenez vos propres responsabilités en le suivant. Je n'ai strictement aucun rapport avec Orange™, cette documentation est fournie par moi-même, et n'est en aucun cas supportée par Orange™.
La source de la plupart de ces informations est le site http://www.pharscape.org/ [EN], très complet sur le sujet, et surtout actif (l'avant dernier pilote au moment de la rédaction de ce document nécessitait un patchage sauvage des sources du pilote pour pouvoir être compilé).
A noter que le forfait Orange™ allant avec cette carte est normalement bridé par Orange™, à savoir presque tous les ports sont bloqués, la version avec laquelle j'ai pu rédiger cette documentation était débridée, les principaux protocoles étaient complètement ouverts. D'après Orange™, avec la version publique de cette carte et du forfait qui va avec, il faut obligatoirement utiliser IPSEC [FR].
La partie la plus compliquée se situe au niveau de la configuration du noyau et des modules qui vont avec.
Le noyau que vous allez utiliser doit :
Vous pouvez garder le noyau par défaut de votre distribution, ou bien choisir de compiler votre propre noyau. J'ai choisi la seconde option, car j'apprécie de patcher mon noyau avec les excellentes rustines de Con Kolivas [EN], qui apportent du mieux en terme de réactivité générale aux bureaux. Bref, je m'égare, il vous faudra compiler en module le pilote Nozomi, donc vous aurez besoin des en-têtes et des sources de votre noyau.
Pour mon cas, je personnalise complètement mon noyau, voilà les options à activer pour un noyau 2.6, pour être précis un 2.6.17.1 patché ConKolivas 2.6.17-ck1 (chaque indentation supplémentaire correspond à un sous-menu du noyau) :
root@iguzki:/usr/src/linux-2.6.17# sudo make menuconfig
D'abord, le PCMCIA [FR] :
Bus options (PCI, PCMCIA, EISA, MCA, ISA) --->
PCCARD (PCMCIA/CardBus) support --->
<*> PCCard (PCMCIA/CardBus) support
<*> CardBus yenta-compatible bridge support
Je préfère inclure en dur ces fonctionnalités, mais vous pouvez parfaitement les inclure sous forme de module, ce qui est généralement conseillé par ailleurs.
Device Drivers --->
USB support --->
USB Serial Converter support --->
<M> USB Serial Converter support
Aucune autre option n'est nécessaire dans ce menu pour faire fonctionner cette carte. Aucun pilote ne peut faire marcher la carte, y compris le pilote générique, en tout cas au moment d'écrire ce document.
Puis on compile le noyau :
root@iguzki:/usr/src/linux-2.6.17# make clean && make && make modules_install
On l'installe, on relance son ordinateur en choisissant de démarrer avec ce nouveau noyau.
Une fois que vous avez votre machine qui démarre bien avec ce noyau, que le PCMCIA [FR] est reconnu, on va pouvoir continuer avec la compilation du module.
Je l'ai récupéré à cet emplacement :
http://www.pharscape.org/3G/La version actuelle est la 2.1, à savoir le fichier nozomi_2.1_060703.tar.gz
J'installe mes paquets sources dans /usr/local/src :
root@iguzki:/usr/src/linux-2.6.17# cd /usr/local/src root@iguzki:/usr/local/src# mkdir nozomi_2.1 root@iguzki:/usr/local/src# cd nozomi_2.1 root@iguzki:/usr/local/src/nozomi_2.1# wget http://www.pharscape.org/3G/nozomi_2.1_060703.tar.gz root@iguzki:/usr/local/src/nozomi_2.1# tar xvfz nozomi_2.1_060703.tar.gz
Compilation :
root@iguzki:/usr/local/src/nozomi_2.1# make
Installation :
root@iguzki:/usr/local/src/nozomi_2.1# make install
Attention, pour moi le mécanisme d'installation ne fonctionne pas. J'ai donc installé manuellement le pilote :
root@iguzki:/usr/local/src/nozomi_2.1# mkdir -p /lib/modules/2.6.17-ck1/kernel/drivers/pci/hotplug root@iguzki:/usr/local/src/nozomi_2.1# cp -f nozomi.ko /lib/modules/2.6.17-ck1/kernel/drivers/pci/hotplug root@iguzki:/usr/local/src/nozomi_2.1# update-modules
Normalement, vous disposez maintenant d'un noyau supportant votre carte, il ne reste plus qu'à charger le module. Pour ne pas avoir à m'embêter avec la gestion des modules, j'utilise modconf (apt-get install modconf), petit utilitaire utilisant ncurses, chargeant ou déchargeant les modules et surtout gérant pour vous la même chose au démarrage.
Si vous préférez gérer vous même ce module, libre à vous. Pour le charger :
root@iguzki:/usr/local/src/nozomi_2.1# modprobe nozomi
Normalement, si tout se passe bien, alors vous obtiendrez la même sortie avec la commande suivante :
root@iguzki:/usr/local/src/nozomi_2.1# lsmod | grep nozomi nozomi 18192 0 root@iguzki:/usr/local/src/nozomi_2.1#
Le chiffre peut bien sûr varier selon les versions, en tout cas on voit le module qui est bien et bien chargé.
L'affichage des messages du noyau doit également montrer le pilote :
root@iguzki:/usr/local/src/nozomi_2.1# dmesg | grep nozomi Initializing Nozomi driver 2.1 (build date: Jul 9 2006 19:18:32)
L'insertion de la carte dans son slot PCMCIA [FR] doit à ce moment là provoquer l'affichage du message suivant, à peu de choses près :
pccard: CardBus card inserted into slot 0 [1504] nozomi_card_init(): Init, cards_found: 1 [1390] nozomi_get_card_type(): Card type is: 2048 PCI: Enabling device 0000:03:00.2 (0000 -> 0002) ACPI: PCI Interrupt 0000:03:00.2[A] -> Link [LNKA] -> GSI 5 (level, low) -> IRQ 5 Nozomi driver nozomi_tty<6>[836] nozomi_read_config_table(): Version of card: 3 [828] nozomi_read_config_table(): Initialization OK!
Normalement, udev a du créer 4 pseudos-fichiers :
root@iguzki:/usr/local/src/nozomi_2.1# ls -l /dev/noz* crw-rw---- 1 root dialout 241, 0 2006-07-09 19:21 /dev/noz0 crw-rw---- 1 root dialout 241, 1 2006-07-09 19:21 /dev/noz1 crw-rw---- 1 root dialout 241, 2 2006-07-09 19:21 /dev/noz2 crw-rw---- 1 root dialout 241, 3 2006-07-09 19:21 /dev/noz3
Tout va bien jusque là, la carte est bien reconnue.
Ensuite, il faut installer l'utilitaire de contrôle pour votre carte :
root@iguzki:/usr/local/src/nozomi_2.1# apt-get install gcom
La version actuellement diponible sous Debian GNU/Linux Unstable est la 0.3.
L'autre solution est de le compiler l'utilitaire après l'avoir récupéré sur le site qui maintient déjà le pilote Nozomi : http://www.pharscape.org/3G/comgt/
Une fois cet utilitaire installé, vous pouvez vous enregistrer sur le réseau :
root@iguzki:~# gcom -d /dev/noz0 Enter PIN number: 1234 Waiting for Registration..(120 sec max)........... Registered on Home network: "Orange F",0 Signal Quality: 22,0 root@iguzki:/usr/src/linux-2.6.17#
Remplacez bien sûr 1234 par votre code d'identification personnel (code PIN).
Vous pouvez obtenir avec ce même outil différentes informations.
Informations générales :
root@iguzki:~# gcom -d /dev/noz0 info ##### GlobeTrotter Configuration ##### Manufacturer Text: Option IMEI and Serial Number: 359838029193275,NF2C63P143 Manufacturer's Revision: (Date: Mar 06 2006, Time: 09:00:31) Hardware Revision: 2.1 Network Locked: 1 Customisation: Not defined Band settings: Europe 900/1800MHz (4) Auto Attach: ##### END ##### root@iguzki:~#
Qualité du signal :
root@iguzki:~# gcom -d /dev/noz0 sig Signal Quality: 19,0 root@iguzki:/usr/src/linux-2.6.17#
Enregistrement sur le réseau :
root@iguzki:~# gcom -d /dev/noz0 reg Waiting for Registration Registered on Home network: "Orange F",0
Vous êtes enregistrés sur le réseau Orange™, dès lors il suffit de se connecter, plusieurs logiciels permettent de le faire, comme vwdial, kppp, ou pppd, j'ai choisi ce dernier, bien que vwdial me paraisse plus moderne.
Le point d'accès au réseau est à bien déterminer, 3 sont diponibles chez Orange™. Demandez au support ou bien à votre fournisseur celui à utiliser, la carte de test que j'ai eu entre mes mains avait accès aux trois, si c'est le cas pour les cartes publiques, attention à ne pas aller utiliser un autre réseau que le vôtre, la facture pourrait en être douloureuse. En voici la liste, à priori complète à ce jour :
Merci à Fabien de m'avoir trouvé cette liste.
pppd est une méthode éprouvée, et surtout très documentée sur Internet.
chat est un binaire venant avec le paquet ppp sous Debian GNU/Linux, il sert à dialoguer avec le serveur distant, et donc à établir la connexion proprement dîte.
Cette méthode est plus compliquée que wvdial, et surtout beaucoup plus lente à la connexion. Je vous conseille donc de passer directement à la section suivante, consacrée à wvdial.
Voilà une configuration "verbeuse" d'un tiers pour pppd (vous pouvez le reprendre tel quel) :
root@iguzki:~# cat /etc/ppp/peers/orange # This optionfile was generated by pppconfig 2.3.2. # # noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/orange" #debug nodetach /dev/noz0 115200 #mtu 1452 defaultroute noipdefault # ipcp-accept-local # ipcp-accept-remote user any password any # remotename orange # ipparam orange usepeerdns # novj # xonxoff # noccp # asyncmap 0 # proxyarp root@iguzki:~#
On voit que la connexion se fait via un script que voilà (vous pouvez le reprendre tel quel) :
root@iguzki:~# cat /etc/chatscripts/orange # This chatfile was generated by pppconfig 2.3.2. # Please do not delete any of the comments. Pppconfig needs them. # # ispauth chat # abortstring ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIALTONE' ABORT 'NO ANSWER' ABORT DELAYED # modeminit '' ATZ # Check SIM pin should return ready OK-AT-OK "AT+CPIN?" # Check the whether 3G or GPRS OK-AT-OK "AT$NWRAT?" # Set +CGEE to 2 OK-AT-OK "AT+CMEE=2" # Setup PDP? in +CGDCONT OK-AT-OK 'AT+CGDCONT=1,"IP","orange.fr"' # Setup +CGEQREG OK-AT-OK 'AT+CGEQREQ=3,3,64,384,0,0,2,0,"0E0","0E0",3,0,0' # Attached to Orange network, will return 1 OK-AT-OK 'AT+CGATT?' # ispnumber #OK-AT-OK 'ATD*99***1#' OK-AT-OK 'ATD*99#' # ispconnect #CONNECT \c # prelogin # ispname # ogin: "dummy" # isppassword # ssword: \q"dummy" # postlogin #'' \c # end of pppconfig stuff root@iguzki:~#
L'APN est orange.fr, ce qui est important, je n'ai pas trouvé en essayant de configurer la carte de documentation sur Internet référençant correctement ce paramètre, évidemment différent d'un pays à l'autre. J'ai trouvé une liste recençant les APNs principaux [EN], qui semble assez correcte, au moins pour la France, mais les trois APNs Orange™ n'y sont pas, voir la liste plus haut, testée et valide à ce jour..
Vous pouvez alors vous connecter à l'Internet avec la simple commande pon orange, qui donne le résultat suivant, en mode verbeux :
root@iguzki:~# pon orange Serial connection established. using channel 2 Using interface ppp0 Connect: ppp0 <--> /dev/noz0 sent [LCP ConfReq id=0x1 <asyncmap 0xa0000> <magic 0x13452876> <pcomp> <accomp>] rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap MD5> <magic 0x121ad4b0> <pcomp> <accomp>] sent [LCP ConfAck id=0x2 <asyncmap 0x0> <auth chap MD5> <magic 0x121ad4b0> <pcomp> <accomp>] rcvd [LCP ConfAck id=0x1 <asyncmap 0xa0000> <magic 0x13452876> <pcomp> <accomp>] sent [LCP EchoReq id=0x0 magic=0x13452876] rcvd [LCP DiscReq id=0x3 magic=0x161ad4b0] rcvd [CHAP Challenge id=0x1 <6e7f9a34b628243d16e4ec1008687231>, name = "UMTS_CHAP_SRVR"] sent [CHAP Response id=0x1 <511cde068bbca2317096b42258ad828c>, name = "any"] rcvd [LCP EchoRep id=0x0 magic=0x161ad4b1 13 45 23 76] rcvd [CHAP Success id=0x1 ""] CHAP authentication succeeded CHAP authentication succeeded sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>] rcvd [IPCP ConfNak id=0x1 <ms-dns1 10.11.12.13> <ms-dns3 10.11.12.14> <ms-wins 10.11.12.13> <ms-wins 10.11.12.14>] sent [IPCP ConfReq id=0x2 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns3 10.11.12.14>] rcvd [IPCP ConfReq id=0x0 <addr 212.234.96.90>] sent [IPCP ConfAck id=0x0 <addr 212.234.96.90>] rcvd [IPCP ConfRej id=0x2 <compress VJ 0f 01>] sent [IPCP ConfReq id=0x3 <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns3 10.11.12.14>] rcvd [IPCP ConfNak id=0x3 <addr 10.16.133.104> <ms-dns1 194.51.3.56> <ms-dns3 194.51.3.76>] sent [IPCP ConfReq id=0x4 <addr 10.16.133.104> <ms-dns1 194.51.3.56> <ms-dns3 194.51.3.76>] rcvd [IPCP ConfAck id=0x4 <addr 10.16.133.104> <ms-dns1 194.51.3.56> <ms-dns3 194.51.3.76>] Cannot determine ethernet address for proxy ARP local IP address 10.16.133.104 remote IP address 212.234.96.90 primary DNS address 194.51.3.56 secondary DNS address 194.51.3.76 Script /etc/ppp/ip-up started (pid 4705) Script /etc/ppp/ip-up finished (pid 4705), status = 0x0 Terminating on signal 15 Connect time 12.0 minutes. Sent 9680 bytes, received 89068 bytes. Script /etc/ppp/ip-down started (pid 5422) sent [LCP TermReq id=0x2 "User request"] rcvd [LCP TermAck id=0x2] Connection terminated. Waiting for 1 child processes... script /etc/ppp/ip-down, pid 5422 Script /etc/ppp/ip-down finished (pid 5422), status = 0x0 zsh: exit 5 pon orange root@iguzki ~#
La ligne Terminating on signal 15 correspond à un control-c, pour mettre fin à la connexion, pour la suite de ce document, je considère que vous ny avez pas mis fin.
Une autre alternative est l'utilisation de wvdial, plus simple à mon goût, et surtout beaucoup plus rapide à la connexion. Il fait appel à ppp par la suite, son fichier de configuration permet d'appeler différents services, et donc avec différents modem, là où ppp utilise plusieurs fichiers pour chacun des tiers.
Dans notre cas précis, voilà le fichier de configuration à utiliser, les 3 APNs Orange™ sont déclarés ici, en pratique vous n'aurez accès qu'à celui concerné par votre forfait, celui de l'accès illimité entreprise d'Orange™ est l'accès entreprise illimité en volume de données et en temps de connexion, appelé ici orange-vpn :
root@iguzki ~# cat /etc/wvdial.conf [Dialer Defaults] Modem = /dev/noz0 Baud = 460800 SetVolume = 0 Dial Command = ATDT FlowControl = NOFLOW Init1 = ATZ Init2 = ATM0 [Dialer orange-public] Username = any Password = any Phone = *99***1# Stupid Mode = 1 Init3 = AT+CGDCONT=1,"IP","orange.fr" Dial Attempts = 3 [Dialer orange-entreprise] Username = any Password = any Phone = *99***1# Stupid Mode = 1 Init3 = AT+CGDCONT=1,"IP","internet-entreprise" Dial Attempts = 3 [Dialer orange-vpn] Username = any Password = any Phone = *99***1# Stupid Mode = 1 Init3 = AT+CGDCONT=1,"IP","orange.vpn" Dial Attempts = 3 root@iguzki ~#
Il faut aussi déclarer une configuration pour ppp, que wvdial appellera ensuite :
root@iguzki ~# cat /etc/ppp/peers/wvdial plugin passwordfd.so noauth name wvdial replacedefaultroute noipdefault nomagic usepeerdns ipcp-accept-local ipcp-accept-remote nomp noccp nopredictor1 novj novjccomp nobsdcomp root@iguzki ~#
Une fois ces deux fichiers de configuration renseignés, il suffit ensuite d'appeler l'utilitaire wvdial, avec en paramètre la section contenant la configuration désirée :
root@iguzki ~# wvdial orange-vpn --> WvDial: Internet dialer version 1.56 --> Cannot get information for serial port. --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATM0 ATM0 OK --> Sending: AT+CGDCONT=1,"IP","orange.fr" AT+CGDCONT=1,"IP","orange.fr" OK --> Modem initialized. --> Sending: ATDT*99***1# --> Waiting for carrier. ATDT*99***1# CONNECT 393600 --> Carrier detected. Starting PPP immediately. --> Starting pppd at Tue Jul 11 01:21:15 2006 --> Pid of pppd: 4794 --> Using interface ppp0 --> Authentication (CHAP) started --> Authentication (CHAP) successful --> local IP address 10.16.131.243 --> remote IP address 212.234.96.91 --> primary DNS address 194.51.3.56 --> secondary DNS address 194.51.3.76 --> Script /etc/ppp/ip-up run successful --> Default route Ok. --> Nameserver (DNS) Ok. --> Connected... Press Ctrl-C to disconnect
Une fois connecté, comme indiqué ci-dessus, la combinaison de touches controle et c vous permette de vous déconnecter.
Dès lors, vous avez accès à Internet, avec un paramétrage réseau un peu bizarre à mon goût (adressage IP RFC 1918 [FR], ...) :
root@iguzki:~# ifconfig ppp0
ppp0 Lien encap:Protocole Point-à-Point
inet adr:10.15.145.208 P-t-P:212.234.96.27 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:9 errors:1 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:3
RX bytes:180 (180.0 b) TX bytes:186 (186.0 b)
root@iguzki:~# cat /etc/resolv.conf
nameserver 194.51.3.56
nameserver 194.51.3.76
root@iguzki:/usr/local/src/nozomi_2.1# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
212.234.96.91 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
root@iguzki:~# wget http://www.linuxfr.org
--01:01:39-- http://www.linuxfr.org/
=> `index.html'
Résolution de www.linuxfr.org... 212.27.33.225
Connecting to www.linuxfr.org|212.27.33.225|:80... connecté.
requête HTTP transmise, en attente de la réponse...302 Found
Emplacement: http://linuxfr.org/pub/ [suivant]
--01:01:40-- http://linuxfr.org/pub/
=> `index.html'
Résolution de linuxfr.org... 212.27.33.225
Connecting to linuxfr.org|212.27.33.225|:80... connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 71,759 (70K) [text/html]
100%[========================================================>] 71,759 13.55K/s ETA 00:00
01:01:47 (13.52 KB/s) - `index.html' saved [71759/71759]
root@iguzki:~#En fonction du type de réseau que vous attraperez, votre débit sera évidemment différent. La connexion ci-dessus a été effectuée chez moi, dans un coin perdu (Mennecy), mais à mon boulot la même connexion me donne un débit de 45 kilos-octets par seconde, et je n'ai pas encore attrapé de HSDPA qui donne un débit allant jusqu'à 3 à 4 Mbit/s.
Même s'ils n'étaient pas utilisables tels quels, certains éléments ont été modifiés de manière à ne pas être utilisables tels quels (numéros de série, ...).