Archivo etiqueta Linux

OpenVPN en Android (Cyanogenmod)

Mi artículo anterior trató sobre cómo configurar OpenVPN en OpenWRT, por lo que ya tengo varios equipos en mi propia VPN. Como mi HTC Magic tiene Cyangenmod 6.1.0 (Froyo 2.2.1) decidí probar el apartado de OpenVPN a ver si se conectaba a la red. En este artículo explico cómo hacerlo funcionar.

Configuración del servidor OpenVPN

En general no se debe hacer nada del lado del servidor salvo desactivar el firewall HMAC porque la versión de OpenVPN de Cyangenmod no funciona con esta característica, de lo contrario obtendremos errores en el servidor de OpenVPN al estilo:

Sep  9 13:54:23 fluffy openvpn(sample_server)[4396]: TLS Error: cannot locate HMAC in incoming packet from [AF_INET]192.168.1.30:54934

Para deshabilitar el firewall HMAC basta con comentar la línea siguiente línea en el archivo de configuración:

#option tls_auth "/etc/openvpn/ta.key 0"

En los clientes también debe comentarse la línea:

#option tls_auth "/etc/openvpn/ta.key 1"

Creación de certificado y llave del dispositivo Android

De forma similar a como se hizo en el articulo sobre cómo configurar OpenVPN en OpenWRT, se debe crear el certificado y llave para este cliente:

cd /etc/openvpn/easy-rsa/
source vars
./pkitool magic

Creación del archivo PKCS12

  • Ahora debemos crear un archivo PKCS12 con las llaves que creamos:
openssl pkcs12 -export -in keys/magic.crt  -inkey keys/magic.key -certfile keys/ca.crt -name magic -out magic.p12

Aquí los archivos magic.crt y magic.key los acabamos de generar, mientras ca.crt es el certificado del servidor OpenVPN. Cuando se le pida, colocar una  frase o contraseña (se debe recordar porque será usado luego en el dispositivo Android).

  • Conectar el teléfono al PC y copiar el archivo magic.p12 en la raíz de la tarjeta SD:
cp magic.p12 /media/disk/

Desconectar el teléfono del PC para que se monte nuevamente la tarjeta SD en el teléfono.

Configuración del cliente

  • Primero se debe añadir el certificado que se creó para el dispositivo, para eso se debe ir a Ajustes > Ubicación y seguridad > Instalar desde la tarjeta SD:

Pedirá una contraseña, la cual es la frase que proporcionamos al momento de crear el archivo PKCS12.

  • Ahora se procede a configurar la VPN como tal, para se debe ir a Ajustes > Conexiones inhalámbricas > Ajustes de red VPN > Añadir VPN > Añadir red VPN “OpenVPN”:

En la siguiente pantalla se debe configurar los parámetros de la VPN:

Donde,

Nombre de VPN: Nombre que le daremos a nuestra conexión para esta VPN
Establecer servidor VPN: Dirección IP o nombre de dominio público donde está corriendo OpenVPN
User authentication: No seleccionar
Establecer certificado de CA: Seleccionar el certificamos que creamos, que para el ejemplo se llama magic.
Establecer certificado de usuario: Seleccionar el certificamos que creamos, que para el ejemplo se llama magic.
Dominios de búsqueda DNS: No seleccionar

Luego entramos en las opciones más avanzada, pulsando el botón menú, y seleccionando Avanzado. Aquí lo importante es que e puerto sea el 1194 y habilitar la compresión LZO:

Una vez hecho esto podemos seleccionar la VPN  que se configuró.

Referencias

,

7 Comentarios

Configurar OpenVPN en OpenWrt

Como el router de la casa es un dispositivo que está encendido 24×7,  esto lo hace un lugar idóneo para configurar un servidor de VPN. En mi caso tengo instalado OpenWrt en mi router TP-LINK TL-WR1043ND (para instalarlo puedes consultar el artículo de Instalación de OpenWrt en TP-LINK TL-WR1043ND). Este el artículo está redactado de forma general y describe cómo configurar OpenVPN en OpenWrt para cualquier modelo de router que tengas.

Instalación de OpenVPN en OpenWrt

En el router solo instalaremos el paquete de OpenVPN:

opkg install openvpn

Certificados (en el PC)

Los certificados del cliente y el servidor lo realizaremos en un PC con Linux, más en concreto con Debian. La idea de esto es evitar instalar software en el router ya que ocupa espacio en la limitada rom. Para obtener lo necesario instalamos el paquete openvpn de los repositorios:

