ASP Site Map multi-idioma, también el parámetro URL

En la red existen varios tutoriales sobre cómo localizar (ajustar al
idioma) un site map de asp.net. De hecho, incluso Microsoft tiene una página con una breve explicación de ello, pero haciendo hincapié en que se pueden localizar los parámetros title y description pero no el parámetro url. En esa misma página deja unas ligeras pistas de cómo localizar el parámetro url,
pero demasiado ligeras, pues no encuentro nadie que lo haya conseguido.
Existen varios intentos por la red, algunos dicen que funcionan, pero
eso no es lo que yo he comprobado. Por ejemplo en este link
hay una solución un poco rebuscada que sólo funciona la primera vez que
se ejecuta la aplicación, desde ese momento guarda la preferencia de
lenguaje y siempre muestra el sitemap para ese mensaje. Un buen intento
que se queda corto, y un poco complicado, pues hay que crear un
SiteMapProvider personalizado.

Mi solución

Mi solución es la siguente. Creamos un sitemap para cada idioma, por
ejemplo Web.es.sitemap y Web.en.sitemap. En cada uno definimos los nodos
con sus atributos title, description, url y cualquier otro que queramos en su idioma correspondiente.

Site Map en inglés

Site Map en español

Ahora debemos configurar nuestra aplicación para que disponga de dos
proveedores de site maps, ojo, dos proveedores. Así quedaría nuestro
Web.config:

A continuación, en nuetra página maestra que es la que se debería
encargar de crear el menú de navegación a partir del sitemap, debemos
definir un método que en tiempo de ejecución cambie de proveedor de sitemap al datasource que empleemos para generar el menú de navegación. Yo lo hago en el método Page_Load:

En mi caso utilizo un par de Repeaters para crear el menú de navegación a
partir del Datasource SiteMapDataSource1 (original, eh), mostrando
tanto los parámetros url, title y description como otros personalizados como Image, ulid o pseudoUrl. Así se crea mi menú de navegación a partir de un site map con el parámetro url localizado de acuerdo al idioma.

Espero que a alguien le sirva.

Instalar Alfresco Community en un Ubuntu Server 11.10 x86 (32 bit)

Mi jefe es un híbrido entre una fabrica de papel y un aspersor, y debido a circunstancias de la producción me va a tocar a mi archivarle los papeles. Visto lo visto y lo traumatizados que han salido todos los que han tenido este cometido he decidido hacerlo bien, con un gestor documental informatizado, es decir, escaneas todos los papeles y luego categorizas y añades meta-tags e
indexas por contenido. Asi cuando vayas a buscar algo es casi instantáneo.

Tras investigar y probar (demos online) bastante he llegado a la conclusión que todo el mundo conoce sin investigar, lo mejor es Alfresco y despues Nuxeo, aunque hay otras buenas alternativas como Plone o FengOffice.
Plone me pareción muy bueno, sencillo y manejable, aunque algo limitado a la hora de configurar. FengOffice me encantó principalmente por su interfaz, que es muy moderna, pero no veo cómo hacer para que tenga previsualización y edición de documentos online (con previsualización me conformaría), algo así como swftools o integración con el servicio LibreOffice. ¡Qué demonios!, usemos el mejor, Alfresco.

Como tengo por ahí un viejo servidor HP Server tc2110 (Pentium 4 2.0GHz 640MB RAM, 18.2 GB SCSI HDD) me dicidí a instalar Alfresco:

1. Elegir el sistema operativo.

Alfresco se puede ejecutar tanto en Linux como en Windows, en ambos casos en arquitercturas x86 o x64. Tratándose de un servidor tan viejo y con tan poca RAM habría que estar más loco para ponerle un Windows.
Así, le pondré Ubuntu 11.10 Server Edition x86 (porque el Pentium 4 no soporta x64).

El primer problema derivado de esta elección es que Alfresco tiene instaladores automatizados para Windows x86 y x64 y para Linux x64, pero
(maldita sea) no para x86. No problem! Siempre es mucho más divertido instalar a mano, y además, dejaremos la instalación totalmente personalizada. Por ejemplo, en lugar de poner como gestor de base de datos MySQL (que es lo que hace el instalardor automatizado) utilizaremos postgresql que es más liviano. De igual modo, en lugar de usar OpenOffice (que se cuelga bastante) usaremos LibreOffice.

Total, nos descargamos la ISO de Ubuntu Server 11.10, la grabamos en un CD y la instalamos en nuestro HP tc2110.

 


2. Instalamos los requisitos de Alfresco

Atención: Esta guía es para Ubuntu Server x86 (32 bits).
Si tu sistema es otro busca una guía más sencilla, que las hay. Esta guía es más complicada debido a que Alfresco ya no da soporte para versiones de Linux de 32 bits.

Alfresco se encarga de indexar todos los documentos que le damos, pero para hacerlo necesita algunas utilidades que debe tener el sistema. Por ejemplo necesita el servidor web TomCat para que desde otros puestos de la oficina podamos comunicarnos con él y use páginas web con extensión jsp. Necesita un sistema gestor de base de datos, MySQL, Postgresql, etc. Evidentemente también necesita Java y algunas cosillas menores como imagemagick, swftools, libreoffice que en algún caso son opcionales.
Así, empezemos por tener todos esto ok antes de instalar Alfresco.

