sábado, 17 de abril de 2010

Conexión a Internet Móvil por Orange

En este artículo vamos a explicar los pasos que he seguido para conectarme a Internet a través de un módem USB que la compañía Orange comercializa con el nombre Internet Everywhere. El módem en concreto tiene un aspecto  muy similar al de un lápiz USB (de hecho, puede usarse para tal fin, como almacenamiento, pero aquí nos centraremos en las capacidades del modem para conectarse a Internet).

La release de FreeBSD que estoy usando es 8.0-RELEASE. Ignoro si funciona en la serie 7.x, aunque creo que no porque fue en la 8 donde se le dió un empuje muy importante al soporte USB.

Cargar el controlador del núcleo
Lo primero de todo es cargar el driver u3g, que por defecto deberíamos tener si hemos instalado un kernel GENERIC:

# kldload u3g

Pinchar el módem a un puerto USB 2.0
Una vez cargado el controlador, enchufamos el módem a un puerto USB 2.0 (bueno, no sé si funcionará con uno 1.1, no lo he probado). Los puertos USB 2.0 se gestionan con el controlador EHCI, de modo que los podemos identificar en el messages:


ehci0: [ITHREAD]
usbus3: EHCI version 1.0
usbus3: on ehci0


Unos segundos después de haber pinchado el módem veremos aparecer en el messages algo parecido a esto:


u3g_huawei_init:269:
usb_alloc_device:1779: Found Huawei auto-install disk!
ugen3.2: at usbus3
ugen3.2: at usbus3 (disconnected)
ugen3.2: at usbus3
u3g0: on usbus3
u3g0: Found 2 ports.
umass0: on usbus3
umass0:  SCSI over Bulk-Only; quirks = 0x0000


Ignoraremos los mensajes relativos a umass0, ya que se refieren al dispositivo de almacenamiento interno que soportan (ojo, la tarjeta de almacenamiento se adquiere aparte, no viene en el pack).

Como podemos ver, se trata de un módem USB Huawei. No aparece el modelo exacto, pero en la publicidad de Orange afirman que se trata de un E160.

Introducción del PIN
Realmente el módem USB se comporta como un teléfono móvil, sólo que está configurado para datos en vez de voz, así que es necesario introducir el PIN correcto para hablar con él, como haríamos con un teléfono móvil convencional. Para hacerlo, nos serviremos del excelente script de perl que podéis encontrar en http://wiki.bsdforen.de/howto/umts_mit_huawei. Una vez guardado en /root/bin/umts_stick, lo editamos para introducir el pin correcto de nuestro módem y el dispositivo serial asociado. En mi caso, han sido:

my $modem = "/dev/cuaU0.0";     # Change to your device name
my $pin = "9999";               # Insert your device's PIN


Para introducir el PIN, ejecutar:

# /root/bin/umts_stick -a

Si el PIN es correcto, la respuesta será:

PIN accepted

Configuración de ppp
Sólo queda adaptar a nuestro caso el excelente artículo que se muestra en  http://zenu.wordpress.com/2010/03/08/setting-up-orange-3g-modem-on-freebsd/.

En  el archivo /etc/ppp/ppp.conf, añadimos una entrada orange, con el siguiente aspecto:

orange:
 set device /dev/cuaU0.0
 set speed 460800
 set phone *99***1\#
 set authname orange
 set authkey orange
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
         \"\" \
         AT OK-AT-OK \
         AT+CFUN=1 OK-AT-OK \
         AT+CSQ OK \
         AT+CGDCONT=1,\\\"IP\\\",\\\"internet\\\" OK \
         AT+CGACT? OK-AT-OK \
         AT+CGATT? OK \
         AT+COPS? OK \
         ATD*99***1# CONNECT"
 set timeout 180 # 3 minute idle timer (the default)
 set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0
 set vj slotcomp off
 set crtscts on
 add! default HISADDR
 disable vjcomp
 disable acfcomp
 disable deflate
 disable deflate24
 disable pred1
 disable protocomp
 disable mppe
 disable ipv6cp
 disable lqr
 disable echo



Antes de seguir, es necesario aclarar algunas cosas. Lo primero, las líneas:

 set authname orange
 set authkey orange

Los valores correctos los he extraído de esta URL:

http://wiki.bandaancha.st/APN_de_las_operadoras_para_configurar_el_m%C3%B3dem_de_Internet_m%C3%B3vil_3G

Por otro lado, la línea:

         AT+CGDCONT=1,\\\"IP\\\",\\\"internet\\\" OK \

