Alejandro Vargas
2011-08-26 11:04:42 UTC
Continuando con mi serie de preguntas referentes a problemas raros...
Pregunta: tengo el binario de un kernel. Me gustaria saber como puedo
averiguar informacion sobre como fue compilado. Algo así como el
/proc/config.gz pero en kernel 2.4.
Explico cuál es el problema:
Para los que no lo conozcan, el fabricante Ubiquity hace unos bonitos
aparatejos que son básicamente un router wifi con un solo puerto de
red, todo dentro de una cajita lista para poner sobre un mástil. Eso
permite hacer radioenlaces en frecuencias de 2,4Ghz o 5Ghz (según el
modelo) a un precio excelente. Adentro llevan "airos", que es un
openwrt modificado por ellos.
Ellos proveen los fuentes de su sistema para quien quiera hacer
modificaciones. Yo, por ejemplo, agregué soporte para openvpn, para lo
cual tuve que agregar el módulo "tun" al kernel. Todo muy bien.
Ahora bien, hay unos modelos más antiguos que llevan un sistema más
viejo. He estado intentando compilarlo y todo termina correctamente
pero después no arranca. He tomado los binarios del firmware "oficial"
binario que distribuyen y he separado el root filesystem del kernel.
Ahí he reemplazado el kernel por el que yo genero y no arranca, por lo
tanto debo deducir que el problema es que mi kernel tiene algún
problema. Sospecho que puede ser la direccion donde se carga en
memoria (LOADADDR) o algo así, pero no tengo como mirarlo porque
cuando le cargo el firmware que no funciona, el equipo no arranca y no
quisiera desarmarlo para conectarle cables al puerto serie y debuguear
el booteo. De más está decir que he preguntado en los foros de
Ubiquity y no he recibido respuesta:
http://ubnt.com/forum/showthread.php?t=39693
No tengo esperanza de poder correr openvpn en este equipo porque tiene
poca memoria, pero sí creo que podría correr ppp sobre ssh (trae
cliente ssh). Ya lo he estado probando y puedo hacer una vpn sencilla
con un script que se conecte al servidor por ssh y ejecute el pppd de
ambos lados. Puedo hacer una autenticacion dentro del mismo script.
El problema es que el kernel que viene en estos aparatos no tiene
soporte para PPP sobre lineas asincrónicas. El soporte que viene es
para poder hacer PPPOE. Cuando ejecuto el pppd desde consola (para
largarlo sobre el ssh) me da el siguiente error:
Couldn't set tty to PPP discipline: Invalid argument
Según he leído, este error se debe a la falta de soporte para
ppp_async. De hecho, mirando la configuracion del kernel que viene
preconfigurada en el fuente del software, está desactivado.
He intentado también generarlo como módulo y después copiar el módulo
al firmware que funciona, pero al cargarlo me da un "segmentation
fault", después el lsof me muestra como que está cargado, pero
sospecho que le faltará algo más y por eso no funciona. El dmesg no me
da niguna información de por qué es el segmentation fault. Pero me da
segmentation fault con cualquier módulo. Por ejemplo generé también el
de tun, y me da lo mismo, sin embargo el modulo tun pareciera
funcionar, porque si pongo ifconfig -a me aparece el tunl0. He
revisado la versión de kernel y es la misma: 2.4.27-ubnt0
Si hago insmod ppp_async.o me contesta:
Using ppp_async.o
Segmentation fault
pero después:
# lsmod
Module Size Used by Tainted: PF
ppp_async 8336 0 (uninitialized)
A demás aparece el dispositivo:
# ls -l /dev/ppp
crw-r--r-- 1 ubnt admin 108, 0 Jan 1 2000 /dev/ppp
Sin embargo, al intentar ejecutar el pppd, me sale:
#pppd updetach nodefaultroute ipcp-accept-local ipcp-accept-remote
noauth passive pty "ssh -y ***@server -i
/etc/persistent/id_rsa"
Couldn't set tty to PPP discipline: Invalid argument
O sea, lo mismo que me salía sin el módulo. A demás, si ejecuto pppd
sin parámetros no me sale la típica cabecera de ppp sino que se corta
sin dar ningun mensaje, incluso agregando el parametro debug. El
syslog tampoco tira nada nuevo, solo esto:
Comando: pppd debug updetach nodefaultroute ipcp-accept-local
ipcp-accept-remote noauth passive
Syslog:
Aug 26 11:33:01 88.15.25.179 pppd[559]: pppd 2.4.4 started by ubnt, uid 0
Aug 26 11:33:01 88.15.25.179 pppd[559]: Couldn't set tty to PPP
discipline: Invalid argument
Aug 26 11:33:01 88.15.25.179 pppd[559]: Exit.
Eso sí, he notado que me agrega una linea diciendo:
kmod: failed to exec /sbin/modprobe -s -k tty-ldisc-3, errno = 2
cada vez que pruebo. Como que tiene el driver cargado pero sigue
buscando tty-ldisc-3..
Lo ideal sería que pudiera compilar un nuevo kernel, preferente con el
ppp_async metido adentro y no como módulo, pero no consigo que bootee
con ese kernel.
¿Se les ocurre alguna idea? ¿Saben alguna forma de hacer una VPN que
no sea esta?. No me sirve un simple tunel porque los aparatos pueden
estar detrás de un router, así que necesito que sea el aparato el que
inicie la comunicación hacia mi servidor sin necesidad de tener
puertos redirigidos.
Pregunta: tengo el binario de un kernel. Me gustaria saber como puedo
averiguar informacion sobre como fue compilado. Algo así como el
/proc/config.gz pero en kernel 2.4.
Explico cuál es el problema:
Para los que no lo conozcan, el fabricante Ubiquity hace unos bonitos
aparatejos que son básicamente un router wifi con un solo puerto de
red, todo dentro de una cajita lista para poner sobre un mástil. Eso
permite hacer radioenlaces en frecuencias de 2,4Ghz o 5Ghz (según el
modelo) a un precio excelente. Adentro llevan "airos", que es un
openwrt modificado por ellos.
Ellos proveen los fuentes de su sistema para quien quiera hacer
modificaciones. Yo, por ejemplo, agregué soporte para openvpn, para lo
cual tuve que agregar el módulo "tun" al kernel. Todo muy bien.
Ahora bien, hay unos modelos más antiguos que llevan un sistema más
viejo. He estado intentando compilarlo y todo termina correctamente
pero después no arranca. He tomado los binarios del firmware "oficial"
binario que distribuyen y he separado el root filesystem del kernel.
Ahí he reemplazado el kernel por el que yo genero y no arranca, por lo
tanto debo deducir que el problema es que mi kernel tiene algún
problema. Sospecho que puede ser la direccion donde se carga en
memoria (LOADADDR) o algo así, pero no tengo como mirarlo porque
cuando le cargo el firmware que no funciona, el equipo no arranca y no
quisiera desarmarlo para conectarle cables al puerto serie y debuguear
el booteo. De más está decir que he preguntado en los foros de
Ubiquity y no he recibido respuesta:
http://ubnt.com/forum/showthread.php?t=39693
No tengo esperanza de poder correr openvpn en este equipo porque tiene
poca memoria, pero sí creo que podría correr ppp sobre ssh (trae
cliente ssh). Ya lo he estado probando y puedo hacer una vpn sencilla
con un script que se conecte al servidor por ssh y ejecute el pppd de
ambos lados. Puedo hacer una autenticacion dentro del mismo script.
El problema es que el kernel que viene en estos aparatos no tiene
soporte para PPP sobre lineas asincrónicas. El soporte que viene es
para poder hacer PPPOE. Cuando ejecuto el pppd desde consola (para
largarlo sobre el ssh) me da el siguiente error:
Couldn't set tty to PPP discipline: Invalid argument
Según he leído, este error se debe a la falta de soporte para
ppp_async. De hecho, mirando la configuracion del kernel que viene
preconfigurada en el fuente del software, está desactivado.
He intentado también generarlo como módulo y después copiar el módulo
al firmware que funciona, pero al cargarlo me da un "segmentation
fault", después el lsof me muestra como que está cargado, pero
sospecho que le faltará algo más y por eso no funciona. El dmesg no me
da niguna información de por qué es el segmentation fault. Pero me da
segmentation fault con cualquier módulo. Por ejemplo generé también el
de tun, y me da lo mismo, sin embargo el modulo tun pareciera
funcionar, porque si pongo ifconfig -a me aparece el tunl0. He
revisado la versión de kernel y es la misma: 2.4.27-ubnt0
Si hago insmod ppp_async.o me contesta:
Using ppp_async.o
Segmentation fault
pero después:
# lsmod
Module Size Used by Tainted: PF
ppp_async 8336 0 (uninitialized)
A demás aparece el dispositivo:
# ls -l /dev/ppp
crw-r--r-- 1 ubnt admin 108, 0 Jan 1 2000 /dev/ppp
Sin embargo, al intentar ejecutar el pppd, me sale:
#pppd updetach nodefaultroute ipcp-accept-local ipcp-accept-remote
noauth passive pty "ssh -y ***@server -i
/etc/persistent/id_rsa"
Couldn't set tty to PPP discipline: Invalid argument
O sea, lo mismo que me salía sin el módulo. A demás, si ejecuto pppd
sin parámetros no me sale la típica cabecera de ppp sino que se corta
sin dar ningun mensaje, incluso agregando el parametro debug. El
syslog tampoco tira nada nuevo, solo esto:
Comando: pppd debug updetach nodefaultroute ipcp-accept-local
ipcp-accept-remote noauth passive
Syslog:
Aug 26 11:33:01 88.15.25.179 pppd[559]: pppd 2.4.4 started by ubnt, uid 0
Aug 26 11:33:01 88.15.25.179 pppd[559]: Couldn't set tty to PPP
discipline: Invalid argument
Aug 26 11:33:01 88.15.25.179 pppd[559]: Exit.
Eso sí, he notado que me agrega una linea diciendo:
kmod: failed to exec /sbin/modprobe -s -k tty-ldisc-3, errno = 2
cada vez que pruebo. Como que tiene el driver cargado pero sigue
buscando tty-ldisc-3..
Lo ideal sería que pudiera compilar un nuevo kernel, preferente con el
ppp_async metido adentro y no como módulo, pero no consigo que bootee
con ese kernel.
¿Se les ocurre alguna idea? ¿Saben alguna forma de hacer una VPN que
no sea esta?. No me sirve un simple tunel porque los aparatos pueden
estar detrás de un router, así que necesito que sea el aparato el que
inicie la comunicación hacia mi servidor sin necesidad de tener
puertos redirigidos.
--
Qapla'
Alejandro Vargas
Qapla'
Alejandro Vargas