Lo primero que suelo hacer cuando monto un servidor es instalar el servicio SSH, para poder conectarme a él remotamente y trabajar a gusto desde mi mesa. Así que, aunque esto no es necesario para Alfresco, empiezo por ahí.

# sudo apt-get install openssh-server

Ahora vamos a instalar algunas cosillas que necesita Alfresco.

# sudo apt-get install imagemagick swftools sun-java6-jre postgresql

El paquete imagemagick debe instalarse sin problemas, pero el swftools nos irá que no lo encuentra, así que nos toca instalarlo a mano.


# sudo apt-get update
# sudo apt-get install gcc g++ make
# sudo apt-get install libgif-dev xpdf  libfreetype6 libfreetype6-dev libjpeg62 libjpeg8 libjpeg8-dev
# sudo apt-get install git


# cd ~
# git clone git://git.swftools.org/swftools
# cd ~/swftools/lib/pdf
# sudo perl inject-xpdf.pl xpdf-3.02.tar.gz
# cd ~/swftools
# ./configure
# sudo make
# sudo make install
# which pdf2swf
# pdf2swf –version

Si todo ha ido bien ya tenemos swftools instalado. De este paquete Alfresco usará la utilidad pdf2swf para poder previsualizar los pdf convirtiéndolos a flash. En cualquier caso, deberíamos copiar el ejecutable a /user/bin para que Alfresco lo encuentre.

# sudo cp /usr/local/bin/pdf2swf /usr/bin

En caso de que por algún motivo no consiguiésemos instalar swftools tampoco tendríamos que preocuparnos demasiado, todo funcionaría salvo que no podríamos previsualizar los pdf, aunque podríamos corregirlo instalando mas tarde swftools.

