Renegociar VPN en Firewall Juniper SSG

Más de una vez me he encontrado en la necesidad de forzar la renegociación de una VPN que ya estaba funcionando, y desde el interfaz web no hay ninguna posibilidad de hacerlo. Si necesitas hacerlo, puedes desde el interfaz de comandos. Para ver las VPN que están levantadas:

fw-xxx(M)-> get sa active
Total active sa: 3
total configured sa: 6
HEX ID Gateway Port Algorithm SPI Life:sec kb Sta PID vsys
00000004< X.X.X.X 500 esp:3des/md5 3bX63X9d 86292 4036M A/- -1 0
00000004> X.X.X.X 500 esp:3des/md5 1cX0X515 86292 4036M A/- -1 0
00000003< X.X.X.X 500 esp:3des/md5 3bX63X9f 86397 unlim A/- -1 0
00000003> X.X.X.X 500 esp:3des/md5 99XfX681 86397 unlim A/- -1 0
00000005< X.X.X.X 500 esp:3des/md5 3bX63X9e 86397 unlim A/- -1 0
00000005> X.X.X.X 500 esp:3des/md5 dfX4Xfe8 86397 unlim A/- -1 0

Y después, para tirar una de ellas y forzar a que vuelva a negociar para levantarse:

fw-xxx(M)-> clear sa 00000004

Montaje NFS desde Emtec Q800

QNAP TS-210

Hace unos días he comprado un NAS, el QNAP TS-210, y por alguna extraña razón, el acceso mediante samba desde mi reproductor multimedia (un Emtec Q800) no iba nada fino. Según las pruebas que he estado haciendo, el acceso Samba desde otros dispositivos al QNAP funciona perfectamente, y el acceso Samba desde el Emtec a otros servidores también funciona correctamente, pero entre ellos no iba nada fino y los problemas eran muy extraños. Los ficheros .avi y las fotos, se reproducían correctamente, pero ni los .mpg ni las imagenes de DVD se reproducían en absoluto, aparecía un “Fatal error” seguido de un “Buffering” y como resultado, no se reproducía nada de nada.

Emtec Q800

Después de darle muchas vueltas al tema de Samba y no encontrar ninguna solución, decidí buscar otro camino para conseguir el mismo resultado. El QNAP exporta contenidos por unos cuantos protocolos, y en concreto me interesé por NFS. El Emtec es un pequeño Linux (BusyBox) que permite acceso por telnet, y me permitía hacer montajes NFS manuales sin mayor complicación. Pero claro, la imagen del sistema está en almacenamiento flash de solo lectura y no permite hacer ningún cambio, hasta que encontré una forma de hacerlo.

En /usr/local/etc hay varios ficheros con permiso de lectura/escritura cuyos cambios son permanentes cuando se apaga el dispositivo. Así que, lo primero que intenté fue añadir el comando para montar el volumen NFS en /usr/local/etc/rcS, de esta forma:

mount -t nfs 192.168.1.137:/share/HDA_DATA/Multimedia /tmp/hdd/volumes/HDD1/nfs

Pero no funcionaba, me aparecía este error:


mount: 192.168.1.137:/share/HDA_DATA/Multimedia failed, reason given by server: Permission denied
mount: nfsmount failed: Bad file descriptor
mount: Mounting 192.168.1.137:/share/HDA_DATA/Multimedia on /tmp/nfs failed: Bad file descriptor

Y problema de permisos de servidor no era, porque el montaje manual funciona correctamente desde esta misma máquina. Comprobé mediante trazas que la red estaba operativa y había conectividad con el servidor antes de ejecutar el comando de montaje, y también que el punto de montaje estaba disponible, pero el error continuaba.

Temía que había algo que todavía no estaba bien montado, o terminado de cargar correctamente y que debía retrasar el montaje del volumen un poco más hasta que la máquina terminara de arrancar. Así que cambié la línea del rcS por esta otra:


/usr/local/etc/mount_nfs.sh &

Y el contenido de ese fichero contiene lo siguiente:


#!/bin/sh
sleep 30
mount -t nfs 192.168.1.137:/share/HDA_DATA/Multimedia /tmp/hdd/volumes/HDD1/nfs -o ro,vers=3

De esta forma, la máquina termina de arrancar y cargar lo que le faltara y el volumen se monta un tiempo después de arrancar.

Problema solucionado!!!

