Ubiquiti Edgerouter como cliente OpenVPN de Zentyal (modo túnel Zentyal-2-Zentyal)

edgerouterÚltimamente estoy usando los aparatos de Ubiquiti ya que la relación calidad/precio me parece muy buena. En este caso se trata de EdgeRouter que tiene que reemplazar a una máquina con Zentyal en modo comunicaciones. Es una instalación multisede y tenemos una VPN montada con Zentyal y su opción de montar un tunel OpenVPN de zentyal a zentyal. Vamos a ver como podemos configurar el edgerouter para que se conecte a esa VPN.

  1. Vamos a suponer que ya tenemos el EdegeRouter con su configuración básica, tenemos salida a internet, sabemos acceder a el vía ssh, etc
  2. Primero nos conectamos al Zentyal que hace de server OpenVPN y nos bajamos el tar.gz con los archivos necesarios (necesitamos los certificados).
  3. Copiamos vía scp los certificados al edgerouter en /config/auth
  4. Nos conectamos por ssh al EdgeRouter, entramos en modo configuración y configuramos la vpn:
configure
edit interfaces openvpn vtun1
set mode client
set device-type tap
set openvpn-option --comp-lzo
set remote-host alava.sartu.org
set remote-port 1194
set tls ca-cert-file /config/auth/ca.crt
set tls cert-file /config/auth/cert.crt
set tls key-file /config/auth/privateKey.crt
commit
save

Ya debería funcionar. En el dashboard nos aparecerá la nueva interfaz (sin posibilidad de configuración) y podremos realizar el resto de tareas que necesitemos (routing, nat, ….)

Instalar Cordova en Ubuntu 14.10 para programa aplicaciones Android

Apache Cordova es el framework de desarrollo de aplicaciones para móviles multiplataforma que está detrás de phonegap. Vamos a ver como instalarlo en la última Ubuntu para empezar a trabajar con el desarrollando una app para Android.

Lo primero es instalar node.js (el lenguaje en que el que está programado cordova) y npm (el gestor de paquetes que usa node)

sudo apt-get install nodejs npm

Necesitamos lincar el ejecutanel de nodejs con el nombre node para que luego no falle cordova

sudo ln -s /usr/bin/nodejs /usr/bin/node

Instalamos cordova con npm

sudo npm install -g cordova

Ahora hay que Instalar JAVA y el compilador ant

sudo apt-get install openjdk-8-jdk openjdk-8-jre ant

Nos bajamos el SDK de android

https://developer.android.com/sdk/index.html

Los descomprimimos y establecemos la variable de entorno ANDROID_HOME a donde lo hayamos descomprimido:

echo 'export ANDROID_HOME="/home/patataman/android-sdk-linux/"' >> ~/.bashrc ; . ~/.bashrc

Lanzamos el gestor del sdk para instalar la versión que queramos (la API 19 de Android 4.4.2 nos irá bien)

$ANDROID_HOME/tools/android

Después de instalar el SDK y si queremos emular un android tendremos que crear un emulador. Para ello en el gestor del sdk del paso anterior vamos a Tools>Manage AVDs y creamos una imagen con los parámetros que más nos convengan.

Y ya estamos listo para crear, compilar y ejecutar una aplicación cordova en Android y comprobarq ue todo funciona:

cordova create hello com.example.hello HelloWorld
cd hello
cordova platform add android
cordova run android

Introducción a flexbox

CSS3 logoFlexbox es un esquema de diseño CSS3 para que los elementos de una “caja” encajen de manera flexible ocupando toda la pantalla adaptándose a distintos tipos de dispositivos (caballo de batalla de hoy en día e el diseño web). Es un candidato a estándar en W3C así que habrá que seguirle la pista. Para empezar una buena guía es la que hay en css-tricks

http://css-tricks.com/snippets/css/a-guide-to-flexbox/

Puppet en 15 minutos.

Introducción

Este post va a ser un breve esquema de como poner en marcha una arquitectura cliente/servidor con Puppet. Va a ser solo unas pinceladas para información más en detalle tenemos la web de puppet o es este libro de James Loope publicado en o’relly.

¿Qué es Puppet?

Puppet es, en poca palabras, un sistema de gestión de la configuración. Lo que nos permite es gestionar los ficheros, configuraciones, software instalado, etc de N máquinas (unix o windows) de una manera similar a como programaríamos. En puppet programamos “manifiestos” que declaran como será la configuración de un servicio, etc.

