Archivo etiqueta Linux

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

,

79 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.14 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:

,

75 Comentarios

Actualizar router TP-LINK TL-WR841 v7.1 la versión Testing de OpenWrt

TP-LINK TLWR841Nv7 - ATTITUDE ADJUSTMENT

Viendo las distinta versiones de OpenWrt me percato de que existe una versión de pruebas que se actualiza con más frecuencia. Como Instalé Kamikaze en mi TP-Link TL-WR841N v7.1, y esta es una versión anterior a la actual Backfire, decidí probar motivado a que existe un binario para la versión de mi router (v7.1).

Instalación de testing

Para actualizar a la versión testing Attitude Adjustment debes hacer lo siguiente:

  1. Descargar la imagen testing para el router TL-WR841 v7.1.
  2. Ir a System > Flash Firmware y subir la imagen que se descargó
  3. TP-LINK TLWR841Nv7 - upgrade

  4. Se indicará la suma de comprobación MD5 de la imagen a flashear, para que se pueda comparar.
  5. TP-LINK TLWR841Nv7 - md5sum

  6. Una vez verificada la imagen, procede a aplicar.

No hay interfaz web

Luego de aplicar la imagen intenté acceder a la interfaz web sin éxito, pero si pude entrar por ssh. Desde allí comprobé que la imagen viene sin la interfaz web instalada, por lo que se debe hacer lo siguiente para activarla:

opkg update
opkg install luci
/etc/init.d/uhttpd restart

La interfaz sigue siendo la misma, y realmente no noto grandes cambio. Pero me percato que ya tiene el soporte USB activo a través de módulo cargado. Esto puede ser de interés si por ejemplo más adelante quisiera usar el puerto disponible en el board como comentan en el foro de dd-wrt.

Capturas adicionales

Aquí les dejo un par de capturas adicionales del monitoreo que se puede hacer desde la interfaz web:

Attitude Adjustment - Realtime load

Attitude Adjustment - Realtime connections

,

20 Comentarios