PD: Por cierto, aunque probé a actualizar el firmware del Emtec Q800 hasta la última 906, esta solución solo me ha funcionado con la 751 (tuve que cargar versiones más antiguas) porque el contenido de /usr/local/etc/rcS parece no ejecutarse en las versiones posteriores.

Novedades de Solaris 11

Hoy he asistido a un seminario sobre las novedades de Solaris 11 en Core Networks, y esto es un resumen de lo que nos han contado:

  • IPS (Image Packaging System): se incluye por fin un sistema de gestión de paquetes al estilo Linux (dpkg o rpm), que permite instalar paquetes directamente desde repositorios oficiales o mirrors, y resuelve dependencias, así que se acabó la instalación de parches para actualizar el sistema. Como curiosidad, los paquetes no son tal en sentido estricto porque no están empaquetados en un solo fichero, sino que cuando instalas un paquete se bajan todos los ficheros de forma individual del repositorio correspondiente.
    Está integrado con el boot environment para poder actualizar el sistema y poder hacer una marcha atrás en caso de necesidad, aunque no conozco los detalles de cómo se hace.
  • Instalación: cambia la filosofía, y a partir de ahora se instalará lo mínimo y a partir de ahí, cada uno podrá instalar de los repositorios todo lo que necesite en cada equipo. Cambia el JumpStart a un sistema llamado Automated Installation, con el mismo objetivo de poder hacer instalaciones desatendidas.
  • Configuración del sistema: Se acabó el editar ficheros de configuración, (casi) todos los cambios de configuración se tendrán que hacer a base de comandos, basado en SMF. Ejemplos: ya no vale cambiar el /etc/resolv.conf para cambiar los DNS, ya no vale cambiar el /etc/hosts para cambiar la IP de un interfaz, …
  • Zonas: mejora la gestión de las VNIC en cada zona, se puede ajustar por ejemplo el ancho de banda asociado a cada una. Se pueden crear redes privadas entre zonas. Las zonas son totalmente independientes de la zona global. Mejora de la monitorización de recursos en las zonas.
  • Red: Todos los interfaces de red tendrán el mismo nombre independientemente del fabricante: net0, net1, … (nos podemos olvidar de los e1000g0, bnx0, …). IP multipath mejorado y opciones para hacer balanceo de carga de tráfico entrante (por ejemplo a distintas zonas). Comando para la gestión de configuración a nivel IP: ipadm (olvidarse de ifconfig). Comando para gestión a nivel de enlace: dladm. Para estadísticas: dlstats.
  • Almacenamiento: ZFS obligatorio en partición /. Se puede activar deduplicación en ZFS. Posibilidad de cifrado de datasets. Posibilidad de ver los cambios en un snapshot ZFS.
  • Seguridad: Por defecto, se activan los servicios de red imprescindibles, no como hasta ahora. Por defecto, no se puede hacer login como root, se usa sudo y no te puedes hacer root ni sabiendo su contraseña, sino que debes tener el rol de admin configurado.
  • Nivel usuario: se han actualizado las aplicaciones utilidades GNU a las versiones actuales, por fin. Solo disponible como entorno gráfico GNOME (adiós a CDE). Bash como shell por defecto.
  • Migración de Solaris 10 a 11: No hay actualización posible de Solaris 10 a Solaris 11. Hay que hacer una migración tradicional, o migrar los actuales Solaris 10 como zonas de una máquina con Solaris 11, similar a hacer un P2V en otros entornos.

Configuración de red en ILOM

El ILOM es el Integrated Lights Out Manager que existe en las antiguas máquinas de SUN, ahora propiedad de Oracle. Es un pequeño sistema operativo (Linux) integrado en el hardware de Sun/Oracle que te permite configurar/monitorizar el propio hardware independientemente del sistema operativo y del estado en que se encuentre el mismo.

Es decir, que independientemente del sistema operativo que instales en un servidor, tienes un pequeño gestor de recursos que es accesible mediante dos puertos externos:

  • Net Management: Puerto ethernet para acceder a la ILOM
  • Ser Management: Puerto serie para acceder a la ILOM

Puertos de gestión de la ILOM

Mediante uno de estos dos puertos puedes acceder a la ILOM mediante un interfaz serie, SSH, web, … Y gracias a la ILOM podrás hacer algunas de las siguientes tareas:

  • Abrir una consola remota desde un navegador web, para obtener la misma salida que si pincharas un monitor/teclado/ratón
  • Ver el estado del hardware
  • Ver el estado de los leds
  • Arrancar/Parar/Reiniciar el servidor