Es algo realmente útil cuando tenemos varias máquinas y queremos poder gestionarlas de manera centralizada, distribuyendo cambios de configuración entre ellas. Es indispensable en entornos de tipo cloud donde creamos nuevas máquinas y queremos que estas estén listas para funcionar (con una configuración de servidor web, por ejemplo).

¿Cómo funciona?

Aunque puppet se puede usar de manera aislada en una sola máquina (toda la docu de iniciación que encontré al principio describía este uso) su verdadera potencia viene cuando tenemos un puppet maestro y varios puppet cliente (agentes) que consiguen los manifiestos de configuración del maestro.

http://docs.puppetlabs.com/guides/installation.html#debian-and-ubuntu

http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-debian-and-ubuntu

Instalación del maestro

Instalamos el repo de puppetlabs para tener las últimas versiones:

wget http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -c -s`.deb

sudo dpkg -i puppetlabs-release-`lsb_release -c -s`.deb

sudo apt-get update

Instalamos el maestro:

sudo apt-get install puppetmaster

A que no ha dolido? 😀

Ahora hay que editar un par de ficheros para que nuestro maestro esté en marcha. Vamos a crear un par de manifiestos necesarios para que funcione el maestro. Por defecto puppet master va a leer el manifiesto en el fichero site.pp, pero para se un poco ordenados en este site.pp vamos a decirle que cargue el manifiesto donde definidos todos los agentes y un par de opciones más:

# fichero /etc/puppet/manifests/site.pp

import "nodes"

filebucket { main: server => "masterpuppet.mired.lan" }

# defaults

File { backup => main }

Exec { path => "/usr/bin:/usr/sbin/:/bin:/sbin" }

Ahora debemos crear el manifiesto nodes.pp donde le diremos como configurar cada nodo. De momento solo vamos a crear un nodo “default” el cual se encargar de configurar ntp en el nodo.

#fichero /etc/puppet/manifests/nodes.pp

node base {
include ntp

}

node 'clientepuppet.mired.lan' inherits base {
}

Ya tenemos el maestro listo. Para probarlo vamos a instalar un módulo que nos creará la clase ntp y así probaremos desde un agente. Instalar


cd /etc/puppet/modules
puppet module install puppetlabs-ntp

Instalación del nodo

 

Si tenemos una ubuntu medio actual (12.04 o superior) instalamos desde el repositorio de la propia Ubuntu, sino usamos el mismo sistema para instalar el repo de puppetlabs que hemos visto para el maestro.

Instalamos puppet:

sudo apt-get install puppet

Lanzamos en agente contra el server:


sudo puppet agent --test --server masterpuppet.mired.lan

Fallara por la falta de firma del cert:

info: Creating a new SSL key for clientpuppet.mired.lan
info: Caching certificate for ca
info: Creating a new SSL certificate request for clientpuppet.mired.lan
info: Certificate Request fingerprint (md5): 37:16:56:D5:15:09:E0:A0:DF:B5:73:CF:5A:76:45:54
Exiting; no certificate found and waitforcert is disabled

En el SERVER firmamos el cert del cluente


sudo puppet ca list

Miramos el que esta pendiente y lo firmamos


puppet ca sign clientpuppet.mired.lan

(se puede hacer que autofirme siempre y evitar este paso pero hay que ser consciente de los problemas de seguridad que implica ello).

Ya podemos volvemos al nodo cliente y volvemos a lanzar el agente de puppet.

En la docu de puppet tenemos una explicación de como funciona el agente vs master y un útil “trobleshoot”

http://docs.puppetlabs.com/learning/agent_master_basic.html

Y con eso tenemos lo básico. Ahora tendríamos que empezar a escribir manifiestos 🙂

Todas las opciones de configuración de owncloud

owncloud-logo copy

Últimamente estamos usando en el trabajo owncloud, tanto a nivel interno como de cara a implantar en clientes. Una cosa que me ha costado un pelín encontrar son las opciones de configuración y eso que lo tenía delante de las narices!!!

https://github.com/owncloud/core/blob/master/config/config.sample.php#L65-L66

Con tanto autoinstalador/configurador los sysadmins nos volvemos vagos/tontos 😛

Aplicación Django para subida de ficheros

Buscando cosas para un proyecto he encontrado esta app/módulo para la carga de ficheros en una aplicación web usando las últimas técnicas de manera que la carga sea sencilla y visual.

http://blueimp.github.io/jQuery-File-Upload/index.html

Nos permite una carga archivos vía drag&drop, pre-visualizarlos, validar su carga y nos muestra una barra de progreso mientras sube. Y todo con un aspecto bootstrap muy agradable (o si lo queremos lquery ui).

El código está en github como no:

https://github.com/blueimp/jQuery-File-Upload