aptitude install openvpn
  • Crear el directorio de trabajo y los archivo base a usar:
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
  • Editar  el archivo /etc/openvpn/easy-rsa/vars, el cual permitirá crear un certificado único usando los valores proporcionados:
export KEY_COUNTRY="VE"
export KEY_PROVINCE="DC"
export KEY_CITY="Caracas"
export KEY_ORG="Mi organización"
export KEY_EMAIL="[email protected]"
  • Ir a el directorio de trabajo y cargar el archivo que editamos:
cd /etc/openvpn/easy-rsa/
source vars

Ahora pasamos a crear los certificados del servidor y los clientes.

Certificados del servidor

Para crear los certificados del servidor se debe realizar los siguientes pasos:

./clean-all./build-dh
./pkitool --initca
./pkitool --server server
cd keys
openvpn --genkey --secret ta.key

Certificados de los clientes

Para generar el certificad odel cliente se debe usar basta con hacer:

cd /etc/openvpn/easy-rsa/
source vars
./pkitool hostname

Donde hostname es el nombre de la máquina donde se instalará el certificado y las llaves (componente aleatorio).

Configuración de la VPN

Ahora veremos cómo configurar la VPN en tanto en el servidor como en los clientes.

Configuración del servidor (en el router)

  • Copiar los certificados generados para el servidor en el router:
scp server.crt server.key ca.crt dh1024.pem ta.key [email protected]:/etc/openvpn/

Donde 192.168.1.1 es la dirección IP del router de este ejemplo.

  • Aunque tengamos creado un archivo de configuración de forma similar en otro servidor OpenVPN, es mejor seguir el formato propuesto por la gente de OpenWrt y adaptarlo a nuestras necesidades. En ese sentido se debe editar el archivo /etc/config/openvpn con los siguientes valores (por razones de espacio solo coloco las líneas no comentadas).
config openvpn sample_server
    option enable 1
    option port 1194
    option proto udp
    option dev tun
    option ca /etc/openvpn/ca.crt
    option cert /etc/openvpn/server.crt
    option key /etc/openvpn/server.key
    option dh /etc/openvpn/dh1024.pem
    option server "10.8.0.0 255.255.255.0"
    option ifconfig_pool_persist /tmp/ipp.txt
    option client_to_client 1
    option keepalive "10 120"
    option comp_lzo 1
    option persist_key 1
    option persist_tun 1
    option status /tmp/openvpn-status.log
    option verb 3

Configuración de los clientes (en los PCs)

  • Copiar los certificados y llaves generados para cada cliente, por ejemplo la máquina hostname, como se explica a continuación:
/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/hostname.crt
/etc/openvpn/easy-rsa/keys/hostname.key
/etc/openvpn/ta.key
  • Si no se ha instalado OpenVPN en los clientes se debe proceder a hacerlo:
aptitude install openvpn
  • Copiar el archivo ejemplo de configuración del cliente:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
  • Editar el archivo copiado con los siguientes valores:
client
dev tun
proto udp
remote 192.168.1.30 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /mnt/datos/OpenVpn/easy-rsa/keys/ca.crt
cert /mnt/datos/OpenVpn/easy-rsa/keys/hostname.crt
key /mnt/datos/OpenVpn/easy-rsa/keys/hostname.key
ns-cert-type server
tls-auth /mnt/datos/OpenVpn/easy-rsa/keys/ta.key 1
comp-lzo
verb 3

En la directiva remote se usó una dirección IP fija, pero puedes configurar un nombre de dominio dinámico en dyndns o no-ip y colocar el dominio en vez de una dirección dinámica o privada.

Habilitar el servicio

Ahora tanto del lado del servidor (OpenWrt) como de los clientes (PCs) se debe habilitar el servicio OpenVPN. Para cada caso se tiene:

Habilitar el servicio en el servidor (en el router)

Ejecutar lo siguiente en OpenWrt:

/etc/init.d/openvpn enable
/etc/init.d/openvpn start

Habilitar el servicio en los clientes (en los PCs)

Ahora se debe habilitar el servicio OpenVPN en los clientes. En general dependerá de la distribución que se tenga, pero para habilitar el servicio en Debian puede hacerse:

update-rc.d openvpn defaults
/etc/init.d/openvpn start

Luego de esto el servidor una interfaz tun con la dirección 10.8.01, y los clientes otra interfaz con alguna dirección como la 10.8.0.x.