Hay varios métodos para configurar la red de la ILOM y acceder de forma sencilla de forma remota utilizando el interfaz de Net Management, y esta es una de ellas:

  1. Conectar un cable serie con el adaptador serie/ethernet que viene con el equipo al puerto Ser Management
  2. Conectar el PC mediante un HyperTerminal o similar con la siguiente configuración: 8 bits, sin paridad, 1 bit parada, 9600 baudios, control de flujo deshabilitado
  3. Hacer login en la ILOM: usuario por defecto root y contraseña por defecto changeme
  4. Acceder a la configuración de red:
    cd /SP/network
  5. Establecer los parámetros de red:

    set pendingipaddress=xxx.xxx.xx.xx
    set pendingipnetmask=yyy.yyy.yyy.y
    set pendingipgateway=zzz.zzz.zz.zzz
    set commitpending=true

Después de esto, podrás utilizar un navegador web para conectarte mediante el puerto Net management a la IP que configuraste en el paso anterior:

Interfaz web de la ILOM

Cluster, alta disponibilidad en Linux

Linux permite la creación de sistemas en cluster formados por al menos dos máquinas, en el que se pueden crear servicios en alta disponibilidad que pueden superar situaciones en las que una de las máquinas sufra un problema de pérdida de servicio. De esta forma, aunque una de las máquinas deje de estar disponible (por fallo hardware o software), el servicio puede continuar estando disponible desde la otra máquina sin que haya apenas corte en el servicio ofrecido, proporcionando alta disponibilidad de aplicaciones.

Para implementar este tipo de soluciones se puede hacer uso de hearbeat, que es un software que permite enviar “pulsos” entre ambos servidores para detectar cuando uno de ellos tiene algún problema, y de esta forma poder mover los servicios configurados al otro nodo. También, por supuesto, se pueden programar diferentes chequeos para mover servicios en caso de que se detecte algún fallo de software, con mon, monit u otro similar.

Por tanto, la idea básica de heartbeat es que se definen uno o varios servicios para los que se desea obtener alta disponibilidad (apache, mysql, …) entre varios servidores en modos activo/pasivo o activo/activo, y heartbeat se encargará de hacer que estos servicios estén siempre ejecutándose mientras uno de los dos nodos esté funcionando correctamente.

Prerrequisitos

Alguno de los prerrequisitos para montar un sistema de clúster con heartbeat son los siguientes:

  • Un interfaz de red para ofrecer el servicio
  • Un interfaz de red para los pulsos heartbeat. Habitualmente un cable cruzado entre ambos servidores
  • Conexión por cable serie cruzado entre servidores, por si hay algún error con la conexión ethernet. Si las máquinas no tienen puerto serie, se puede utilizar un conversor USB-Serie que funcionan sin problema.

Instalación

La instalación es tan sencilla como lo siguiente:

# apt-get install heartbeat

Configuración

Los ficheros de configuración se encuentran en /etc/ha.d. Al menos, hay que configurar tres ficheros. Por un lado, una clave secreta y compartida solamente en estos dos servidores, por ejemplo:


maquinaA-dedi:/etc/ha.d# cat authkeys
auth 2
#1 crc
2 sha1 uhmuHsiK_52,diWJiwLm
#3 md5 Hello!

Por otro lado, el fichero de configuración general de heartbeat (ha.cf). En este fichero se especifican las opciones de configuración generales que establecen los interfaces por los que se envían los pulsos, los ficheros de log, los nodos que forman parte del cluster,… por ejemplo:


debugfile /var/log/ha-debug
logfile /var/log/ha-log
serial /dev/ttyS0 # Linux
bcast eth1 eth2 # Linux
auto_failback off
node maquinaA-dedi.acens.net maquinaB-dedi.acens.net

Y por último, en el fichero haresources se especifican los servicios que forman parte del cluster y que estarán en alta disponibilidad, por ejemplo:


maquinaA-dedi.acens.net IPaddr::X.X.X.X/29/eth0 drbddisk::r0 \ Filesystem::/dev/drbd0::/shared::ext3 drbdlinks mysql apache2