Para continuar debemos editar el fichero /etc/apt/sources.list para descomentar (quitar la #) en la línea del repositorio partner. Esto habilita un repositorio que tiene algunos paquetes que nos harán falta.

Para editar hacemos

# sudo nano /etc/apt/sources.list

Descomentamos las líneas:

deb http://archive.canonical.com/ubuntu oneiric partner
deb-src http://archive.canonical.com/ubuntu oneiric partner

Salimos de nano guardando los cambios (Ctrl+X)

y actualizamos los paquetes disponibles con

# sudo apt-get update

Ahora vamos a instalar java. Al parecer los de Ubuntu están peleados con
el Java de Sun, y ahora en sus repositorios sólo ofrecen un Java Open
Source llamado OpenJava. A nosotros para Alfresco no nos interesa ese,
nos interesa el Java de Sun, así que necesitamos instalar un repositorio
extra para poder instalar Java. Allá vamos:

# apt-get install python-software-properties
# sudo add-apt-repository ppa:ferramroberto/java
# sudo apt-get update
# sudo apt-get install sun-java6-jre

Otra opción es instalar Java Sun a mano, descargando y compilando. Más información aquí.

Lo siguiente es instalar la base de datos que usará Alfresco. Lo normal es instalar MySQL, así que vamos a instalar PostgreSQL.

# sudo apt-get install postgresql

Ya está, este ha sido fácil.

Ahora vamos a instalar algo para poder previsualizar/editar documentos.
Lo normal es instalar OpenOffice, así que vamos a instalar LibreOffice,
que según he leido se cuelga bastante menos (el servicio). Primero
limpiamos cualquier rastro de OpenOffice, por si lo hubiera, y a
continuación instalamos LibreOffice (añadiendo su correspondiente
repositorio).

# sudo apt-get purge openoffice.org ure
# sudo add-apt-repository ppa:libreoffice/ppa
# sudo apt-get update
# sudo apt-get install libreoffice

Bien, ahora vamos a por TomCat y sus librerías nativas.

# sudo apt-get install tomcat6
# sudo apt-get install libtcnative-1

Más fácil imposible.

 

 3. Instalar Alfresco en nuestro Ubuntu 11.10 (Oneiric Ocelot).

Llegó el momento, vamos a instalar Alfresco. Para ello empezamos por descargar el WAR desde el sitio de Alfresco.

Vamos a la página de Alfresco y descargamos la última versión, en el momento de escribir este artículo la 4.0.

# wget http://dl.alfresco.com/release/community/build-3979/alfresco-community-4.0.c.zip

Descomprimimos creando la carpeta Alfresco en nuestro home

# sudo apt-get install unzip
# unzip alfresco-community-4.0.c.zip -d alfresco

Paramos el servicio de TomCat

# sudo service tomcat6 stop

Y ahora configuramos TomCat copiando algunos archivos de Alfresco:

# sudo cp -r ~/alfresco/web-server/shared /var/lib/tomcat6
# sudo cp -r ~/alfresco/web-server/webapps /var/lib/tomcat6
# sudo cp -r ~/alfresco/web-server/lib /var/lib/tomcat6/shared/lib
# sudo cp -r ~/alfresco/bin /var/lib/tomcat6/bin
# sudo cp -r ~/alfresco/licenses /var/lib/tomcat6/licenses
# sudo cp -r ~/alfresco/README.txt /var/lib/tomcat6/README.txt
# sudo rm /var/lib/tomcat6/shared/lib/mysql-connector-java-5.1.13-bin.jar

La última orden es sólo por si acaso; normalmente no tendremos ese fichero, pero si lo tenemos hay que eliminarlo.

Ahora necesitamos los drivers JDBC para poder utilizar PostgreSQL, así
que vamos a la web de PostgreSQL y los descargamos y se los pasamos a
TomCat.

# wget http://jdbc.postgresql.org/download/postgresql-9.1-901.jdbc3.jar
# sudo cp ~/postgresql-9.1-901.jdbc3.jar /var/lib/tomcat6/shared/lib/postgresql-9.0-801.jdbc3.jar

Ahora configuramos Alfresco a partir de los archivos de configuración de ejemplo

# sudo mv
/var/lib/tomcat6/shared/classes/alfresco-global.properties.sample
/var/lib/tomcat6/shared/classes/alfresco-global.properties
# sudo mv
/var/lib/tomcat6/shared/classes/alfresco/web-extension/share-config-custom.xml.sample

/var/lib/tomcat6/shared/classes/alfresco/web-extension/share-config-custom.xml
Y editamos el archivo catalina.properties de TomCat cambiando la línea que empieza por shared.loader=… que será algo como esta:

shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/*.jar,/var/lib/tomcat6/shared/classes,/var/lib/tomcat6/shared/*.jar

y dejándola así:

shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/*.jar,/var/lib/tomcat6/shared/classes,/var/lib/tomcat6/shared/lib/*.jar

Vamos, un cambio de nada, sólo hemos añadido el /lib/ al final.

Ahora nos toca configurar TomCat para que funcione con Java correctamente, editando el fichero /etc/default/tomcat6

# sudo nano /etc/default/tomcat6

Y añadimos:

JAVA_HOME=/usr/lib/jvm/java-6-sun
JAVA_OPTS=”${JAVA_OPTS} -XX:MaxPermSize=512m -Xms128m -Xmx768m -Dalfresco.home=/opt/alfresco -Dcom.sun.management.jmxremote”
JAVA_OPTS=”${JAVA_OPTS} -XX:+CMSIncrementalMode”

Si quieres saber más sobre cómo ajustar el rendimiento de la máquina
virtual de Java para que funcione ok con Alfresco puedes leerlo aquí, en el apartado Tunning the JVM.

 

Bien, ya casi estamos. Vamos a crear la base de datos alfresco en PostgreSQL junto con el usuario alfresco con contraseña alfresco, original ¿no?.

# sudo -i
# su – postgres
# psql
CREATE USER alfresco WITH PASSWORD ‘alfresco’;
CREATE DATABASE alfresco WITH OWNER=alfresco;
GRANT ALL PRIVILEGES ON DATABASE alfresco TO alfresco;
\l
\du
\q

Ahora creamos un directorio para nuestros datos y le damos permisos aTomCat para ese directorio.

# sudo mkdir -p /srv/www/alfresco/alf_data
# sudo chown -R tomcat6:tomcat6 /var/lib/tomcat6 /srv/www/alfresco

Editamos la configuración de Alfresco

# sudo nano /var/lib/tomcat6/shared/classes/alfresco-global.properties

Al principio del documento creamos la línea que indica a Alfresco dónde guardar los documentos.

dir.root=/srv/www/alfresco/alf_data

En la sección External locations añadimos lo siguiente:

ooo.exe=/usr/lib/libreoffice/program/soffice
ooo.enabled=true
jodconverter.officeHome=/usr/lib/libreoffice
jodconverter.portNumbers=8101
jodconverter.enabled=true
img.root=/usr/lib/ImageMagick-6.5.7
img.exe=/usr/bin/convert
swf.exe=/usr/bin/pdf2swf

En la sección PostgreSQL añadimos:

db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432/alfresco

Y en la sección URL Generation Parameters descomentamos:

alfresco.context=alfresco
alfresco.host=${localname}
alfresco.port=8080
alfresco.protocol=http


share.context=share
share.host=${localname}
share.port=8080
share.protocol=http

¡Listo! Lanzamos el Tomcat

# sudo service tomcat6 start

Y comprobamos si podemos acceder a Alfresco con un navegador web.

 


http://192.168.1.100:8080/share/

Ten en cuetna poner la ip de tu servidor, el puerto que hayas
configurado, y esperar porque la primera vez que accedes tarda un poco.

Ah! Por defecto el usuario es admin y la contraseña también admin.

Ahora a escanear se ha dicho.

 


4. Algunas cosillas más

Si queréis poder acceder al servidor por su nombre en lugar de por su ip, es decir, poder poner http://ubuntuserver:8080/share en lugar de http://192.168.1.100:8080/share tendréis que instalar samba:

# sudo apt-get install samba sbmfs

Además también lo necesitaréis para que la máquinas Windows del resto de
la red puedan acceder al servidor mediante su nombre (ubuntuserver) y
no solo por su ip. Es decir, una vez habilitado CIFS las máquinas
windows podrán hacer \\ubuntuservera\alfresco y acceder a las carpetas.

Problemillas con CIFS. Si quieres que funcione CIFS te toca pringarte.
El problema es el siguiente: En linux los puertos del 0 al 1024 son
puertos privilegiados, sólo los pueden utilizar aplicaciones lanzadas
con la cuenta root (por ejemplo). Alfresco escucha en los puertos 445,
139, 137 y 138 para hacer de servidor Samba y CIFS. Pero claro, Alfresco
se lanza con el usuario tomcat6, que no es un usuario privilegiado, por
eso no funciona CIFS recién instalado. Tenemos dos opciones:

1. Lanzar alfresco con el usuario root

2. Decierle a Alfresco que ejecute el servidor SAMBA/CIFS en puertos no
privilegiados (por encima del 1024) y redirigir los puertos
privilegiados a esos con iptables.

 

La primera opción nos pueded dar muchos problemas de seguridad, TomCat
no debe ejecutarse con tantos privilegios, si alguien se apodera de él
se apodera de todo el sistema.

Usamos la segunda opción, así que primero cambiamos los puertos CIFS en
el archivo
/var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers.properties,
dejando las siguientes líneas así:

# cifs.tcpipSMB.port=1445
# cifs.netBIOSSMB.sessionPort=1139
# cifs.netBIOSSMB.namePort=1137
# cifs.netBIOSSMB.datagramPort=1138

Tan sólo hemos añadido un 1 delante de cada puerto para que ya no sean
puertos privilegiados. Ahora debemos decirle a iptables que rediriga los
antiguos puertos privilegiados, que es donde todo el mundo (windows)
espera encontrar al servidor SAMBA/CIFS, a los nuevos puertos.

# sudo su
# echo 1 > /proc/sys/net/ipv4/ip_forward
# modprobe iptable_nat
# iptables -F
# iptables -t nat -F
# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -t nat -A PREROUTING -p tcp –dport 445 -j REDIRECT –to-ports 1445
# iptables -t nat -A PREROUTING -p tcp –dport 139 -j REDIRECT –to-ports 1139
# iptables -t nat -A PREROUTING -p udp –dport 137 -j REDIRECT –to-ports 1137
# iptables -t nat -A PREROUTING -p udp –dport 138 -j REDIRECT –to-ports 1138

Reiniciamos tomcar y listo, ya debería funcionar CIFS.

Por supuesto las reglas de iptables se borrarán al reiniciar y CIFS
dejará de funcionar. Para que se queden debemos instalar el paquete
iptables-persistent (hay más formas, pero esta es más fácil).


# sudo apt-get install iptables-persistent

Y cada vez que queramos que las reglas que se estén ejecutando se guarden debemos hacer


# iptables-save > /etc/iptables/rules.v4

Listo, iptables guardado a prueba de reinicios

La guinda:

Si a Alfresco le ponemos un plugin llamado media-viewers ya se quda niquelao.Principalmente porque ese plugin incluye pdf.js,
que es un lector de pdfs online que nos permitirá deshacercnos del
asqueros previsualizador de pdfs Flash que viene por defecto en la
instalación de Alfresco.

Orientar antenas WIFI usando Google Earth

Uno de los problemas más importantes a la hora de crear un enlace wifi de larga distancia es cómo orientar o alinear las antenas. Lo
normal es utilizar unos prismáticos y el método ensayo-error hasta que
consigas una buena señal, pero ¿es esa la mejor señal que puedes
obtener?

En mi empeño elboré un método matemático para orientarlas, imprimiendo
el mapa de la zona, marcando en él los puntos origen y destino del
enlace, dibujando un eje cartesiano sobre él, calculando los vectores
directores que unen ambos puntos y con un poco de trigonometría sacamos
los ángulos que forma el enlace con los ejes.

Sin embargo esto se me ha quedado un poco obsoleto. Esta semana (Mayo de
2011), uno de mis enlaces de larga distancia (7Km) ha visto reducido su
rendimiento drásticamente. Tras varias comprobaciones parece ser un
problema de interferencias con otras redes. Demasiado Wifi en la zona, y
más cuando la gente que se dedica a hacer enlaces no respeta la normativa del Reglamento de Radiocomunicaciones.

El caso es que he decido cambiar de frecuencia, y en lugar de hacer el
enlace en 2.4GHz he comprado unas nuevas antenas para hacerlo en 5GHz,
que al parecer está mucho menos congestionado.

Así, una vez desmontadas las antiguas antenas me enfrento de nuevo al problema de orientar las nuevas antenas. Para ello esta vez lo voy a intentar con una brújula y con Google Eart. Mucho más sencillo y divertido que estar
calculando arcocosenos.

El procedimiento que sigo es el siguiente.

1. Instalar Google Earth en su última versión

2. Utilizando la herramienta regla marcar una línea desde una antena hasta la otra y apuntar los grados.

 

3. Repetir la operación utilizando la otra antena como origen y apuntar los grados.

4. Subirse al tejado, poste, campanario o lo que sea junto con una
brújula (no vale del todo a 1€) y orientar la antena para que apunte a
los grados indicados.

Esto es más o menos matemático, dependiendo un poco de que los mapas de
Google estén muy bien hechos, de que la brújula sea buena, y de tu
pericia a la pata coja a 15 metros del suelo con una mano sujetándote
con la otra midiendo con la brújula y con la otra (!) aflojando los
tornillos.

Actualización: ¡Cómo mola la brújula que trae integrada el iPhone!

En cualquier caso, dejo como ejercicio para casa el tema de la elevación
de la antena (que apunte hacia arriba o hacia abajo más o menos),
aunque os adelanto que Google Earth, si trazas una ruta, te muestra su
elevación. Luego un poco de trigonometría y sacas el ángulo.

 

Referencias:

Turbokit, orientación manual de antenas (en inglés)

Calculadora de acimut

 

Actualización: La verdad, todo esto no tiene mucho sentido desde que descubrí el software Radio Mobile.
Te calcula lo más importante, el ángulo (acimut) y la elevación de las
antenas, pero además la viabilidad del enlace y muchísimos parámetros
más. Radio Mobile se puede usar directamente desde su web, sin necesidad
de instalar nada. Radio Mobile es genial, pero eso sí, seguirás
necesitando una brújula para colocar la antena en la dirección que el
programa te diga.

VPN PPTP con DD-WRT

El título lo deja bastante claro, montar una VPN (de la modalidad PPTP) con routers que utilicen el firmware DD-WRT.

¿Qué es una VPN? Pues eso una red privada virtual. El que
quiera más información que lo busque en la wikipedia, tan sólo decir que
a grandes rasgos sirve para unir dos o más redes locales (dos o más
LANs) por medio de internet (o cualquier otro tipo de WAN)

¿Para qué quiero unir dos LANs? En mi caso concreto esta
problemática surge porque una de las empresas para las que trabajo abre
una nueva oficina en Barcelona. El probelma es que la central, que está
en Totana, dispone de un servidor con Active Directory (incluidos
prefiles móviles) y Exchange. Eso quiere decir que tanto los correos de
los usuarios, como sus documentos, como los archivos compartidos para
todos los usuarios están en el servidor, y por supuesto, también la
información de las cuentas de usuario. Por supuesto, todos los equipos,
tanto los de Totana como los de Barcelona forman un único dominio, y por
supuesto el controlador de dominio es el servidor que está en Totana.
En resumen, que cuando un usuario inicie sesión en un equipo en
Barcelona, este usuario debe autenticarse contra el controlador de
dominio que está en Totana. Pero no sólo eso, sino que una vez
autenticado, el usuario debe poder acceder a sus documentos y su email,
que residen en el servidor de Totana. Además debe tener acceso a las
carpetas compartidas de otros equipos de la organización,
independientemente de si los equipos están en Totana o Barcelona. Para
eso necesito yo una VPN.

Disclaimer: Antes de continuar me gustaría dejar claro que este tipo concreto de VPN, la VPN PPTP,
es totalmente insegura. Su cifrado se puede romper fácilmente con un
ataque pasivo, por lo que todo aquel que la use debe conocer sus
debilidades e implementar políticas de seguridad adicionales. Una buena
alternativa es OpenVPN, la cual también es soportada por el firmware
DD-WRT.

Empecemos. Primero necesitamos dos routers capaces de ejecutar DD-WRT. En mi caso me decanto por los Buffalo WHR-HP-G54 ya que me han dado resultados espectaculares en todas mis instalaciones.

Uno de ellos hará las veces de servidor VPN (el de Totana) y otro
hará de cliente VPN (el de Barcelona). Por supuesto, podríamos tener
tantos clientes VPN como deseemos; sin ir más lejos, en mi estructura
hay otros dos clientes VPN que son portátiles con Windows 7 que se
mueven de un sitio para otro, pero eso es otra historia y una de las
razones por las que opté por PPTP en lugar de OpenVPN.

Lo primero que tenemos que hacer es flashear nuestros flamantes
Buffalos WHR-HP-G54 con el último firmware DD-WRT disponible, pero no
cualquier versión, sino la versión específica para VPN. Esta versión
incluye servicios tanto para PPTP como para OpenVPN.

 

Lo primero a tener en cuenta es que las redes no se solapen. Puedes compartir la misma familia de red con subneting, pero para simplificar el ejemplo vamos a utilizar dos familias diferentes.

Red de Totana: 192.168.0.0/24

Red de Barcelona: 192.168.3.0/24

En ambas redes el router DD-WRT tendrá la ip 254, es decir, en Totana será 192.168.0.254 y en Barcelona será la 192.168.3.254

Además, cada una de las oficinas, debería tener ip fija o tener ip
dinámica asignada a un dominio fijo, algo que conseguiremos fácilmente
con una cuenta gratuita No-ip.com

Así, para nuestro caso tendríamos dos dominios, totana.no-ip.org y barcelona.no-ip.org y configuraríamos cada uno de los routers para que se encargase de mantener actualizados dichos hosts.

 

¿Qué tenemos que hacer en el router que haga de servidor VPN (192.168.0.254)?


1.
Configurarlo como servidor VPN con encriptación, teniendo en cuenta que como Server IP debemos asignar una ip libre, y que no sea la propia ip del router,
un error muy común que aparece en algunos tutoriales y que según la
configuración puede funcionar o no. El problema es que si utilizamos la
ip del router (192.168.0.254) como ip del servidor VPN es que la
interfaz de ppp0 no podrá añadirse al bridge que DD-WRT crea por
defecto. Así, en nuestro caso asignaremos la ip 192.168.0.253 al
servidor PPTP, como vemos en la imagen.

Mucho ojo al campo Server Ip, que no es la dirección del router. Cabe destacar también que los Clients ip(s)
no deben de solaparse con el rango de ips del servidor DHCP para evitar
problemas. Con el rango actual, 40-43, podré conectar un máximo de 4
clientes VPN.

Te pudes estar dando cabezazos para ver por qué no funciona si no
habilitas el tráficon PPTP en el firewall que trae integrado DD-WRT.

2. Debemos de crear unas redirecciones de puertos para que todo funcione. De igual modo que en el caso del Server Ip,
es posible que funcione sin hacer esto, pero será de casualidad,
simplemente porque vuestro router está abierto a todos los puertos. Lo
correcto es mappear los puertos 1792 y 1723 hacia el propio router; imprescindible si tienes configurada una DMZ.

Imprescindible notar la dirección a la que mapeamos los puertos, la dirección de nuestro propio router, y no la dirección del Server Ip (192.168.0.253)

 3. Para terminar con la configuración en el router que
hará las veces de servidor, debemos indicarle qué tiene que hacer con
los paquetes cuyo destino sea la red 192.168.3.x; deberá enviarlos a
Barcelona, y no al proveedor de internet (ISP) que es lo que haría si no
configuramos esta entrada en la tabla de enrutamiento.

 

 


¿Qué tenemos que hacer en el router que haga de cliente VPN (192.168.3.254)?

1. Configuramos los parámetros VPN

2. Configuramos una entrada en la tabla de enrutamiento para
que sepa qué hacer con los paquetes de la red 192.168.0.x y no se los
envíe al ISP.

3. Configurar el firewall para que permita el tráfico PPTP

 

Con esto, ya tenemos nuestra VPN funcionando. Para probarlo podemos
hacer ping al servidor (192.168.0.1) que está en Totana desde cualquier
equipo de Barcelona (192.168.3.x) y recibiremos respuesta. Además,
podemos comprabar las conexiones PPTP en la interfaz web de DD-WRT (en el servidor VPN) en el apartado Status -> LAN.

Fácil ¿verdad?

Linksys PAP2T o cómo llamar gratis con VoIP

El fin de semana que viene no se qué inventaré, pero este fin de semana se me ocurrió introducirme un poco en el mundo de VoIP.

Casi todos hemos oido hablar de la maravillosa idea de VoIP: Si tenemos internet, y con internet llegamos a todas las partes del mundo… ¿por qué no hacemos las llamadas telefónicas por internet? Así, podriamos llamar no sólo a nuestros amigos que también tengan internet, sino cualquier ciudad que tenga internet, y desde ese ordenador por vía telefónica a todos los teléfonos de esa ciudad (llamada local gratuita).

Con esta infraestructura todas las llamadas a fijos son gratis en todo el mundo mundial. Las llamadas a móviles no, salvo que a aquellos que tengan internet en el móvil, pero si que serían más baratas, pues en lugar de llamar desde Murcia a un móvil en Liverpool (mi hermana Rosa, por ejemplo) la llamada sería desde Liverpool a un móvil de Liverpool, mucho más barata, ya que de Murcia a Liverpool iría por internet la llamada = GRATIS.

Bueno, hecha la introducción, ya sabemos lo que es internet. Si quereis probarlo sólo tenéis que descargaros el Skype, que sirve para eso, y podreis llamar a fijos de todo el mundo gratis (tengan o no internet). Problema: siempre llamaréis desde un ordenador, no desde un teléfono de los de toda la vida, lo que provocará que al final, por gandulería, acabes llamando por tu móvil aunque sepas que te van a cobrar. Por ejemplo:

Sofía: – ¡¡¡¡¡ Tommy, llama al chino para que nos traigan unos lollitos y un aloz tlez delicias, qué tengo hambre !!!!!!

Tommy: – Vale, voy a sacar el Thikpad de la mochila, enchufar todos sus cables, arrancar el XP, ejecutar el Skype, y llamaré al chino gratis !

Sofía: – ¿Es para hoy? Tengo hambre !

Queda claro que no es una buena solución, salvo que tengas en tu casa un ordenador encendido todo el día, y aún así se hace un poco incómodo hacer una llamada con los altavoces y el micrófono del PC.

¿Solución? Existen unos adaptadores VoIP que convierten un teléfono de los de toda la vida en un teléfono capaz de hacer llamadas VoIP. No utilizan Skype, porque los señores de Skype son muy suyos y sólo permiten usar su servicio con su propio software, y no con otros aparatos, para así poder meterte publicidad por un tubo.

Sin embargo hay otros servicios que hacen lo mismo aparte de Skype. Por ejemplo VoIP Buster, que hace lo mismo, llamadas a fijos gratis y llamadas a móviles más baratas, como si estuvieses llamando desde la misma ciudad en la que está el móvil. Este proveedor sí utiliza un protocolo abierto, llamado SIP, que puede ser usado tanto con el propio software que ellos proporcionan en su página web, como con dispositivos capaces de trabajar  con el protocolo SIP.

¿Y a cuento de qué viene todo esto? Pues a cuento de que esta semana a caido en mis manos un Linksys PAP2T, un adaptador de VoIP que permite enchufar un teléfono de los de toda la vida (teléfono analógico) a internet para usarlo con VoIP. Este Linksys PAP2T es compatible con el protocolo SIP, por lo que lo único que he tenido que hacer es configurarlo para que trabaje con el proveedor VoIP Buster.

Linksys VoIP PAP2T

Como también había caido en mis manos un teléfono Panasonic inalámbrico estropeado hace algún tiempo, he visto la oportunidad perfecta para arreglarlo y empezar a hacer pruebas del VoIP este.

Procedimiento:

1. Descargar el software de VoIP Buster desde su página web,
creas una cuenta con un nombre de usuario y una contraseña y a probar
que realmente funciona desde el ordenador. Llamas al fijo de la oficina o
a la abuela de la Sofi, y con un poco de suerte si no están en la
siesta responden: Genial, funciona !!!

2. Bien, desde el PC funciona, ahora hay que hacerlo funcionar
desde un teléfono normal. Configuramos elLinksys PAP2T con los mismos
datos con los que nos hemos registrado en VoIPBuster, entrando en su
interfaz web de configuración mediante explorer o Firefox.

Proxy: sip.voipbuster.com
Register: yes

Display Name: TomasCrespo
User ID: TomasCrespo
Password: MiContraseña

3. Como nuestro Linksys PAP2T estará detrás de un router
tendremos que decirle al router que la DMZ (Zona desmilitarizada) es la
IP de nuestro Linksys PAP2T o bien hacer NAT (Redirección de puertos) de
unos cuantos puertos hacia el Linksys. Yo simplemente le he indicado a
mi router que la ip del PAP2T es la zona desmilitarizada (DMZ). Probamos
a llamar otra vez a la oficina, pero ahora desde el teléfono normal
(Panasonic inalámbrico), y funciona !!!! Salta el FAX, claro, es
domingo. Luego llamaremos a la abuela de la Sofi…

Pues esto es todo, así de fácil puedes configurarte un teléfono VoIP
partiendo de un teléfono de los de toda la vida y un adaptador Linksys
PAP2T que vale unos 40€. Con esto podrás llamar gratis a todos los
número fijos del mundo (casi todos, por si acaso) y si metes saldo en tu
cuenta VoIPBuster también podrás llamar a móviles (de España y del
extranjero) a precio realmente reducido.

Como veis no he profundizado mucho en los pasos de configuración del
Linksys PAP2T porque lo que quiero que quede claro es el procedimiento
general. Luego cada uno tendrá sus propios problemas: ¿cómo reseteo
el Linksys PAP2T a sus valores de fábrica? ¿cuál es la clave de mi
Linksys? ¿Cómo averiguo la IP de mi Linksys? ¿Cómo hago NAT con el
router XXXXX? Mi router no tiene DMZ ¿ahora qué?
, etc, etc, etc… Pero para eso están las guías de usuario, también conocidas como manual del aparato.

Pues ya sabéis, a llamar gratis (o más barato si son móviles), y si le
pirateas el WIFI al vecino ya no tienes ni que pagar la conexión a
internet, es lo que tienen las épocas de crisis, agudizan el ingenio.

Ah, casi se me olvidaba, también puedes recibir llamadas en tu teléfono,
e incluso asociar tu cuenta VoIPBuster a tu número de móvil, para que
cuando llames a alguien desde tu Linksys PAP2T le salga tu número de
móvil, pero todo eso ya es para sacar nota, el que quiera que
investigue.

 

Medir ancho de banda en Tomato

Una de las tareas a las que te enfrentas cuando montas una red wifi de
largo alcance es medir el ancho de banda que consigues entre dos puntos
(throughput).

La forma sencilla es hacer un test de velocidad en alguna página de
internet, pero eso sólo es posible si tienes internet en un extremo y un
ordenador en el otro. Además, dependemos de un tercero que es el
servicio de internet que nos ofrece el test de velocidad.

¿Cómo mido yo la velocidad de forma local? Para medir la velocidad
utilizo un pequeño programa muy útil que está disponible tanto para
windows como para linux. La gracia es que como los access point que
suelo montar tienen sistema operativo linux (dd-wrt o Tomato) puedo
ejecutar el test directamente desde el propio punto de acceso, entrando a
él por telnet o ssh.

En esta ocasión estamos hablando de un enlace WIFI G de 8KM con casi
visión directa. Tenemos dos routers Buffalo WHR-HP-G54 con el firmware
Tomato 1.21

Este firmware no trae el programilla iperf, pero lo podemos descargar ya compilado para ARM o pasárselo por ssh o lo que queramos.

Primero entramos por telnet a ambos routers. Descargamos el iperf de
internet en ambos routers y le cambiamos los permisos para que sea
ejecutable

wget http://tomascrespo.com/downloads/iperf
chmod 777 iperf 

Ahora en un router ejecutamos el iperf como servidor con el comando iperf -s

Y en el otro router ejecutamos el iperf como cliente con el comando iperf -c direccionip

 

De todos los parámetros que tiene el iperf me resultan de utilidad estos dos:

-d que hace un test de subida y otro de bajada de forma simultánea

-r Hace lo mismo pero de forma individual

Con esta solución podemos medir la velocidad en routes con firmware Tomato (también dd-wrt) de forma científica y evitando tener que depender de terceros. Los resultados de estos test son 100% fiables.

Por supuesto, también te puedes bajar la versión de iperf para windows y
hacerlo en dos ordenadores, cada uno en un extremo del enlace, pero ya
sabes, cuantos más elementos metas en el esquema menos real será la
medición.

Creo que también existe una versión con interfaz gráfica llamada Jperf.

Crear email HTML con Office 2010

En estas fechas navideñas muchas son las empresas que quieren mandar a sus clientes felicitaciones navideñas por email.

Evidentemente, lo más sencillo es hacerte una imagen con cualquier
programa de edición (tipo photoshop), crear un email y adjuntarla. La
felicitación les llegará como un adjunto, algunos lo abrirán y otros no.
Otra opción es copiar la imagen y pegarla en el email, cosa que no
recomiendo porque a veces no llega la imagen. Hay quien lo pasa a PDF y
la adjunta.

Una cosa bien hecha es hacerlo en HTML con algún editor del tipo
Dreamweaver o Microsoft Expresion Web (o si eres un friki con el
notepad) y luego insertarlo en el email que estamos haciendo en
Outlook.  ¿Cómo lo insertamos?

Creamos un nuevo email

 

A continuación clickeamos en Insertar -> Adjuntar archivo

 

Seleccionamos el archivo que hemos creado con el editor HTML
correspondiente, y muy importante desplegamos el botón insertar para
seleccionar Insertar como texto

 

NOTA: Esto es para enviar felicitaciones en plan casero. Si lo que
quieres es hacer un mailing profesional, recomiendo hacerlo con
programas del tipo SendBlaster, no con OUTLOOK

 

Black SEO

Si estás metido en el tema de desarrollo web, y por consiguiente en el del posicionamiento web (SEO), este artículo te va a interesar.

Black SEO

Primero hace un pequeño resumen histórico sobre la evolución del posicionamiento (básicamente google) y después introduce ciertas técnicas, que si no son ilegales, por lo menos son poco éticas. De ahí que el artículo se llame: Posiconamiento para gente de moral relajada. Un título muy acertado, sin duda.

Buffalo WHR-HP-G54

Hoy quería hablar un poco de uno de mis routers favoritos, el Buffalo WHR-HP-G54. En general tiene las mismas caracteríticas que todos los routers WIFI de su gama, b/g, sma, wds, vpn…, pero destacan 2 cositas por encima del resto:

1. Se le puede poner un sistema operativo Linux

2. Tiene un amplificador de señal integrado.

He trabajado con muchas marcas y modelos de routers wifi, y este es uno de los que mejor me funciona. El amplificador integrado lo hace tener un alcance excelente, y la posibilidad de instalarle un llinux le aporta una increible versatilidad.

Se le pueden poner varias distribuciones Linux, pero yo me quedo principalmente con dos:

1. DD-WRT

2. Tomato

Con DD-WRT tienes infinitas posibilidades; modos inlámbricos como AP, WDS, WDS+AP, Client Bridge, Client, Repeater, Repeater Bridge… Además de VOIP, ChilliSpot, VPN, VLANs, QoS, filtrado de paquetes LAYER-7 y IPP2.

Por otro lado está Tomato, mucho más sencilla de utilizar pero algo menos potente. En principio casi siempre uso DD-WRT, y me reservo Tomato para los enlaces punto a punto de larga distancia. Tomato hace una gestión muy buena de WDS y ACK, algo con lo que DD-WRT todavía tiene problemas. Con ACK puedes especificar la distancia del enlace, para que el router sepa cuánto tiempo debe esperar para determinar si un paquete se ha perdido o no, y así, no se quede esperando demasiado tiempo la confirmación de un paquete, o lo de por perdido antes de tiempo.

Con DD-WRT he hecho cosas como montar un firewall para dos redes independientes en un Hotel, la red de los clientes y la de los trabajadores. Hacer estadísticas de qué trabajadores usan el Windows Live Messenger, cuánto tiempo y a qué horas. Bloquear los programas P2P (emule, kazaa, bitTorrent…) en ambas redes para que no se coman el ancho de banda. Evitar intrusiones en la red de los trabajadores…

Con Tomato he hecho cosas como un enlace de 7 Km entre el centro de la ciudad (Totana) y la sierra (Sierra Espuña) obteniendo una tasa de transferencia de 6 Mbit/s completamente estable, mientras que DD-WRT sólo me daba 1 Mbit/s.

Este Buffalo WHR-HP-G54 ofrece numerosas posibilidades a un precio de risa, alrededor de 50 €. Si además le pones una antena externa puedes obtener una ganancia asombrosa. Eso sí, un consejo, que tenga el amplificador integrado no quiere decir que tengas que ponerlo a tope; ajústalo para tus necesidades, sino, te dolerá la cabeza si estás en la misma habitacón que él.

Otra de las virtudes de este router es que tiene un consumo contenido, lo que lo hace extremadamente portable, ya que te puedes hacer un cable USB para alimentarlo desde tu portatil y así poder moverte con el portátil y el router sin necesidad de enchufes, algo que yo uso bastante para medir la calidad de recepción y la tasa de transferencia en diferentes puntos.

En definitiva, que quien se dedique al tema de las redes inalámbricas debería por lo menos probar este router, ponerle un linux y a trabajar. Yo siempre llevo uno a mano por si las moscas.

Maletero lleno de Buffalo WHR-HP-G54

Ah, se me olvidaba, para los aficionados al intrusismo wifi, decir que si le ponemos un Linux como por ejemplo OpenWRT (otra distribución) podríamos instalar un airodump y un aircrack, para capturar paquetes de redes ajenas (o propias?) y averiguar su clave. Claro está que con los 4 MB de flash que trae el router no te va a quedar sitio donde capturar paquetes. Lo normal es configurar una unidad de red vía Samba para que almacene allí los paquetes capturados. Si eres un manitas también tienes la posibilidad de montarle un lector de tarjetas SD/MMC simplemente haciendo unas cuantas soldaduras.

El único defecto que le he encontrado al Buffalo es que no dispone de puertos USB. Para los que realmente les interese este tema decirles que también tienen la opción de usar el Asus WL-500g Premium, el cual no tiene amplificador integrado como el Buffalo, pero que tiene como como ventaja adicional el contar con un par de puertos USB, a los que se puede conectar por ejemplo un pendrive para aumentar su capacidad de almacenamiento (o una webcam para convertirla en una IP cam)