Referencias

,

3 Comentarios

Automatizando wpa_supplicant en Debian

Ya vimos cómo configurar wpa_supplicant de forma manual desde la consola de texto, pero nos falta un paso adicional: hacer que la interfaz inalámbrica se levante automáticamente usando los parámetros proporcionados a wpa_supplicant.

En distribuciones basadas en Debian esto puede hacerse colocando los parámetros en el archivo /etc/network/interfaces de dos forma, la primera es :

 iface wlan0 inet dhcp
     wpa-ssid Galaxia
     wpa-psk acafbf83bd7256506f3b08137dfe2763f9456dc41c8718297e6838ce5a32a64e

La otra forma, más elegante a mi parecer,  es colocando una línea que haga referencia al archivo de configuración con estos parámetros:

iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

El archivo /etc/wpa_supplicant/wpa_supplicant.conf contiene la información de la red wifi a la que desea conectarse, el cual previamente se genera como se explica en el artículo Configuración de la tarjeta inalámbrica desde la consola.

En otras distribuciones habría que configurar wpa_supplicant, lanzarlo y luego pedir los valores del servidor de dhcp de la red.

Referencia: How to use a WiFi interface

,

No hay Comentarios

Configuración de la tarjeta inalámbrica desde la consola

Linux Wifi

Si no tenemos un plugin que nos facilite la vida para establecer la comunicación de la tarjeta inalámbrica con la red wifi que deseamos conectar, siempre podemos recurrir a otras herramientas que no son gráficas para hacer la misma funcionalidad. Es importante saber establecer una conexión inalámbrica desde una consola porque si no se tiene un plugin o, peor aun, si no se tiene el ambiente gráfico instalado no se podrás disfrutar de la red inalámbrica. A continuación se explica cómo configurar una conexión inalámbrica desde el terminal:

  1. Instalar el cliente wpa supplicant. En Debian y derivados puede hacerse siendo root:
    aptitude install wpasupplicant
  2. Generar la frase PSK para la red:
    wpa_passphrase Galaxia > /etc/wpa_supplicant/wpa_supplicant.conf

    Aquí la orden se quedrá en espera de la contraseña que se usará. Una vez proporcionada la misma presionar la tecla Enter para finalizar. Para revisar el archivo generado puede hacerse:

    # reading passphrase from stdin
       network={
       ssid="Galaxia"
       #psk="supersecreto"
       psk=acafbf83bd7256506f3b08137dfe2763f9456dc41c8718297e6838ce5a32a64e
    }

    Como puede verse, la red se identifica como Galaxia y la frase o contraseña es supersecreto. El campo psk corresponde a la frase en sí.

  3. Levantar la interfaz de red:
    ifconfig wlan0
  4. Invocar el cliente wpa_supplicantcon pasando como parámetro la interfaz de red y el archivo de configuración generado:
    wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
  5. Pedir los parámetros de red al servidor DHCP:
    dhclient wlan0

Ya con esto se puede establecer la conexión a la red Galaxia, y sin necesidad de tener un plugin o incluso entorno gráfico.

3 Comentarios

Conector MySql para OpenWrt (MIPS)


Si estás interesado en desarrollar aplicaciones en C usando MySQL en OpenWrt bajo MIPS, necesitarás el conector respectivo para poder comunicarte con la base de datos. En la página de MySQL solo encontrarás los conectores compilados para x86 y las fuentes por si deseas compilarlo por tu cuenta para x86 y otras arquitecturas. Este es el que usaremos para poder compilar para MIPS el conector de MySQL. Veamos como hacerlo:

  1. Descarga el conector MySql para C (en este ejemplo uso la versión 6.0.2).
  2. Descomprimir el archivo descargado y entrar en el directorio mysql-connector-c-6.0.2:
    tar xvzf mysql-connector-c-6.0.2.tar.gz
    cd mysql-connector-c-6.0.2
  3. Instalar cmake. Si estás en Debian (o derivados) basta con hacer:
     aptitude install cmake
  4. Configurar el ambiente para cross-compilar para MIPS, exportando las siguientes variables:
    export CHROOT=/home/lgallard/backfire
    export TOOLCHAIN_PATH=$CHROOT/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1
    export PATH=$PATH:$TOOLCHAIN_PATH/usr/bin/
    export AR=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ar
    export AS=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-as
    export LD=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ld
    export NM=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-nm
    export CC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
    export CPP=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-cpp
    export GCC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
    export CXX=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-g++
    export RANLIB=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ranlib
  5. Generar el archivo Makefile:
    cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/ruta_de_instalacion
  6. Compilar el conector:
    make
  7. Instalar los archivos binarios:
    make install
  8. Verificar que se haya compilado correctamente para MIPS:
    file /ruta_de_instalacion/lib/libmysql.so.16.0.0
    
    /ruta_de_instalacion/lib/libmysql.so.16.0.0: ELF 32-bit MSB shared object, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, not stripped