En el ejemplo anterior, se especifica que uno de los servicios del cluster es IPaddr::X.X.X.X/29/eth0, eso significa que en el nodo activo del cluster se configurará la dirección IP X.X.X.X. Esta es la IP de servicio y es la que se suele asociar a los servicios en alta disponibilidad que se presten en la máquina.

Además de la dirección IP, también se especifica que se va a utilizar el dispositivo drbd r0, que configuramos anteriormente, en el nodo activo, y por tanto será montado automáticamente en el mismo por heartbeat.

Por último, aparecen los servicios drbdlinks, mysql y apache2. Esto significa que cuando un nodo se convierte en primario, se ejecutará lo siguiente de forma automática:


# /etc/init.d/drbdlinks start
# /etc/init.d/mysql start
# /etc/init.d/apache2 start

NOTA: Es importante tener en cuenta que los servicios gestionados por heartbeat (drbdlinks, mysql y apache2 en este ejemplo) deben ser deshabilitados de los niveles de ejecución predeterminados para que no sean arrancados al entrar en ellos, porque será heartbeat el que se encargue de pararlos o arrancarlos cuando corresponda. Para ello, en Debian habría que hacer lo siguiente:


# update-rc.d –f drbdlinks remove
# update-rc.d –f apache2 remove
# update-rc.d –f mysql remove

El servicio drbd si debe estar activo en los niveles de ejecución predeterminados, porque se encarga de cargar el módulo de kernel correspondiente y de disponer los metadispositivos disponibles, pero no de poner activo en el nodo primario, de esto último se encargará heartbeat.

DRBD: RAID1 en red entre varios equipos

DRBD es un software que permite hacer réplica de los datos de una partición entre varias máquinas. Es decir, que si tengo una partición del mismo tamaño en dos máquinas, con DRBD puedo hacer una réplica del contenido de esta partición de forma automática, para que en el caso de que una máquina falle, tenga todo el contenido de esa partición accesible desde la otra máquina. Es como un RAID1, pero entre distintas máquinas.

Habitualmente, esta partición de la que se hace mirror, solamente está montada en una de las máquinas porque se utiliza un sistema de ficheros tradicional: ext3, raiserfs, xfs, … De esta forma, solo una de las máquinas puede acceder a los datos, la que tiene la partición montada. Sirve para montar un sistema de cluster en modo activo/pasivo, y que una de las máquinas tenga todos los datos hasta que falle, y en ese momento se puede acceder desde la otra máquina.

Pero también se puede configurar para que ambas máquinas tengan acceso a la partición en espejo, y en este caso habría que montar un sistema de ficheros para acceso en clúster, como GFS o OCFS. De esta forma podemos montar un clúster activo/activo donde ambas máquinas tienen acceso simultáneo al recurso de datos.

Instalación

Para la versión 0.7 (la que había en Debian Lenny), hay que hacer lo siguiente:

Es necesario instalar las drbd-utils:

# apt-get install drbd0.7-utils

Y el módulo de kernel:

# apt-get install drbd0.7-module-source
# apt-get install dpatch
# cd /usr/src
# tar -zxf drbd0.7.tar.gz
# cd /usr/src/modules/drbd
# module-assistant prepare
# module-assistant automatic-install drbd0.7-module-source
(Navigate the module package creation procedure as logically as
possible; details for this procedure are not provided.)
# cd /usr/src
# dpkg -i drbd0.7-module-2.4.27-2-7_0.7.10-3+2.4.27-8_i386.deb

Configuración

Configurar el propio servicio en ambas máquinas (/etc/drbd.conf), por ejemplo así:

# Definicion recurso
resource r0 {
protocol C;
disk {
on-io-error panic;
}
syncer {
rate 50M; # Note: 'M' is MegaBytes, not MegaBits
}

on maquinaA.dominio.tld {
address 192.168.20.1:7789;
device /dev/drbd0;
disk /dev/sda8;
meta-disk internal;
}
on maquinaB.dominio.tld {
address 192.168.20.2:7789;
device /dev/drbd0;
disk /dev/sda8;
meta-disk internal;
}
}

Después, arrancar el servicio en ambos nodos:

# /etc/init.d/drbd start

Ejecutar lo siguiente en el nodo que queremos que sea el primario:

# drbdsetup /dev/drbd0 primary --do-what-I-say

Y cuando termine lo anterior (solo en el primario):

# drbdadm primary r0
# mkfs.ext3 /dev/drbd0

Después, ya se puede configurar el metadispositivo en el /etc/fstab de ambas máquinas:

/dev/drbd0 /shared ext3 rw,noauto 0 2

Y después, probar a montar la unidad en el primario.

# mount /shared

Petición para liberar Cisco IOS

Todo el que haya estado estudiando sobre Cisco alguna vez, habrá deseado poder probar toda la teoría disponible que se ha estado estudiando, sin necesidad de gastarse miles de euros en varios switches, routers, u otros dispositivos de Cisco.

Esto sería posible si Cisco liberara el IOS, para que cualquiera pudiera emular el comportamiento de sus dispositivos. De esta forma, la gente estaría más preparada, podría poner en práctica todos los conocimientos teóricos, podría probar configuraciones antes de aplicarlas en entornos reales, … En fin, un sin fin de ventajas si Cisco decidiera liberar su software.

Bien, pues en este blog se están recogiendo firmas para apoyar la iniciativa. Sería muy importante para cualquiera que necesite aprender tecnologías de Cisco, o prepararse para sus certificaciones.

Cortar un vídeo

Si necesitas cortas un trozo de un vídeo, ya sea un .avi, .mpg o lo que sea puedes usar mencoder. Es tan sencillo como esto:

$ mencoder -of mpeg -ovc copy -oac copy -idx -ss 1000 -endpos 500 -o fichero_destino.mpg fichero_origen.mpg

Es decir, que copia y vídeo y el audio al formato que le especifiques (-of mpeg, avi, rawvideo), empezando en el segundo 1000 (-ss) y copiando los siguientes 500 segundos (-endpos). También reconstruye el índice del fichero destino (-idx).

Bonding ethernet en GNU/Linux

Bonding ethernet se utiliza para combinar varios interfaces de red en uno solo, para ser usados como redundancia o para aumentar el ancho de banda disponible.

Para usar bonding ethernet en linux, lo primero que hay que hacer es tener soporte en el kernel y cargar el módulo correspondiente si no está cargado, por ejemplo:

# modprobe bonding mode=balance-alb miimon=100
# modprobe e100

También hay que tener instalado ifenslave, que en debian es tan sencillo como:

# apt-get install ifenslave

Y después, configurar el interfaz de bonding y añadir los interfaces físicos que necesitemos:

# ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up
# ifenslave bond0 eth0
# ifenslave bond0 eth1

Hay que tener en cuenta que al cargar el módulo hemos seleccionado el tipo de bonding, que debe ser uno de los siguientes:

balance-rr
Se reparte el tráfico en modo Robin Round, un paquete para cada interfaz contínuamente
active-backup
Solo un interfaz está activo, y se produce el cambio de activo al otro interfaz cuando el primero falla
balance-xor
Balanceo de carga entre interfaces y tolerancia a fallos, en base a una política de hash
802.3ad
Se balancea la carga entre grupos de interfaces, que son creados en base a sus configuración de velocidad y duplex
balance-tlb
El tráfico de salida se reparte en base a la “carga” de cada interfaz, el tráfico de entrada se recibe en uno de los interfaces
balance-alb
Como el anterior pero también reparte el tráfico de entrada

Al cargar el módulo también se pasa el parámetro miimon, que especifica cada cuantos milisegundos se comprueba el estado de cada uno de los interfaces que pertenece al bonding.

Para comprobar el estado de los interfaces de bonding, se debe mirar los ficheros contenidos en el directorio, por ejemplo:

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: 2.6.1 (October 29, 2004)
Bonding Mode: load balancing (round-robin)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 1000
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Link Failure Count: 1

Slave Interface: eth0
MII Status: up
Link Failure Count: 1

Configurar puerto de switch Cisco

Algunos comandos útiles para configurar determinados parámetros de un puerto de switch Catalyst de Cisco:

  • Lo primero, para ver el estado de los puertos:
             SW# show interfaces status
           
  • Configurar velocidad:
             SW(config)# interface fastethernet 0/2
             SW(config-if)# duplex full
             SW(config-if)# speed 100
           
  • Habilitar puerto:
             SW(config)# interface fastethernet 0/2
             SW(config-if)# no shutdown
           
  • Asignar un puerto a una VLAN:
             SW(config)# interface fastethernet 0/2
             SW(config-if)# switchport access vlan 1
           
  • Limitar número de direcciones MAC que puede aprender en un puerto:
             SW(config)# interface fastethernet 0/2
             SW(config-if)# switchport port-security maximum 1