La cadena internet es la que figura en el campo APN del enlace anterior.

Para establecer la conexión, hay que realizar la llamada con el comando:

# ppp orange

La respuesta será parecida a:

Loading /lib/libalias_cuseeme.so
Loading /lib/libalias_ftp.so
Loading /lib/libalias_irc.so
Loading /lib/libalias_nbt.so
Loading /lib/libalias_pptp.so
Loading /lib/libalias_skinny.so
Loading /lib/libalias_smedia.so
Working in interactive mode
Using interface: tun0
ppp ON banach>

y escribir dial en la línea de comandos ppp:

ppp ON banach> dial

En ese momento el módem realizará la llamada de datos, y veremos aparecer en el /var/log/ppp.log una gran cantidad de información. La más interesante se muestra al final:

IPCP:  IPADDR[6] changing address: 0.0.0.0  --> 83.231.118.249
IPCP: deflink: SendConfigReq(4) state = Req-Sent
IPCP:  IPADDR[6] 83.231.118.249
IPCP: deflink: RecvConfigReq(1) state = Req-Sent
IPCP:   [EMPTY]
IPCP: deflink: SendConfigAck(1) state = Req-Sent
IPCP:   [EMPTY]
IPCP: deflink: State change Req-Sent --> Ack-Sent
IPCP: deflink: RecvConfigAck(4) state = Ack-Sent
IPCP:  IPADDR[6] 83.231.118.249
IPCP: deflink: State change Ack-Sent --> Opened
IPCP: deflink: LayerUp.
IPCP: myaddr 83.231.118.249 hisaddr = 10.0.0.2
 


Si todo ha ido bien, tendremos configurada la interfaz tun0, y una ruta por defecto:

# ifconfig tun0
tun0: flags=8051 metric 0 mtu 1500
        inet 83.231.118.249 --> 10.0.0.2 netmask 0xffffffff
        Opened by PID 2568

Quitar el módem USB
Para quitar el módem con seguridad, y evitar que se estropee algo, cerramos primero la conexión ppp:

ppp ON banach> close

y luego detenemos el dispositivo USB mediante:

# camcontrol stop cd1

(el dispositivo exacto se determina a través de camcontrol devlist)

Esto último no estoy seguro de que sea necesario, pero por si las moscas siempre lo hago antes de sacar el módel USB de su ranura.

Compartir la conexion con otros nodos de nuestra red
Si queremos que otros nodos de nuestra red puedan usar esta interfaz, emplaremos la misma técnica con Packet Filter que se usó en el artículo Conexión a un VPN de Microsoft PPTP. Por ejemplo, creamos dos shell scripts con el siguiente contenido:

#!/bin/sh
# Guardar en /etc/ppp/natUP.sh
echo "nat pass on $dev from ! $dev to any -> $dev" | \
    /sbin/pfctl -a $dev -N -f -

#!/bin/sh
# Guardar en /etc/ppp/natDOWN.sh
/sbin/pfctl -a "$dev" -F all

Para establecer el NAT al abrir la conexión, creamos un archivo /etc/ppp/ppp.linkup con el siguiente contenido:

# Guardar en /etc/ppp/ppp.linkup
orange:
 !bg /etc/ppp/natUP.sh INTERFACE

Para desactivar el NAT al cerrar la conexión, creamos un archivo /etc/ppp/ppp.linkdown con el siguiente contenido:


# Guardar en /etc/ppp/ppp.linkdown
orange:
 !bg /etc/ppp/natDOWN.sh INTERFACE




Conclusiones
La calidad de la conexión se puede calificar entre aceptable y buena. En la mayoría de las zonas de España hay cobertura 3G (de esto doy fe, ya que lo he probado en un pueblo perdido de Sanabria). La única desventaja es que la latencia no es muy buena; en el mejor de los casos los tiempos de ping superan ligeramente los 100 milisegundos, lo cual no permite trabajar con mucha comodidad en terminales remotos sobre una línea de comandos habitual. Un amigo me comentó que la razón quizá no sea la tecnología en sí, sino que es la misma compañía quien ralentiza  la latencia a propósito: las llamadas de datos son mucho más baratas que las de voz, y si la latencia fuera excelente, mucha gente utilizaría programas como skype y contrataría tarifas planas de datos en vez de voz para hablar, con lo que los ingresos de estas compañías disminuirían drásticamente. ¿Qué opinan Uds?

No hay comentarios:

Datos personales

Madrid, Madrid, Spain