Uso del conector

Ahora ya podrás usar el conector en tus proyectos de C y  Mysql en OpenWrt para MIPS, solo basta agregar las rutas de los includes y la librerías de la siguiente forma:

gcc cliente.c -o cliente  -I/ruta_de_instalacion/include -L/ruta_de_instalacion/lib -lmysqlclient -lz -ldl

Aprender el API

Si estás interesado en aprender el API, te recomiendo el libro de MySQL Developer’s Library de Paul DuBois el cual tiene un ejemplo muy bueno de cómo hacer sentencias preparadas usando el conector de C para MySQL en el capítulo 7.

Recursos

,

2 Comentarios

Usando el anclaje de red (tethering) de Android en OpenWrt

OpenWrt - Android

Si tu router cuenta con un puerto USB puedes aprovechar el anclaje de red (tethering) de Android para conectarte a Internet cuando tu proveedor de servicios habitual esté caído. Para ello basta con seguir los siguientes pasos:

  1. Actualizar el listado de paquetes
      opkg update
  2. Instalar los siguientes componentes:
      opkg install kmod-usb-uhci kmod-usb-net-rndis
  3. Una vez instalado, conectar el dispositivo Android y hacer el anclaje de red.
  4. Anclaje USB

  5. En el router verificar que se reconoce el dispositivo:
      root@OpenWrt:~# logread
      May 22 03:16:51 OpenWrt user.info kernel: usb 1-1: USB disconnect, address 4
      May 22 03:16:51 OpenWrt user.info kernel: usb 1-1: new high speed USB device using ar71xx-ehci and address 5
      May 22 03:16:51 OpenWrt user.info kernel: usb 1-1: configuration #1 chosen from 1 choice
      May 22 03:16:51 OpenWrt user.info kernel: usb0: register 'rndis_host' at usb-ar71xx-ehci-1, RNDIS device, 82:ab:00:f2:6d:9c
      root@OpenWrt:~# ifconfig usb0
      
      usb0      Link encap:Ethernet  HWaddr 82:AB:00:F2:6D:9C
                BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
  6. Se debe elegir usb0 como la interfaz de la wan, bien sea editando el archivo /etc/config/network o a través de la interfaz web:
  7. OpenWrt - Android tethering

  8. Bajat y levantar la wan:
      ifdown wan
      ifup wan

Si se consulta las interfaces de red, LuCi debe mostrar lo siguiente:

OpenWrt - Android tethering - WAN

Referencia: USB tethering an Android phone to an OpenWRT router

, ,

8 Comentarios

Instalación de OpenWrt en TP-LINK TL-WR1043ND

Router TP-LINK TL-WR1043ND TP-Link TL-WR1043

Por razones ajenas a mi voluntad tuve que comprar otro router inalámbrico y aproveché de comprar el TP-LINK TL-WR1043ND, el cual viene con un puerto USB para compartir una conexión 3G con un módem USB. Lo compré a sabiendas de que OpenWrt funcionaría con este router por lo que inmediatamente que lo conecté procedí a instalarlo.

¿Por qué instalar OpenWrt?

El router TP-LINK TL-WR1043ND viene con muchas funciones con el firmware original, las cuales se pueden controlar desde una interfaz web, pero no se puede extender más allá de estas funciones. Con OpenWrt se tienen las mismas funciones que vienen con el router y se puede instalar software adicional que permita extender estas funciones. Un ejemplo que me viene a la mente es la posibilidad de instalar un web proxy como Squid en el router, o por ejemplo, configurar una VPN .

Instalación

Dejo aquí los pasos necesarios para poner a funcionar OpenWrt en el router TP-LINK TL-WR1043ND por si estás interesado en hacer lo mismo:

    1. Descargar la imagen para el router TL-1043ND (Backfire 10.03.1-rc6). Nota: Recomiendo que verifiquen la versión del router y descargar la versión de OpenWrt que se ajuste al router que tengan.
    2. Ir la interfaz web del router y buscar el apartado System Tools > Firmware Upgrade

