jueves, 23 de abril de 2009

Configurar Modem ZTE MF-616 UMTS/GPRS/EDGE (FCC. ZTE MF-626) 3G en Gentoo Linux amd64

Bueno mis apreciados lectores, Despues de dos años de con Ubuntu x86_64, finalmente decidí migrar a lo que es a mi parecer es la distribución mas optimizada y configurada a la medida del hardware del host sobre la cual corre. Además que se puede jugar con el ya que maneja una especie de busybox + live imagen al mejor estilo Linux From Scratch pero organizado con su soberbio administrador de paquetes/codigo fuente emerge el cual nos agiliza un poco el proceso. Como todo tiene su contra y es que Gentoo no sería grato para los que queremos todo rapido, debido a que por defecto soporta la instalación de ebuilds (makefiles adaptados al modelo Gentoo Linux).
Despues del ejercicio anterior con Ubuntu, en el que el proceso resulto sencillo y breve con resultados rapidos y satisfactorios, y como una tarea postinstalación y actualización general de gentoo a partir de su sistema base 2008.0, me tomé el atrevimiento de configurar este modem ZTE MF-616 UMTS/GPRS/EDGE 3G de Tigo en Gentoo. Realmente no encontré un HowTo (Cómo) consolidado y entendible que me llevara a conseguirlo rapidamente, sino que toco optar en partes por la guia anterior en parte: usb_modeswitch, wvdial, ppp pero con las caracteristicas que tenia ke manejar gentoo. Wvdial en 1era instancia no me habia servido (tal vez algun bloqueo en algun proceso en memoria, sin reiniciar la maquina pudo generarme dolores de cabeza con el hasta hace unos minutos).

Se efectuaron los parametros defaultroute y replacedefaultroute en los parametros de configuración de ppp ubicados en /etc/ppp/options. Si utilizaba replacedefaultroute ke junto a defaultroute podrían cambiar y restablecer la ruta defecto dinámicamente, a diferencia de Ubuntu que si ejercía esta tarea con wvdial+ppp (el paquete de ppp distribuido con ellos viene con el patch habilitado). En este caso con Gentoo Linux no se contempla en absoluto este movimiento de "default gateway" mientras exista predefinida antes de utilizar el protocolo ppp. Anotando entonces lo que comenta el sistema de QA de Gentoo en http://bugs.gentoo.org/227321 acerca de ese parche:

------- Comment #3 From Alin Năstac 2008-06-15 22:12:30 0000 [reply] -------

This replacedefaultroute is really a misfeature from my POV because you will be
left without a default route when pppd will be killed by the user with kill -9
(possibly with other signals as well, I didn't looked at their patch). We (or
at least I) like a different approach to this problem. Instead of blindly
replacing the default route, I let users choose the metric of the default route
created by pppd (see defaultmetric option in pppd man page). This way you could
adapt your setup to whatever needs you have, all you need to do is set the
right metric on the right route.
Anyway, did you looked at the current pppd version in our tree? Do you really
expect us to add such an old (and probably rejected by upstream) patch to our
source tree? :)
Closed as INVALID.


Vemos que no permiten el parche por defecto debido a cuestiones de seguridad. Luego de aclarada esta situación, se procedio con los siguientes pasos consolidados y resumidos:

a. compilar y subir al kernel el subsistema de usb_modeswitch

1. en /etc/conf.d/net: verificar que no exista un default gateway dentro de la configuración de la interface ethernet principal,

routes_eth0=( "default via 172.25.19.2")

Si existe esta linea entonces hay que eliminarlo o comentarlo, y preferiblemente agregar las rutas a redes que por defecto se iban con la configuración de ruta por defecto predeterminada:

routes_eth0=( "172.25.1.0/24 via 172.25.19.2" )

Despues de aplicados los cambios, no olvide reiniciar la interface: /etc/init.d/net.eth0 restart

2.Instalar ppp: emerge net-dialup/ppp
3. creacion de los archivos que controlaran el agregado y eliminado de la ruta default:

/etc/ppp/ip-up.d/adddefaultroute
#!/bin/sh
route add default dev $1

/etc/ppp/ip-down.d/deletedefaultroute
#!/bin/sh
route del default dev $1

3. configuración de /etc/ppp/options básicamente con los siguientes parametros:
lock
+pap
-chap
asyncmap 0
noauth
crtscts
hide-password
modem

4. Habilitando la conexión con el modem 3G, usando ppp daemon directamente:
4a. /etc/conf.d/net:
Agregar la configuración del protocolo ppp con la información similar basada en el caso de wvdial.conf pero con la sintaxis compatible a ese archivo base de networking setup en Gentoo:

#Internet mobile 3G ZTE MF626 TIGO
config_ppp0=( "ppp" )
link_ppp0="/dev/ttyUSB2"
phone_number_ppp0=( "*99#" )