TPLINK - TL-WR1043N - Firmware upgrade

  1. Seleccionar la imagen descargada y esperar a que se complete el proceso.

Una vez terminado el proceso el router se reiniciará y comenzará a trabajar con la configuración por omisión. Es decir, se podrá acceder a la interfaz web desde la dirección http://192.168.1.1 o incluso se podrá entrar al sistema vía ssh.

OpenWrt - TL-WR1043N

Referencias

,

74 Comentarios

Compilación-cruzada (cross-compiling) de MIPS para OpenWrt

MIPS-OpenWrt

Si por alguna razón necesitas cross-compilar alguna aplicación para la arquitectura MIPS que correrá en OpenWrt sin usar la herramienta de compilación proporcionada por el proyecto, puedes seguir estos pasos:

  1. Ubica la el toolchain para MIPS de OpenWrt. Desde el directorio donde descargaste OpenWrt ejecuta:
  2. find -name *toolchain-mips*
    ./staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1

    Nota: Se debió haber compilado algo previamente bajo esta arquitectura para poder disponer del toolchain.

  3. Exporta las siguientes variables, teniendo en cuenta la ruta absoluta del toolchain (coloco el ejemplo de mi máquina):
  4. export TOOLCHAIN_PATH=/home/lgallard/backfire/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1
    export PATH=$PATH:$TOOLCHAIN_PATH/usr/bin/
    export AR=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ar
    export AS=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-as
    export LD=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ld
    export NM=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-nm
    export CC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
    export CPP=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-cpp
    export GCC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
    export CXX=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-g++
    export RANLIB=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ranlib
  5. Luego para compilar proyectos con Makefile y autotools puedes ejecutar en el directorio de las fuentes de la aplicación:
  6. ./configure --target=mips-openwrt-linux --host=mips-openwrt-linux

Referencia: Cross-compile for WRT

,

8 Comentarios

Impresora Samsung SCX-5530FN/XAA en Linux

Samsung SCX-5530FN

En la oficina tienen una impresora multifuncional Samsung SCX-5530 compartida en red. Lo primero que pensé es que iba a ser traumática la instalación, pero más bien fue todo lo contrario ya que Samsung proporciona los drivers para Linux y hasta un instalador de los mismos, el cual muestro a continuación:

Instalación

  1. Descargar Unifier Driver for Linux de la gente de Samsung
  2. Descomprimir el archivo descargado.
  3. Siendo root, ir a la carpeta cdroot y ejecutar el archivo autorun, es decir:
    cd cdroot
    ./autorun
  4. Seguir los pasos del instalador…si, así de sencillo. Les dejo unas capturas del instalador para que se hagan una idea:

 

Unified Linux Driver

Samsung 5x30 - Detect shared printer

Samsung 5x30 - Choose model

Samsung 5x30 - Congratulations

 

Referencia: Download Center for SCX-5530FN/XAA

No hay Comentarios

Instalar Oracle VM VirtualBox Extension Pack

VirtualBox Extensions

Ahora en VirtualBox 4.x el soporte USB y otras cosas se instala a partir de un paquete adicional llamado Oracle VM VirtualBox Extension Pack. Esta movida por parte de Oracle permite que VirtualBox sea distribuido como software libre y de requerirse software privativo instalarlo como una extensión, respetando así la licencia GPL.

Instalación

Veamos cómo instalar Oracle VM VirtualBox Extension Pack:

  1. Descargar Oracle VM VirtualBox 4.1.8 Extension Pack.
  2. Abrir VirtualBox, luego ir a Archivo > Preferencias > Extensiones  y especificar el archivo descargado anteriormente (ver imagen).
  3. Agregar el usuario al grupo de VirtualBox. En Linux debes agregar el usuario que utilizará VirtualBox al grupo vboxusers:
    adduser lgallard vboxusers

    Nota: En este ejemplo lgallard es el usuario que usará VirtualBox, y para añadir usuarios a grupos se debe ser administrador del sistema (root).

  4. Cerrar la sesión gráfica actual y entrar nuevamente para que se tomen los cambios.

Una vez hecho esto ya podrás usar un dispositivo USB o el puerto serial en tu máquina virtual!!

Versiones anteriores

Si nececitas los Extension Packs de versiones anteriores de VirtualBox, aquí te dejo algunos:

,

73 Comentarios