pppd_ppp0=(
"maxfail 10"
"noauth"
"lcp-echo-interval 5"
"lcp-echo-failure 12"
"debug"
"noipdefault"
"defaultroute"
"usepeerdns"
"ipcp-accept-remote"
"ipcp-accept-local"
"holdoff 3"
"noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"
"460800"
"lock"
"nocrtscts"
)

chat_ppp0=(
'ABORT' 'BUSY'
'ABORT' 'ERROR'
'ABORT' 'NO ANSWER'
'ABORT' 'NO CARRIER'
'ABORT' 'NO DIALTONE'
'ABORT' 'Invalid Login'
'ABORT' 'Login incorrect'
'TIMEOUT' '5'
'' 'ATZ'
'OK' 'AT+CFUN=1'
'OK' 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'
'OK' 'AT+CGDCONT=1,"IP","web.colombiamovil.com.co"'
'OK' 'ATDT\T'
'TIMEOUT' '60'
'CONNECT' ''
'TIMEOUT' '5'
'~--' ''
)


4b. Si no existe el link en el sistema se debe crear la nueva interface ppp0:
en /etc/init.d:
$ sudo ln -s
$ sudo ln -s net.lo net.ppp0

5. Iniciar usb_modeswitch:
Enviar los parametros para switcheo del dispositivo a modo modem/storage:

$ sudo usb_modeswitch -W -v 0x19d2 -p 0x2000 -V 0x19d2 -P 0x0031 -m 0x01 -M 55534243123456782000000080000c85010101180101010101000000000000



Para el Caso de usar configuración directa de pppd:
Se inicia el daemon ppp:

$ sudo /etc/init.d/net.ppp0 start * Starting ppp0
* Bringing up ppp0
* ppp
* Running pppd ...
* Backgrounding ...

5. Si se utiliza el clasico wvdial:
5.a verificar que la configuracion de wvdia.conf contenga:

[Dialer Defaults]
Init1 = ATZ
Init2 = AT+CFUN=1
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init5 = AT+CGDCONT=1,"IP","web.colombiamovil.com.co"
Stupid Mode = 1
Modem Type = Analog Modem
; Phone =
Phone = *99#
ISDN = 0
; Username =
Username = off
; Password =
Password = off
Dial Command = ATDT
New PPPD = yes
Modem = /dev/ttyUSB2
;Baud = 9600
Baud = 460800
Remote Name = *
Auto DNS = on

5b. Iniciar proceso wvdial: sudo wvdial
--> WvDial: Internet dialer version 1.60
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: AT+CFUN=1
AT+CFUN=1
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","web.colombiamovil.com.co"
AT+CGDCONT=1,"IP","web.colombiamovil.com.co"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Thu Apr 23 11:48:02 2009
--> Pid of pppd: 21606
--> Using interface ppp0
--> pppd: �[7f]
--> pppd: �[7f]
--> pppd: �[7f]
--> pppd: �[7f]
--> local IP address 186.97.60.84
--> pppd: �[7f]
--> remote IP address 10.64.64.64
--> pppd: �[7f]
--> primary DNS address 200.13.249.101
--> pppd: �[7f]
--> secondary DNS address 200.75.51.133
--> pppd: �[7f]


. Monitorear el daemon desde la consola:
$ sudo tail -f /var/log/messages | ccze
Entre otras cosas debe aparecerle al final del log:

Apr 23 10:03:18 m0n0 pppd[1277]: Could not determine remote IP address: defaulting to 10.64.64.64
Apr 23 10:03:18 m0n0 pppd[1277]: local IP address 186.97.63.117
Apr 23 10:03:18 m0n0 pppd[1277]: remote IP address 10.64.64.64
Apr 23 10:03:18 m0n0 pppd[1277]: primary DNS address 200.13.249.101
Apr 23 10:03:18 m0n0 pppd[1277]: secondary DNS address 200.75.51.133
Apr 23 10:03:18 m0n0 pppd[1277]: Script /etc/ppp/ip-up started (pid 1287)
Apr 23 10:03:18 m0n0 pppd[1277]: Script /etc/ppp/ip-up finished (pid 1287), status = 0x0

Lo que nos indica ke la conexion ha sido satisfactoria y verificar igual que pppd haya aplicado el default gateway al sistema:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.64.64.64 * 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth1
dimarbtacx01.di 172.25.19.2 255.255.255.0 UG 0 0 0 eth0
172.25.19.0 * 255.255.255.0 U 0 0 0 eth0
loopback * 255.0.0.0 U 0 0 0 lo
default 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0


Verificamos /etc/resolv.conf, en lo ke tiene ke ver con la resolución DNS:

cat /etc/resolv.conf
nameserver 200.13.249.101
nameserver 200.75.51.133


Hakuna Matata again! :D