Posts in Category: Linux

Una rubia, un archivo oculto y unos autos robados.

Como parte de otra tarea asignada en la escuela me tope con que nos dejaron un pequeño reto forense, buscando un poco es un reto que había sido publicado el 27 de agosto de 2013 en la pagina: http://www.hackplayers.com/2013/08/reto-18-un-pendrive-y-el-caso-de-los.html y su respectiva solución de igual manera se puede encontrar en el mismo sitio: http://www.hackplayers.com/2013/08/solucion-al-reto-18-un-pendrive-y-el.html.

Esta es la forma en que fue realizado este reto a manera de titulo personal y para conocimiento de los compañeros de la clase. Saludos a los miembros de la pagina Hack Players.

Agregar la evidencia

De manera inicial tenemos el archivo imagen coches.E01, para poder abrirlo utilizaremos un software gratis (no libre) para estos casos de la informática forense llamado FTK Imager que lo podemos obtener desde el siguiente enlace: http://accessdata.com/product-download/digital-forensics.

Ya con el programa instalado lo ejecutamos y abrimos el archivo de evidencia.

Coches-Analisis-1

Agregamos el archivo de la imagen como fuente de la evidencia.

Coches-Analisis-2

Seleccionamos el archivo.

Coches-Analisis-4

Importamos el archivo.

Coches-Analisis-5

Imagen de evidencia agregada.

Coches-Analisis-7

Es la imagen de una memoria USB, los archivos de interés son la imagen de una rubia y tres capturas de red.

Coches-Analisis-8

Vamos a validar la imagen de la chica rubia.

Coches-Analisis-9

Visualizamos la imagen en formato hexadecimal.

Coches-Analisis-10

Análisis de la imagen.

La imagen inicia con los siguientes datos hexadecimales: 89504E470D0A1A0A. Esto coincide con que es una imagen PNG si buscamos estos datos en la pagina de: http://www.garykessler.net/library/file_sigs.html.

Hay algo llamado autopsy.jpeg dentro del código hexadecimal y esto es lo raro, un poco arriba de este nombre de autopsy viene el final de la imagen de la rubia que finaliza con estos datos hexadecimales: 49454E44AE426082 que es el final de una imagen PNG.

Por lo tanto ¿que es todo ese código hexadecimal que sigue? el cual inicia con los siguientes datos: 504B0304 (PK..), si buscamos otra vez en los “magic numbers” vemos que es un archivo del tipo ZIP y lo corroboramos con el final del archivo que coincide con los datos de un archivo de este tipo, los datos al final del archivo son: 504B0506 (PK..)

Entonces hay un archivo Zip escondiéndose en la rubia.

Vamos a ver un poco más de cerca, si detectamos con el comando file vemos que nos dice que es una imagen pero ya vimos que no es así.

[gabriel@daneel MISTI-FI]$ file rubiaca.png 
rubiaca.png: PNG image data, 240 x 400, 8-bit/color RGB, non-interlaced

Si intentamos copiar el archivo y le ponemos la extensión zip.

[gabriel@daneel MISTI-FI]$ cp rubiaca.png rubiaca.zip

Lo copiamos con cp para no borrar el archivo original.

Vamos a ver si detecta el archivo zip tratando de descomprimir la imagen.

[gabriel@daneel MISTI-FI]$ unzip -v rubiaca.zip
Archive:  rubiaca.zip
warning [rubiaca.zip]:  75877 extra bytes at beginning or within zipfile
  (attempting to process anyway)
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
   27537  Unk:099   27330   1% 08-13-2013 02:52 00000000  autopsy.jpeg
--------          -------  ---                            -------
   27537            27330   1%                            1 file

No lo hace pero menciona que tiene 75877 bytes extras al inicio del archivo, si, la rubia son esos bytes extras y tiene comprimida una imagen llamada autopsy.jpeg.

Si no fuera un archivo zip nos hubiera mandado algo así de ser una imagen normal.

[gabriel@daneel 041614536]$ unzip -v img_20160523_211144997.jpg 
Archive:  img_20160523_211144997.jpg
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of img_20160523_211144997.jpg or
        img_20160523_211144997.jpg.zip, and cannot find img_20160523_211144997.jpg.ZIP, period.

Bueno entonces vamos a ver como sacar ese archivo comprimido. Si lo queremos extraer ya con una herramienta gráfica lo vemos más claro, hay una imagen ahí dentro.

Ark-1

Y al querer extraer el archivo vemos que tiene contraseña.

Ark-2

Ok, o intentamos adivinar u obtener mediante un ataque de diccionario o fuerza bruta la contraseña o vamos a ver qué más hay en la memoria para detectar esa contraseña.

Los otros archivos relevantes son tres capturas de red.

Capturas de red

Vamos a ver la primera captura.

Es poca información pero lo que se ve más que nada es tráfico web, un poco de google, algo de búsqueda con las palabras coches de lujo y son imágenes principalmente.

Wireshark-1-Coches

Vamos a exportarlas.

Wireshark-2-Coches

Efectivamente son imágenes de un sitio web de coches de lujo.

Wireshark-3-Coches

Ahora vamos con la segunda captura.

Aquí no hay imágenes más bien en una captura de tráfico de correo web.

Wireshark-4-Coches

Vamos a ver un poco más de cerca el flujo de la conversación.

Wireshark-5-Coches

Es la más interesante de las tres capturas al parecer.

Finalmente vamos con la tercera captura.

También es tráfico web, búsqueda de google podría decir que es.

Wireshark-6-Coches

De igual manera son imágenes de un sitio web de noticias varias.

Wireshark-7-Coches

Regresamos con la segunda captura y esos datos del correo electrónico.

220 mx.google.com ESMTP fc9si125401wib.43 - gsmtp
EHLO thosi
250-mx.google.com at your service, [79.109.135.8]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 CHUNKING
MAIL FROM:<YURI@gmail.com> SIZE=411
250 2.1.0 OK fc9si125401wib.43 - gsmtp
RCPT TO:<carlo@gmail.com>
250 2.1.5 OK fc9si125401wib.43 - gsmtp
DATA
354  Go ahead fc9si125401wib.43 - gsmtp
Received: from localhost (localhost [IPv6:::1])
.by thosi (Postfix) with SMTP id A6D7C1860221
.for <carlo@gmail.com>; Tue, 13 Aug 2013 02:08:52 +0200 (CEST)
subject: COCHES
Message-Id: <20130813000911.A6D7C1860221@thosi>
Date: Tue, 13 Aug 2013 02:08:52 +0200 (CEST)
From: YURI@gmail.com
 
Que pasa tio?
Te mando nuestro peque..o secreto "KNIFELONG1234"
bye
ya me pondre en contacto
 
un saludo yuri
.
250 2.0.0 OK 1376352663 fc9si125401wib.43 - gsmtp
QUIT
221 2.0.0 closing connection fc9si125401wib.43 - gsmtp

Un pequeño secreto, al menos tenemos una palabra, volvemos a colocarla en el archivo zip para ver si es la contraseña y no parece ser la contraseña pero debe ser uno de esos caracteres.

De entrada no funciona de la manera fácil con solo crear una copia y ponerle como archivo Zip, y colocar la contraseña que debe ser esa pero ahorita vemos esa parte, y al no ser un archivo Zip como tal completo porque tiene más datos de los que debería ni siquiera podemos cargar que tipo de cifrado tiene el archivo.

[gabriel@daneel run]$ ./john --incremental /home/gabriel/Documents/MISTI-FI/rubiaca.zip
No password hashes loaded (see FAQ)

Necesitamos quitarle esos 75877 bytes al inicio que son la rubia y quedarnos con el puro archivo Zip sin alterar la estructura del archivo binario, y es ahí donde está el truco.

Sabemos la cantidad de bytes por que el comando unzip nos ayudó a averiguarlo.

00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 00 f0 00 00 01 90  08 02 00 00 00 1f b4 7a  |...............z|
00000020  2b 00 00 00 09 70 48 59  73 00 00 0b 13 00 00 0b  |+....pHYs.......|
00000030  13 01 00 9a 9c 18 00 00  00 07 74 49 4d 45 07 dd  |..........tIME..|
00000040  08 0d 01 0e 1f b2 27 7c  01 00 00 00 41 74 45 58  |......'|....AtEX|
00000050  74 43 6f 6d 6d 65 6e 74  00 43 52 45 41 54 4f 52  |tComment.CREATOR|
00000060  3a 20 67 64 2d 6a 70 65  67 20 76 31 2e 30 20 28  |: gd-jpeg v1.0 (|
00000070  75 73 69 6e 67 20 49 4a  47 20 4a 50 45 47 20 76  |using IJG JPEG v|
00000080  36 32 29 2c 20 71 75 61  6c 69 74 79 20 3d 20 39  |62), quality = 9|
00000090  30 0a b0 45 58 93 00 00  20 00 49 44 41 54 78 da  |0..EX... .IDATx.|

Esos son los primeros datos del archivo y necesitamos quitar todos esos datos sin alterar la estructura del archivo binario.

Este es el final de esos datos extras de la rubia.

000127d0  30 9a 01 05 20 70 e4 00  e2 fd fb f7 bf fc f2 cb  |0... p..........|
000127e0  10 c2 7a 0d 1d 57 9d 37  f6 ae aa 9c 08 09 51 a0  |..z..W.7......Q.|
000127f0  e8 98 e0 6c b7 63 28 04  be 3b 33 19 59 5a 2c 82  |...l.c(..;3.YZ,.|
00012800  13 a4 21 22 da cb a1 d2  2b 31 c6 84 e3 43 54 85  |..!"....+1...CT.|
00012810  4c 81 0d fb d1 92 01 ee  ce fe 73 16 27 c1 8e d7  |L.........s.'...|
00012820  e7 0e 4f 69 5c 65 d8 23  31 b4 c4 87 3f de dd ce  |..Oi\e.#1...?...|
00012830  1c cb 3c d2 72 aa 5c 45  20 6c 9f 90 e2 61 a6 7e  |..<.r.\E l...a.~|
00012840  01 82 8c 39 78 ed 51 9c  88 24 01 d6 b7 1b 52 ff  |...9x.Q..$....R.|
00012850  03 6b 51 fd ae 53 9d bf  97 00 00 00 00 49 45 4e  |.kQ..S.......IEN|
00012860  44 ae 42 60 82 50 4b 03  04 33 03 01 00 63 00 8a  |D.B`.PK..3...c..|

Vamos a ayudarnos con el comando dd para quitar estos bytes del inicio y generar un nuevo archivo Zip sin estos datos extra.

[gabriel@daneel MISTI-FI]$ dd bs=1 skip=75877 if=rubiaca.png of=rubiaca.zip
27486+0 records in
27486+0 records out
27486 bytes (27 kB) copied, 0.0346739 s, 793 kB/s

Volvemos a verificar con unzip y vemos que ya no marca en el archivo nuevo esos bytes extra.

[gabriel@daneel MISTI-FI]$ unzip -v rubiaca.zip 
Archive:  rubiaca.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
   27537  Unk:099   27330   1% 08-13-2013 02:52 00000000  autopsy.jpeg
--------          -------  ---                            -------
   27537            27330   1%                            1 file

Ahora si volvemos con la parte de la contraseña.

Si intentamos con John The Ripper, ya nos reconoce como válido el archivo y puede saber el cifrado que tiene el archivo.

[gabriel@daneel run]$ ./john --incremental /home/gabriel/Documents/MISTI-FI/rubiaca.john 
Loaded 1 password hash (ZIP, WinZip [PBKDF2-SHA1 8x SSE2])

Vamos a realizar un pequeño diccionario con las combinaciones que encontramos en la captura de red del correo.

K
KN
KNI
KNIF
KNIFE
KNIFEL
KNIFELO
KNIFELON
KNIFELONG
KNIFELONG1
KNIFELONG12
KNIFELONG123
KNIFELONG1234

La manera fácil, si no es una de estas va a estar un tanto más complicado.

[gabriel@daneel run]$ ./john --wordlist=/home/gabriel/Documents/MISTI-FI/Clave-Rubia /home/gabriel/Documents/MISTI-FI/rubiaca.john 
Loaded 1 password hash (ZIP, WinZip [PBKDF2-SHA1 8x SSE2])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
KNIFELONG        (rubiaca.zip)
1g 0:00:00:00 DONE (2016-06-03 08:37) 9.090g/s 118.1p/s 118.1c/s 118.1C/s K..KNIFELONG1234
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Entonces la contraseña es: KNIFELONG

Ahora sí vamos a abrir ese archivo.

[gabriel@daneel MISTI-FI]$ unzip -P KNIFELONG rubiaca.zip 
Archive:  rubiaca.zip
   skipping: autopsy.jpeg            need PK compat. v5.1 (can do v4.6)

Parece que no lo descomprime porque el archivo fue creado con otra versión de Zip, más concreto con PKZip, tambien lo probe con el formato Zip de Windows y no es posible.

Vamos a intentarlo con 7z mejor.

[gabriel@daneel MISTI-FI]$ 7za e -pKNIFELONG rubiaca.zip 
 
7-Zip (a) [64] 15.09 beta : Copyright (c) 1999-2015 Igor Pavlov : 2015-10-16
p7zip Version 15.09 beta (locale=en_US.utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i7-3540M CPU @ 3.00GHz (306A9),ASM,AES-NI)
 
Scanning the drive for archives:
1 file, 27486 bytes (27 KiB)
 
Extracting archive: rubiaca.zip
--         
Path = rubiaca.zip
Type = zip
Physical Size = 27486
 
Everything is Ok
 
Size:       27537
Compressed: 27486

Listo lo hemos logrado descomprimir, es una imagen JPEG llamada autopsy.

Imagen-Coches-Autopsy-1

Unos coches y varias piezas de coches.

Los metadatos arrojan un poco más acerca de la imagen, como que fue tomada en agosto del 2013, que es de un tamaño de 400 x 274 píxeles e incluso datos que parecen ser de coordenadas geográficas.

Imagen-Coches-Autopsy-2

Conclusiones

Lo más complicado fue en mi caso la forma de quitarle los datos de la imagen al archivo, habíamos tomado en otra clase un poco de conocimiento acerca de editores hexadecimales y fue por eso que me dirigí en esa forma para quitar el extra de datos y la referencia de los números mágicos fue lo más importante para identificar que había algo más que una rubia guapa. El dato fue encontrar una manera rápida en Linux de hacer lo de estos datos y ya que el comando Zip es concreto en mencionar los datos extra se tiene el valor importante, un dato más o menos borrado y se pierde la integridad del archivo.

Referencias

http://birdchan.com/home/2013/12/30/need-pk-compat-v4-5-can-do-v2-1/
http://birdchan.com/home/2013/12/30/need-pk-compat-v4-5-can-do-v2-1/
http://unix.stackexchange.com/questions/6852/best-way-to-remove-bytes-from-the-start-of-a-file
http://vi.stackexchange.com/questions/343/how-to-edit-binary-files-with-vim
http://superuser.com/questions/380717/how-to-output-file-from-the-specified-offset-but-not-dd-bs-1-skip-n
http://www.garykessler.net/library/file_sigs.html

Un acercamiento a OpenDLP – I

Como parte de una tarea en la escuela me tope con OpenDLP que es una herramienta bastante potente en las cuestiones de prevención de perdida de datos, comparada con otras herramientas de software propietario OpenDLP destaca y aquí presentare brevemente desde su instalación hasta un par de ejemplos de lo potente que puede ser esta herramienta. Tiene la estructura del trabajo que presente y poco a poco lo iremos ampliando.

Se utilizo como marco de referencia principalmente estos dos artículos de los siguientes blogs:

Fuente del contenido: Security Art Work
http://www.securityartwork.es/2015/07/10/opendlp-para-pentesters/
Autor: Roberto Amado.

Fuente del contenido: INSEGUROS, seguridad y sistemas.
http://kinomakino.blogspot.mx/2015/03/opendlp-data-loss-prevention-open.html
Autor: Kino Makino.

Objetivo.

Realizar una prueba donde mediante un sistema de DLP se analice cierta información de archivos donde se busque mediante expresiones regulares información sensible como pueden ser datos bancarios o información clave de algún sistema de información.

Introducción.

¿Que es DLP?, la traducción de “Data Loss Prevention” es prevención de perdida de datos pero que datos queremos evitar perder y de que forma podemos detectar que los estamos perdiendo. Tres vectores principalmente se manejan para este tema y son: analizar, proteger e informar. Todo esto se conforma en estrategias en reglas de negocio catalogando la información para que se pueda asegurar en la medida de lo posible que los usuarios en un entorno corporativo o gubernamental puedan extraer y sobre todo enviar información sensible o critica fuera de la red a la que pertenece dicha información.

Normalmente se controla esto con análisis de contenido reportando incidencias de patrones de cierta información reportando al administrador posibles fugas de información o evitando que información que ha sido clasificada no pueda salir de la red gracias a que los sistemas que pueden realizar esto como podrían ser recursos compartidos, dispositivos extraíbles de almacenamiento y correo electrónico están configurados apropiadamente para bloquear cualquier tipo de información que pueda ser catalogada como sensible.

La cuestión de los datos de privacidad que se esta endureciendo cada vez más por cuestiones de normas y leyes, así como del incremento en los ataques informáticos hace que la forma de detectar los datos sensibles en una organización sea prioritario y ya que mucho del robo de información viene del personal interno hace que este tipo de herramientas tengan más énfasis en la red de una organización ya sea gubernamental o privada.

Normalmente los productos existentes en el mercado hacen énfasis en analizar el contenido de los archivos y es aquí donde por ejemplo desde el punto de vista bancario se hace mención a resguardar que la información de tarjetas o cuentas bancarias no se estén exponiendo o resguardando ya que leyes federales y normas bancarias internacionales prohíben que esta información este de manera sin cifrar o expuesta a usuarios que no intervienen en procesos de cobro por ejemplo.

Desarrollo.

OpenDLP es una suite de DLP con una interfaz web centralizada para gestionar los escáneres de uno o más sistemas de archivos de equipos Windows mediante un agente de red, escáneres de base de datos sin agente y también analizar sin agente sistemas de archivos de Windows/UNIX que identifican datos confidenciales e inactivos.

Instalar OpenDLP

Importar la máquina virtual

Descargamos la OVA de OpenDLP desde la siguiente dirección: https://code.google.com/archive/p/opendlp/, son siete archivos compresos en formato 7z que tenemos que descargar, descomprimimos el primero y se juntaran los siete fragmentos de la imagen para obtener el archivo para importar la máquina virtual.

Iniciamos la aplicación de VirtualBox para trabajar con la máquina virtual como se muestra en la imagen.

OpenDLP-01

OpenDLP-01

En el menú archivo seleccionamos la opción de importar Appliance.

OpenDLP-02

OpenDLP-02

Buscamos la imagen que descargamos en nuestro sistema de archivos.

OpenDLP-03

OpenDLP-03

Seleccionamos siguiente una vez que tiene ya la ruta de donde esta la imagen.

OpenDLP-04

OpenDLP-04

La configuración de la máquina virtual que se importa la dejamos así como esta.

OpenDLP-05

OpenDLP-05

Se empieza a importar la máquina virtual.

OpenDLP-06

OpenDLP-06

Máquina virtual importada y lista para iniciarse.

OpenDLP-07

OpenDLP-07

Podemos tener uno o dos errores al iniciar la máquina virtual. Uno de estos errores puede ser que el adaptador de red no coincida con el de nuestro equipo.

OpenDLP-08

OpenDLP-08

Y por ende la máquina no iniciaría y se cerraría.

OpenDLP-09

OpenDLP-09

También nos puede marcar error en la cuestión de que los puertos USB no estén implementados.

OpenDLP-10

OpenDLP-10

Para la cuestión del dispositivo USB debemos tener instalado el VirtualBox Extension Pack para solucionar este error, se puede descargar desde la propia pagina de VirtualBox.

OpenDLP-11

OpenDLP-11

Con respecto a la interfaz de red solamente debemos configurar apropiadamente el adaptador de red de la máquina virtual para que seleccione el adaptador físico adecuado de nuestro equipo host.

OpenDLP-12

OpenDLP-12

En la parte de configuración de la máquina virtual en la parte de red seleccionamos el adaptador y también la opción de Bridged Adapter para que funcione como un dispositivo adicional en la red lan y no dependa de la red de nuestro host.

OpenDLP-13

OpenDLP-13

Una vez realizado esto la máquina virtual iniciara correctamente.

OpenDLP-14

OpenDLP-14

Vemos que la máquina OpenDLP tiene el estado de running.

OpenDLP-15

OpenDLP-15

Configurar la máquina virtual

Una vez que la máquina virtual ha iniciado ingresamos con el usuario y contraseña predeterminado:

username:opendlp
password:opendlp

Se nos muestran los datos preliminares de la máquina virtual y la dirección IP que tomo mediante DHCP (en este caso).

OpenDLP-17

OpenDLP-17

Como primer paso vamos a cambiar la contraseña del usuario.

OpenDLP-18

OpenDLP-18

Realizado el paso anterior ahora ingresamos mediante SSH y empezaremos a realizar la ejecución de los pasos siguientes, a partir de ahora vamos a realizar todo esto desde el cliente de SSH.

OpenDLP-16

OpenDLP-16

Vamos a copiar el archivo llamado sc.exe a un directorio en la máquina virtual de OpenDLP, que por motivos de licenciamiento no puede ser incluido y vamos a obtenerlo desde un equipo con Windows XP.

OpenDLP-19

OpenDLP-19

Ya que obtuvimos el archivo sc.exe que esta dentro de C:\textbackslash Windows\textbackslash System32, lo tenemos que copiar al equipo de OpenDLP. El archivo sc.exe lo copiamos a la máquina virtual: $ scp sc.exe opendlp@192.168.11.86:/home/opendlp

Y en la máquina virtual este mismo archivo lo movemos al directorio /var/www/OpenDLP/bin/.

opendlp@opendlp:~$ sudo mv sc.exe /var/www/OpenDLP/bin/

Configurar el navegador web
Ahora necesitamos importar el archivo “client.p12” en nuestro navegador web, este archivo viene en el archivo que desempaquetamos previamente donde viene la máquina virtual por lo que iniciamos el navegador web Iceweasel.

Iceweasel-OpenDLP-01

Iceweasel-OpenDLP-01

En la esquina superior derecha seleccionamos la parte de opciones del navegador.

Iceweasel-OpenDLP-02

Iceweasel-OpenDLP-02

La parte general de las preferencias.

Iceweasel-OpenDLP-03

Iceweasel-OpenDLP-03

Seleccionamos la parte de preferencias avanzadas.

Iceweasel-OpenDLP-04

Iceweasel-OpenDLP-04

En la sección de preferencias avanzadas seleccionamos la pestaña de certificados y damos clic en el botón “”View Certificates“.

Iceweasel-OpenDLP-05

Iceweasel-OpenDLP-05

Se nos muestra una ventana que es el administrador de certificados y vamos a seleccionar la pestaña “Your Certificates“.

Iceweasel-OpenDLP-06

Iceweasel-OpenDLP-06

En esta pestaña seleccionamos el botón “Import“ para importar el certificado de OpenDLP llamado “client.p12“.

Iceweasel-OpenDLP-07

Iceweasel-OpenDLP-07

Este archivo viene compreso junto con la máquina virtual que descargamos por lo cual lo buscamos en nuestro sistema de archivos.

Iceweasel-OpenDLP-08

Iceweasel-OpenDLP-08

No tiene contraseña así que solo damos clic en Ok.

Iceweasel-OpenDLP-09

Iceweasel-OpenDLP-09

Se ha importado correctamente el certificado.

Iceweasel-OpenDLP-10

Iceweasel-OpenDLP-10

Ya importado el certificado se nos muestra en la parte de nuestros certificados del navegador web.

Iceweasel-OpenDLP-11

Iceweasel-OpenDLP-11

Al conectarnos por primera vez al servicio web del servicio de OpenDLP se nos presentara una ventana de dialogo donde el servicio solicita un método de autenticación mediante un certificado escogemos el certificado instalado y seleccionamos que recuerde esta decisión.

Iceweasel-OpenDLP-12

Iceweasel-OpenDLP-12

Al no ser un certificado emitido por una entidad autorizada el navegador nos mostrara una advertencia con respecto al sitio donde queremos realizar la conexión mediante el certificado.

Iceweasel-OpenDLP-13

Iceweasel-OpenDLP-13

Tenemos que agregar la excepción.

Iceweasel-OpenDLP-14

Iceweasel-OpenDLP-14

Confirmar la excepción de seguridad.

Iceweasel-OpenDLP-15

Iceweasel-OpenDLP-15

Al conectarnos nos pide un usuario y contraseña que de manera predeterminada son los siguientes datos: username: \textbf{dlpuser} y password: \textbf{OpenDLP}.

Iceweasel-OpenDLP-16

Iceweasel-OpenDLP-16

La pagina principal de OpenDLP.

Iceweasel-OpenDLP-17

Iceweasel-OpenDLP-17

Después de tantas imágenes vamos a generar algo más practico en la parte 2.

Debian, Openswan y Fortigate – 1

Me preguntaron: ¿Es posible con un servidor Linux establecer una VPN IPsec contra un dispositivo Fortigate usando como enlace de Internet un servicio ADSL de TELMEX?

Según este enlace es posible: Using an Openswan client with FortiGate VPN, pero no me pareció tan sencillo como se menciona.

Los equipos Fortigate de la marca Fortinet tienen una interfaz gráfica cómoda que nos permite realizar dependiendo nuestras necesidades diversas VPN como PPTP, SSL e IPsec.

En este pequeño documento describiré la conexión de Openswan con un par de modelos Fortigate que son el 500 y el 600C. Lo realizare de una manera conforme me fui topando con diversos problemas de conexión.

Los parámetros serán los siguientes:

Cliente Debian Linux 7.2.0
Openswan versión 2.6.37
Fortigate 500 y 600C.
Enlace dedicado con IP publica del lado del firewall Fortinet.
Enlace de Internet ADSL Telmex Infinitum con IP dinámica.

El diagrama de red lo presento a continuación.

Diagrama de red.

Diagrama de red.

Tenemos una LAN con red 192.168.1.0/24 que es la red de una pequeña oficina que se necesita conectar a servicios que están en una oficina matriz con red 172.16.30.0/28.

Nombraremos a la red matriz como Iturbide y a la oficina remota como Guerrero.

Oficina Guerrero:

Equipos de la oficina (PC, Laptop, Impresoras): 192.168.10-30/24
Servidor Debian Linux con Openswan: 192.168.1.100.
Router ADSL: 192.168.1.254

Oficina Iturbide:

Equipos de la oficina (PC, Servidores, BD): 172.16.30.2-12/28
Equipo Fortigate 500: 172.16.30.1
IP publica: 200.xxx.xxx.xxx

Creación de la VPN en el equipo Fortigate 500.

Vamos a configurar la VPN en el equipo Fortigate mediante su interfaz web.

IPsec-FG-500-1

Creamos la fase 1.

Name Openswan_p1_Guerrero
Remote Gateway Dialup User
Local Interface external (WAN1)
Mode Main (ID protection)
Authentication Method Preshared Key
Pre-shared Key ConexionPruebas

IPsec-FG-500-2-2

Creamos la fase 2.

Name Openswan_p2_Guerrero
Phase 1 Openswan_p1_Guerrero

IPsec-FG-500-3

Con esto ya tenemos nuestra VPN configurada posteriormente agregaremos un par de detalles.

IPsec-FG-500-4

Creamos la red origen.

Name Red-Oficina-Iturbide
Type Subnet/IP Range
Subnet/IP Range 172.16.30.0/255.255.255.240
Interface port1 (internal)

IPsec-FG-500-6

Creamos la red destino.

Name Red-Oficina-Guerrero
Type Subnet/IP Range
Subnet/IP Range 192.168.1.0/255.255.255.0
Interface external (WAN1)

IPsec-FG-500-5

Vamos a crear la política.

Source Interface/Zone port1 (internal)
Source Address Red-Oficina-Iturbide
Destination Interface/Zone external (WAN1)
Destination Address Red-Oficina-Guerrero
Schedule always
Service ANY
Action IPSEC
VPN Tunnel Openswan_p1_Guerrero

IPsec-FG-500-7

Por el momento eso es todo lo que haremos en el dispositivo fortigate posteriormente realizaremos mas cambios.

Partimos de una instalación básica solamente con el servicio de SSH instalado, por lo cual instalaremos openswan junto con sus dependencias.

Verificamos el núcleo y la versión de nuestro sistema Debian.

root@debian-tester:~# uname -a
Linux debian-tester 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
root@debian-tester:~# cat /etc/issue.net
Debian GNU/Linux 7

Vamos a buscar los paquetes.

root@debian-tester:~# aptitude search openswan
p   openswan                                                                                - Internet Key Exchange daemon                                                                      
p   openswan-dbg                                                                            - Internet Key Exchange daemon - debugging symbols                                                  
p   openswan-doc                                                                            - Internet Key Exchange daemon - documentation                                                      
p   openswan-modules-dkms                                                                   - Internet Key Exchange daemon - DKMS source                                                        
p   openswan-modules-source                                                                 - Internet Key Exchange daemon - kernel module source

Instalamos la aplicación.

root@debian-tester:~# aptitude install openswan
The following NEW packages will be installed:
  bind9-host{a} ca-certificates{a} geoip-database{a} host{a} libbind9-80{a} libcap2{a} libclass-isa-perl{a} libcurl3{a} libdns88{a} libgeoip1{a} libisc84{a} libisccc80{a} libisccfg82{a} 
  libldap-2.4-2{a} liblwres80{a} librtmp0{a} libsasl2-2{a} libsasl2-modules{a} libssh2-1{a} libswitch-perl{a} libxml2{a} openssl{a} openswan perl{a} perl-modules{a} sgml-base{a} 
  xml-core{a} 
0 packages upgraded, 27 newly installed, 0 to remove and 0 not upgraded.
Need to get 14.8 MB of archives. After unpacking 48.2 MB will be used.
Do you want to continue? [Y/n/?] Y
Get: 1 http://security.debian.org/ wheezy/updates/main libcurl3 amd64 7.26.0-1+wheezy6 [331 kB]
Get: 2 http://ftp.de.debian.org/debian/ wheezy/main libcap2 amd64 1:2.22-1.2 [13.6 kB]
Get: 3 http://ftp.de.debian.org/debian/ wheezy/main libsasl2-2 amd64 2.1.25.dfsg1-6+deb7u1 [120 kB]
.
.
.
Setting up openswan (1:2.6.37-3) ...
ipsec_setup: Starting Openswan IPsec 2.6.37-g955aaafb-dirty...
ipsec_setup: No KLIPS support found while requested, desperately falling back to netkey
ipsec_setup: NETKEY support found. Use protostack=netkey in /etc/ipsec.conf to avoid attempts to use KLIPS. Attempting to continue with NETKEY
Setting up libclass-isa-perl (0.36-3) ...
.
.
.
Updating certificates in /etc/ssl/certs... 158 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.
Processing triggers for sgml-base ...

Verificamos el estado del servicio y por el momento no hay ningún túnel arriba.

root@debian-tester:~# /etc/init.d/ipsec status
IPsec running  - pluto pid: 4606
pluto pid 4606
No tunnels up

Tomando como referencia la documentación de la base de conocimientos de fortinet tenemos la siguiente configuración inicial:

conn office 
 #left side is home
 left=%defaultroute
 #right side is work
 #set right to vpn remote gateway
 right=xxx.xxx.xxx.xxx
 #set rightsubnet to remote network
 rightsubnet=172.20.120.0/24
 keyexchange=ike
 #auth=esp
 #auto=start
 authby=secret
 #specify encryption FortiGate VPN uses
 esp=3des
 #perfect forward secrecy (default yes)
 #pfs=no
 #optionally enable compression
 compress=yes

Crearemos un archivo llamado iturbide.conf dentro del directorio /etc/ipsec.d/ el cual tendrá el siguiente contenido cambiando las opciones adecuándolas a nuestro esquema de red.

root@debian-tester:~# cat /etc/ipsec.d/iturbide.conf
conn iturbide
 #left side is home
 left=%defaultroute
 #right side is work
 #set right to vpn remote gateway
 right=200.xxx.xxx.xxx
 #set rightsubnet to remote network
 rightsubnet=172.16.30.0/28
 keyexchange=ike
 #auth=esp
 #auto=start
 authby=secret
 #specify encryption FortiGate VPN uses
 esp=3des
 #perfect forward secrecy (default yes)
 #pfs=no
 #optionally enable compression
 compress=yes

Al final del archivo /etc/ipsec.secrets colocamos nuestra contraseña de la siguiente manera:

root@debian-tester:~# cat /etc/ipsec.secrets 
# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication.  See ipsec_pluto(8) manpage, and HTML documentation.
 
# RSA private key for this host, authenticating it to any other host
# which knows the public part.  Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".
 
# this file is managed with debconf and will contain the automatically created RSA keys
include /var/lib/openswan/ipsec.secrets.inc
 
: PSK "ConexionPruebas"

Reiniciamos el servicio de IPsec.

root@debian-tester:~# /etc/init.d/ipsec restart
ipsec_setup: Stopping Openswan IPsec...
ipsec_setup: Starting Openswan IPsec 2.6.37-g955aaafb-dirty...
ipsec_setup: No KLIPS support found while requested, desperately falling back to netkey
ipsec_setup: NETKEY support found. Use protostack=netkey in /etc/ipsec.conf to avoid attempts to use KLIPS. Attempting to continue with NETKEY

Si tenemos un error como el siguiente se debe a que existe un espacio o tabulador en la linea donde esta la opción de include /etc/ipsec.d/*.conf.

root@debian-tester:~# /etc/init.d/ipsec restart
failed to start openswan IKE daemon - the following error occured:
can not load config '/etc/ipsec.conf': /etc/ipsec.conf:41: syntax error, unexpected INCLUDE [include]
root@debian-tester:~# cat /etc/ipsec.conf | grep include
        include /etc/ipsec.d/*.conf
root@debian-tester:~# cat /etc/ipsec.conf | grep include
include /etc/ipsec.d/*.conf

Ahora iniciamos la VPN.

root@debian-tester:~# ipsec auto --add iturbide
root@debian-tester:~# ipsec auto --up iturbide
022 "iturbide": We cannot identify ourselves with either end of this connection.

Tenemos un error que es asociado a que no puede identificar nuestra correcta puerta de enlace, así que empezaremos a modificar un poco la configuración en la que nos basamos, cambiamos el parametro left y agregar leftsubnet que sera la red origen y lefnexthop que es nuestro puerta de enlace.

root@debian-tester:~# vim /etc/ipsec.d/iturbide.conf
left=192.168.1.100
leftsubnet=192.168.1.0/24
leftnexthop=192.168.1.254

Reiniciamos de nuevo.

root@debian-tester:~# /etc/init.d/ipsec restart

Volvemos a iniciar la conexión.

root@debian-tester:~# ipsec auto --add iturbide
root@debian-tester:~# ipsec auto --up iturbide
104 "iturbide" #1: STATE_MAIN_I1: initiate
003 "iturbide" #1: received Vendor ID payload [RFC 3947] method set to=109 
003 "iturbide" #1: received Vendor ID payload [Dead Peer Detection]
106 "iturbide" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "iturbide" #1: NAT-Traversal: Result using RFC 3947 (NAT-Traversal): i am NATed
108 "iturbide" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "iturbide" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY cipher=oakley_3des_cbc_192 prf=oakley_sha group=modp1536}
117 "iturbide" #2: STATE_QUICK_I1: initiate
003 "iturbide" #2: ignoring informational payload, type IPSEC_RESPONDER_LIFETIME msgid=0cd368e8
004 "iturbide" #2: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP=>0x10c29931 <0xfb540947 xfrm=3DES_0-HMAC_MD5 NATOA=none NATD=none DPD=none}

Logramos iniciar la conexión satisfactoriamente vamos a verificar el estado de la VPN.

root@debian-tester:~# ipsec auto --status
000 using kernel interface: netkey
000 interface lo/lo ::1
000 interface lo/lo 127.0.0.1
000 interface lo/lo 127.0.0.1
000 interface eth0/eth0 192.168.1.100
000 interface eth0/eth0 192.168.1.100
000 %myid = (none)
000 debug none
.
.
.
000  
000 "iturbide": 192.168.1.0/24===192.168.1.100<192.168.1.100>[+S=C]---192.168.1.254...200.xxx.xxx.xxx<200.xxx.xxx.xxx>[+S=C]===172.16.30.0/28; erouted; eroute owner: #2
000 "iturbide":     myip=unset; hisip=unset;
000 "iturbide":   ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "iturbide":   policy: PSK+ENCRYPT+COMPRESS+TUNNEL+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 24,28; interface: eth0; 
000 "iturbide":   newest ISAKMP SA: #1; newest IPsec SA: #2; 
000 "iturbide":   IKE algorithm newest: 3DES_CBC_192-SHA1-MODP1536
000 "iturbide":   ESP algorithms wanted: 3DES(3)_000-MD5(1)_000, 3DES(3)_000-SHA1(2)_000; flags=-strict
000 "iturbide":   ESP algorithms loaded: 3DES(3)_192-MD5(1)_128, 3DES(3)_192-SHA1(2)_160
000 "iturbide":   ESP algorithm newest: 3DES_000-HMAC_MD5; pfsgroup=<Phase1>
000  
000 #2: "iturbide":4500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 27276s; newest IPSEC; eroute owner; isakmp#1; idle; import:admin initiate
000 #2: "iturbide" esp.10c29931@200.xxx.xxx.xxx esp.fb540947@192.168.1.100 tun.0@200.xxx.xxx.xxx tun.0@192.168.1.100 ref=0 refhim=4294901761
000 #1: "iturbide":4500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 2471s; newest ISAKMP; lastdpd=1s(seq in:0 out:0); idle; import:admin initiate
000

El servicio ya nos indica que tenemos un túnel conectado.

root@debian-tester:~# /etc/init.d/ipsec status
IPsec running  - pluto pid: 9186
pluto pid 9186
1 tunnels up
some eroutes exist

Y tenemos trafico desde nuestro servidor al equipo fortigate.

root@debian-tester:~# ping 172.16.30.1
PING 172.16.30.1 (172.16.30.1) 56(84) bytes of data.
64 bytes from 172.16.30.1: icmp_req=1 ttl=255 time=26.6 ms
64 bytes from 172.16.30.1: icmp_req=2 ttl=255 time=25.8 ms
64 bytes from 172.16.30.1: icmp_req=3 ttl=255 time=27.7 ms
64 bytes from 172.16.30.1: icmp_req=4 ttl=255 time=28.6 ms
64 bytes from 172.16.30.1: icmp_req=5 ttl=255 time=31.9 ms
^C
--- 172.16.30.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4008ms
rtt min/avg/max/mdev = 25.895/28.167/31.957/2.112 ms

De igual manera el equipo fortigate puede alcanzar a nuestro servidor Openswan.

FGT5002803033352 # execute ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
64 bytes from 192.168.1.100: icmp_seq=0 ttl=64 time=28.7 ms
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=28.5 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=26.9 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=27.8 ms
64 bytes from 192.168.1.100: icmp_seq=4 ttl=64 time=25.8 ms
 
--- 192.168.1.100 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 25.8/27.5/28.7 ms

Ahora eso es del lado de nuestro servidor si queremos algo de debug en el fortigate podemos acceder mediante consola o SSH a estos equipos y ejecutar el modo de diagnostico para este tipo de conexión de la siguiente manera.

FGT5002803033352 # diagnose debug console 
FGT5002803033352 # diagnose debug enable
FGT5002803033352 # diagnose debug application ike -1

Justamente cuando iniciamos la conexión en nuestro servidor aquí empezó a registrar todo el proceso de conexión.

FGT5002803033352 # 0: comes 201.124.89.127:49198->200.xxx.xxx.xxx:500,ifindex=3....                                                                                                               
0: exchange=Identity Protection id=0334eedbdbcc0a40/0000000000000000 len=592                                                                                                                    
0:Openswan_p1_Guerrero: new connection.                                                                                                                                                         
0:Openswan_p1_Guerrero:44: responder: main mode get 1st message...
0:Openswan_p1_Guerrero:44: unknown VID (12): OEfdpoplS^}i
0:Openswan_p1_Guerrero:44: VID DPD
0:Openswan_p1_Guerrero:44: DPD negotiated
0:Openswan_p1_Guerrero:44: VID RFC 3947
0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-03
0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-02
 
0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-02
0:Openswan_p1_Guerrero:44: VID draft-ietf-ipsec-nat-t-ike-00
0:Openswan_p1_Guerrero:44: negotiation result
0:Openswan_p1_Guerrero:44: proposal id = 1:
0:Openswan_p1_Guerrero:44:   protocol id = ISAKMP:
0:Openswan_p1_Guerrero:44:      trans_id = KEY_IKE.
0:Openswan_p1_Guerrero:44:      encapsulation = IKE/none
0:Openswan_p1_Guerrero:44:         type=OAKLEY_ENCRYPT_ALG, val=3DES_CBC.
0:Openswan_p1_Guerrero:44:         type=OAKLEY_HASH_ALG, val=SHA.
0:Openswan_p1_Guerrero:44:         type=AUTH_METHOD, val=PRESHARED_KEY.
0:Openswan_p1_Guerrero:44:         type=OAKLEY_GROUP, val=1536.
0:Openswan_p1_Guerrero:44: ISKAMP SA lifetime=28800
0:Openswan_p1_Guerrero:44: selected NAT-T version: RFC 3947
0:Openswan_p1_Guerrero:44: cookie 0334eedbdbcc0a40/2980a6536ba23616
0:Openswan_p1_Guerrero:44: sent IKE msg (ident_r1send): 200.xxx.xxx.xxx:500->201.124.89.127:49198, len=120
Openswan_p1_Guerrero: Responder: sent 201.124.89.127 main mode message #1 (OK)
0: comes 201.124.89.127:49198->200.xxx.xxx.xxx:500,ifindex=3....
0: exchange=Identity Protection id=0334eedbdbcc0a40/2980a6536ba23616 len=292
0: found Openswan_p1_Guerrero 200.xxx.xxx.xxx 3 -> 201.124.89.127:49198
0:Openswan_p1_Guerrero:44: responder:main mode get 2nd message...
0:Openswan_p1_Guerrero:44: NAT detected: PEER
0:Openswan_p1_Guerrero:44: sent IKE msg (ident_r2send): 200.xxx.xxx.xxx:500->201.124.89.127:49198, len=292
0:Openswan_p1_Guerrero:44: put connection to natt list...ip=201.124.89.127.
Openswan_p1_Guerrero: Responder: sent 201.124.89.127 main mode message #2 (OK)
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Identity Protection id=0334eedbdbcc0a40/2980a6536ba23616 len=68
0:Openswan_p1_Guerrero:44: responder: main mode get 3rd message...
0:Openswan_p1_Guerrero:44: PSK authentication succeeded
0:Openswan_p1_Guerrero:44: authentication OK
0:Openswan_p1_Guerrero: adding new dialup tunnel for 201.124.89.127:49199
0:Openswan_p1_Guerrero_0: added new dialup tunnel for 201.124.89.127:49199
Openswan_p1_Guerrero_0: Responder: parsed 201.124.89.127 main mode message #3 (DONE)
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947
0:Openswan_p1_Guerrero_0:44: sent IKE msg (ident_r3send): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=68
Openswan_p1_Guerrero_0: Responder: sent 201.124.89.127 main mode message #3 (DONE)
0:Openswan_p1_Guerrero_0:44: ISAKMP SA established
0:Openswan_p1_Guerrero_0:44: no pending Quick-Mode negotiations
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Quick id=0334eedbdbcc0a40/2980a6536ba23616:e868d30c len=412
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44::852: responder received first quick-mode message
0:Openswan_p1_Guerrero_0:44:852: peer proposal is: peer:192.168.1.0-192.168.1.255, me:172.16.30.0-172.16.30.15, ports=0/0, protocol=0/0
0:Openswan_p1_Guerrero_0:44:852: trying Openswan_p2_Guerrero
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: matched phase2
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: dialup
0:Openswan_p1_Guerrero_0:44: cmpsaprop: natt flags 0x5, pr1 encmode 3, pr2 encmode 1
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: negotiation result
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: proposal id = 0:
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:   protocol id = IPSEC_ESP:
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:      trans_id = ESP_3DES
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:      encapsulation = ENCAPSULATION_MODE_TUNNEL
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852:         type = AUTH_ALG, val=MD5
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: set pfs=1536
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: encapsulation = 1
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: using udp tunnel mode.
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: add RESPONDER-LIFETIME 1800 seconds
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947
0:Openswan_p1_Guerrero_0:44: sent IKE msg (quick_r1send): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=388
Openswan_p1_Guerrero_0: Responder: sent 201.124.89.127 quick mode message #1 (OK)
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Quick id=0334eedbdbcc0a40/2980a6536ba23616:e868d30c len=52
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: set sa life soft seconds=1790.
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: set sa life hard seconds=1800.
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: add SA #src=1 #dst=1
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: src 0 7 0.0.0.0-255.255.255.255
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: dst 0 7 192.168.1.0-192.168.1.255
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: installed SA: SPIs=10c29931/fb540947
0:Openswan_p1_Guerrero_0:44:Openswan_p2_Guerrero:852: sending SNMP tunnel UP trap
Openswan_p1_Guerrero_0: Responder: parsed 201.124.89.127 quick mode message #2 (DONE)
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=1
shrank heap by 122880 bytes
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=2
0:Openswan_p1_Guerrero_0: send DPD probe, seqno 2
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947

0:Openswan_p1_Guerrero_0:44: sent IKE msg (R-U-THERE): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=92
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3….
0: exchange=Informational id=0334eedbdbcc0a40/2980a6536ba23616:23aa5bf4 len=84
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44: notify msg received: R-U-THERE-ACK
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=3
0:Openswan_p1_Guerrero_0: send DPD probe, seqno 3
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947

0:Openswan_p1_Guerrero_0:44: sent IKE msg (R-U-THERE): 200.xxx.xxx.xxx:4500->201.124.89.127:49199, len=92
0: comes 201.124.89.127:49199->200.xxx.xxx.xxx:4500,ifindex=3....
0: exchange=Informational id=0334eedbdbcc0a40/2980a6536ba23616:d2b2b49e len=84
0: found Openswan_p1_Guerrero_0 200.xxx.xxx.xxx 3 -> 201.124.89.127:49199
0:Openswan_p1_Guerrero_0:44: notify msg received: R-U-THERE-ACK
0:Openswan_p1_Guerrero_0: link is idle 3 200.xxx.xxx.xxx->201.124.89.127:49199 dpd=2 seqno=4
0:Openswan_p1_Guerrero_0: send DPD probe, seqno 4
0:Openswan_p1_Guerrero_0:44: confirmed nat-t RFC 3947

En la interfaz web podemos visualizar el estado de la VPN.

IPsec-FG-500-8

Si queremos detener la VPN bastara lo siguiente.

root@debian-tester:~# ipsec auto --down iturbide
root@debian-tester:~# ipsec auto --delete iturbide

Para iniciar la VPN automáticamente cada vez que el servicio de IPsec se ejecute necesitamos habilitar en nuestro archivo de configuración el siguiente parámetro.

#auto=start

El archivo final de nuestra configuración queda de la siguiente manera:

root@debian-tester:~# cat /etc/ipsec.d/iturbide.conf
conn iturbide
 #left side is home
 left=192.168.1.100
 leftsubnet=192.168.1.0/24
 leftnexthop=192.168.1.254
 #right side is work
 #set right to vpn remote gateway
 right=200.xxx.xxx.xxx
 #set rightsubnet to remote network
 rightsubnet=172.16.30.0/28
 keyexchange=ike
 #auth=esp
 auto=start
 authby=secret
 #specify encryption FortiGate VPN uses
 esp=3des
 #perfect forward secrecy (default yes)
 #pfs=no
 #optionally enable compression
 compress=yes

Referencias para saber más:

Using an Openswan client with FortiGate VPN

http://www.iphouse.com/blog/2012/01/20/debugging-ipsec-vpns-in-fortigate/

http://wildengineer.ilcavolfiore.it/?p=454

http://listarc.com/showthread.php?1179640-Openswan+to+Fortigate+60B+-+VPN

http://www.slashroot.in/linux-ipsec-site-site-vpnvirtual-private-network-configuration-using-openswan

http://www.linuxparatodos.net/portal/staticpages/index.php?page=openswan-diseno-vpn

VNC, twm y XTerm para configuraciones remotas.

En servidores Linux donde en muchos de los casos no tendremos un sistema gráfico instalado como puede ser Gnome o KDE, podemos encontrarnos con la circunstancia de que necesitemos instalar un programa que necesite ejecutar al menos una ventana en un entorno gráfico aunque sea mínimo.

En este caso necesitamos entrar a ciertos servidores algunas veces y poder desplegar un navegador web para manipular modems ADSL y alguna impresora mediante su interfaz web y no tener que hacerlo desde el equipo de un usuario.

Utilizaremos servidores Linux Debian con la mas mínima instalación por que su función solamente es realizar una VPN y unas pocas labores como router.

Así que instalaremos el servicio de VNC y un navegador web mediante pocas instrucciones utilizando el sistema de paquetes de debian. Al decir una instalación básica nos referimos a que solo agregamos el servicio de SSH utilizando el CD de instalación por red (netinst) para debian 7.

Debianita-VNC-1

No instalamos el ambiente de escritorio, sistema de impresión, tampoco las utilidades para laptop ni las herramientas por defecto del sistema.

Debianita-VNC-38

Solo el servicio de SSH.

Debianita-VNC-39

Nos conectamos mediante SSH al servidor para empezar la instalación que consistirá básicamente de cuatro paquetes junto con todas sus dependencias, los cuales son: iceweasel, twm, xterm y vnc4server.
Ejecutamos la actualización de aptitude y tener listo nuestro repositorio.

gabriel@daneel:~$ ssh root@192.168.1.61
root@debian-tester:~# aptitude update

Primero vamos con el navegador web que en Debian de manera predeterminada es iceweasel (Firefox) el cual para instalarse necesitara 61 paquetes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@debian-tester:~# aptitude install iceweasel
The following NEW packages will be installed:
  dbus{a} fontconfig{a} fontconfig-config{a} hicolor-icon-theme{a} hunspell-en-us{a} iceweasel libasound2{a} 
  libatk1.0-0{a} libatk1.0-data{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcairo2{a} 
  libcap2{a} libclass-isa-perl{a} libcups2{a} libdatrie1{a} libdbus-1-3{a} libdbus-glib-1-2{a} libevent-2.0-5{a} 
  libfontconfig1{a} libgdk-pixbuf2.0-0{a} libgdk-pixbuf2.0-common{a} libglib2.0-0{a} libglib2.0-data{a} libgtk2.0-0{a} 
  libgtk2.0-bin{a} libgtk2.0-common{a} libhunspell-1.3-0{a} libjasper1{a} libjbig0 libjpeg8{a} libmozjs17d{a} libnspr4{a} 
  libnss3{a} libpango1.0-0{a} libpcre3{a} libpng12-0{a} libstartup-notification0{a} libswitch-perl{a} 
  libsystemd-login0{a} libthai-data{a} libthai0{a} libtiff4{a} libvpx1{a} libx11-xcb1{a} libxcb-render0{a} libxcb-shm0{a} 
  libxcb-util0{a} libxcursor1{a} libxft2{a} libxi6{a} libxinerama1{a} libxml2{a} perl{a} perl-modules{a} sgml-base{a} 
  shared-mime-info{a} ttf-dejavu-core{a} xml-core{a} xulrunner-17.0{a} 
0 packages upgraded, 61 newly installed, 0 to remove and 0 not upgraded.
Need to get 43.2 MB of archives. After unpacking 150 MB will be used.
Do you want to continue? [Y/n/?] Y

Luego vamos por el pequeño gestor de ventanas twm e iniciamos su instalación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@debian-tester:~# aptitude install twm
The following NEW packages will be installed:
  twm 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 123 kB of archives. After unpacking 389 kB will be used.
Get: 1 http://ftp.us.debian.org/debian/ wheezy/main twm amd64 1:1.0.6-1 [123 kB]
Fetched 123 kB in 0s (162 kB/s)
Selecting previously unselected package twm.
(Reading database ... 35773 files and directories currently installed.)
Unpacking twm (from .../twm_1%3a1.0.6-1_amd64.deb) ...
Processing triggers for menu ...
Processing triggers for man-db ...
Setting up twm (1:1.0.6-1) ...
update-alternatives: using /usr/bin/twm to provide /usr/bin/x-window-manager (x-window-manager) in auto mode
Processing triggers for menu ...

Instalamos Xterm que es un emulador de terminal y necesitara 12 paquetes para instalarse.

1
2
3
4
5
6
7
root@debian-tester:~# aptitude install xterm
The following NEW packages will be installed:
  libgl1-mesa-glx{a} libglapi-mesa{a} libutempter0{a} libxcb-glx0{a} libxcb-shape0{a} libxtst6{a} libxv1{a} 
  libxxf86dga1{a} libxxf86vm1{a} x11-utils{a} xbitmaps{a} xterm 
0 packages upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,202 kB of archives. After unpacking 3,829 kB will be used.
Do you want to continue? [Y/n/?] Y

Y por ultimo pero no menos importante el servidor VNC con 8 paquetes.

1
2
3
4
5
6
root@debian-tester:~# aptitude install vnc4server
The following NEW packages will be installed:
  libfs6{a} vnc4server x11-apps{a} x11-session-utils{a} x11-xfs-utils{a} x11-xserver-utils{a} xbase-clients{a} xinit{a} 
0 packages upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,311 kB of archives. After unpacking 8,580 kB will be used.
Do you want to continue? [Y/n/?] Y

Terminada la instalación vamos a conectarnos como un usuario normal ya que no es recomendable entrar mediante VNC con el superusuario root.

1
2
gabriel@daneel:~$ ssh gabriel@192.168.1.61
gabriel@192.168.1.61's password:

Iniciamos la configuración del servidor donde nos solicitara una contraseña, por mas larga que escribamos nuestra contraseña solo tomara los primeros ocho dígitos de ella y creara nuestro escritorio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
gabriel@debian-tester:~$ vnc4server 
 
You will require a password to access your desktops.
 
Password:
Verify:
Password too long - only the first 8 characters will be used
xauth:  file /home/gabriel/.Xauthority does not exist
 
New 'debian-tester:1 (gabriel)' desktop is debian-tester:1
 
Creating default startup script /home/gabriel/.vnc/xstartup
Starting applications specified in /home/gabriel/.vnc/xstartup
Log file is /home/gabriel/.vnc/debian-tester:1.log
 
gabriel@debian-tester:~$

Nos conectaremos mediante la aplicación RealVNC desde un cliente Windows donde especificamos la dirección IP y el numero del escritorio asignado.
VNC-0-Windows

El cliente de VNC nos menciona que estaremos en una conexión sin cifrar y que si bien nuestras credenciales son transmitidas de manera segura la demás información es susceptible a ser interceptada, omitimos esta advertencia y continuamos.

VNC-1-Windows

Ingresamos nuestra contraseña que establecimos anteriormente.

VNC-2-Windows

Tenemos nuestro escritorio listo con un sistema de ventanas mínimo y una consola para iniciar nuestra aplicación.

VNC-3-Windows

Ejecutamos nuestro navegador web y tenemos que especificar mediante el cursor donde lo colocaremos en el sistema de ventanas.

VNC-4-Windows

Ya tenemos nuestro navegador web listo y la comadreja nos da la bienvenida.

VNC-5-Windows

Si el equipo remoto cuenta con salida a Internet podremos navegar en la web como por ejemplo con google.com.mx.

VNC-6-Windows

Spotify en Debian Linux

No tiene mucho tiempo que esta disponible Spotify en México, me parece un buen servicio de música y si podemos soportar los anuncios comerciales una cuenta gratis es mas que suficiente. Y una buena noticia es que hay una beta para Linux y me evito estar ejecutándolo en una maquina virtual.

En esta dirección podemos encontrar las instrucciones para la instalación en Linux: https://www.spotify.com/mx/download/previews/ como se ve en la siguiente imagen:

MusicSP2

Primero necesitamos agregar la siguiente linea en la configuración de los repositorios de debian.

deb http://repository.spotify.com stable non-free
root@giskard:/home/gabriel# vim /etc/apt/sources.list

Agregamos la llave publica para este repositorio y sus paquetes.

root@giskard:/home/gabriel# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 94558F59                                                                                       
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv-keys 94558F59                                                                                           
gpg: requesting key 94558F59 from hkp server keyserver.ubuntu.com                                                                                                                   
gpg: key 94558F59: public key "Spotify Public Repository Signing Key <operations@spotify.com>" imported                                                                             
gpg: Total number processed: 1                                                                                                                                                      
gpg:               imported: 1  (RSA: 1)

Actualizamos.

root@giskard:/home/gabriel# aptitude update

Vamos a ver que paquetes encontramos.

root@giskard:/home/gabriel# aptitude search spotify
p   spotify-client                                                                    - Spotify desktop client                                                                      
p   spotify-client-gnome-support                                                      - Transitional package for spotify-client                                                     
p   spotify-client-qt                                                                 - Transitional package for spotify-client

Iniciamos la instalación del cliente que tiene un tamaño cercano a los 38 MB.

root@giskard:/home/gabriel# aptitude install spotify-client
The following NEW packages will be installed:
  spotify-client 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 37.6 MB of archives. After unpacking 91.2 MB will be used.
Get:1 http://repository.spotify.com/ stable/non-free spotify-client amd64 1:0.9.0.133.gd18ed58.259-1 [37.6 MB]
Fetched 37.6 MB in 1min 26s (433 kB/s)                                                                                                                                              
Selecting previously deselected package spotify-client.
(Reading database ... 161662 files and directories currently installed.)
Unpacking spotify-client (from .../spotify-client_1%3a0.9.0.133.gd18ed58.259-1_amd64.deb) ...
Setting up spotify-client (1:0.9.0.133.gd18ed58.259-1) ...
Processing triggers for menu ...
 
root@giskard:/home/gabriel#

Ejecutamos e iniciamos sesión con nuestro usuario.

MusicSP1

Spotify reproduciendo una estación de radio.

MusicSP3

Bastante sencillo, =)

Debian, EqualLogic y bond de tarjetas.

Recientemente tengo libre un servidor y puedo realizar ciertos experimentos con Debian al conectarlo a una SAN iSCSI Dell EqualLogic haciendo pruebas, por lo cual nos animamos a realizar este pequeño escrito al respecto. El servidor tendrá como sistema operativo Debian Squeeze 6.0.6 usando la versión de 64 bits.

Partimos de una instalación muy simple mediante la imagen llamada business card, una pequeña ISO de poco mas de 50 MB que solo contendrá el sistema básico.

El equipo tiene seis tarjetas de red, usaremos la interfaz eth0 como nuestra interfaz principal de administración y las interfaces eth2 y eth3 se conectaran a la red iSCSI.

root@elmulo:~# lspci | grep net
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
01:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
04:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
04:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)

Nos basaremos en la siguiente wiki para realizar el procedimiento: Bonding.

root@elmulo:~# aptitude install ifenslave-2.6
The following NEW packages will be installed:
  ifenslave-2.6 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 18.4 kB of archives. After unpacking 143 kB will be used.
Get:1 http://mirrors.kernel.org/debian/ squeeze/main ifenslave-2.6 amd64 1.1.0-17 [18.4 kB]
Fetched 18.4 kB in 0s (36.7 kB/s)     
Selecting previously deselected package ifenslave-2.6.
(Reading database ... 14392 files and directories currently installed.)
Unpacking ifenslave-2.6 (from .../ifenslave-2.6_1.1.0-17_amd64.deb) ...
Processing triggers for man-db ...
Setting up ifenslave-2.6 (1.1.0-17) ...
update-alternatives: using /sbin/ifenslave-2.6 to provide /sbin/ifenslave (ifenslave) in auto mode.

Después de la instalación del paquete nos toca configurar nuestro archivo de red para especificar los parámetros del bond a crear que básicamente serán que interfaces de red se usaran así como el tipo de bonding que utilizaremos. Los parámetros de nuestra primera interfaz fueron establecidos desde la instalación del sistema operativo, lo demás lo adicionaremos de una manera similar especificando dirección de red, mascara, interfaces, tipo de bond y parámetros adicionales.

root@elmulo:~# cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.100.51
        netmask 255.255.255.0
        network 192.168.100.0
        broadcast 192.168.100.255
        gateway 192.168.100.254
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8 8.8.4.4
 
auto bond0
 
iface bond0 inet static
    address 172.16.0.151
    netmask 255.255.0.0
    network 172.16.0.0
    slaves eth2 eth3
    bond-mode balance-rr
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200

Necesitamos configurar el modulo del kernel y creamos un archivo dentro de modprobe.d como se muestra a continuación.

root@elmulo:~# cd /etc/modprobe.d/
root@elmulo:/etc/modprobe.d# cat > aliases-bond.conf
alias bond0 bonding
        options bonding mode=0 miimon=100
<CTRL-D>

Levantamos la interfaz recién creada.

root@elmulo:/etc/modprobe.d# cd
root@elmulo:~# ifup bond0

Verificamos los parámetros de red y confirmamos que la interfaz bond esta activa y las interfaces asociadas a este también se encuentran en el mismo estado y se agregan en la información que se despliega junto a la interfaz primaria.

root@elmulo:~# ifconfig
bond0     Link encap:Ethernet  HWaddr 00:21:9b:9f:18:72  
          inet addr:172.16.0.151  Bcast:172.16.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MASTER 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:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
eth0      Link encap:Ethernet  HWaddr 00:21:9b:9f:18:6e  
          inet addr:192.168.100.51  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::221:9bff:fe9f:186e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22819 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3978 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:9070886 (8.6 MiB)  TX bytes:338475 (330.5 KiB)
          Interrupt:36 Memory:d2000000-d2012800 
 
eth2      Link encap:Ethernet  HWaddr 00:21:9b:9f:18:72  
          UP BROADCAST SLAVE 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)
          Interrupt:32 Memory:d6000000-d6012800 
 
eth3      Link encap:Ethernet  HWaddr 00:21:9b:9f:18:72  
          UP BROADCAST SLAVE 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)
          Interrupt:42 Memory:d8000000-d8012800 
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:392 (392.0 B)  TX bytes:392 (392.0 B)

Verificando los registros del sistema vemos que el bond se activo pero no esta operativo debido a que no se han conectado cables de red a los componentes de la LAN.

root@elmulo:~# tail -n 20 -f /var/log/messages
Nov 23 06:25:01 elmulo rsyslogd: [origin software="rsyslogd" swVersion="4.6.4" x-pid="1095" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.
Nov 23 09:57:19 elmulo kernel: [105971.052864] bnx2: eth0 NIC Copper Link is Up, 1000 Mbps full duplex
Nov 23 09:57:19 elmulo kernel: [105971.053236] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Nov 23 10:21:58 elmulo kernel: [107449.542754] Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Nov 23 10:21:58 elmulo kernel: [107449.542758] bonding: MII link monitoring set to 100 ms
Nov 23 10:21:58 elmulo kernel: [107449.544150] bonding: bond0: setting mode to balance-rr (0).
Nov 23 10:21:58 elmulo kernel: [107449.544173] bonding: bond0: Setting MII monitoring interval to 100.
Nov 23 10:21:58 elmulo kernel: [107449.544195] bonding: bond0: Setting up delay to 200.
Nov 23 10:21:58 elmulo kernel: [107449.544210] bonding: bond0: Setting down delay to 200.
Nov 23 10:21:59 elmulo kernel: [107449.561893] bonding: bond0: doing slave updates when interface is down.
Nov 23 10:21:59 elmulo kernel: [107449.561895] bonding: bond0: Adding slave eth2.
Nov 23 10:21:59 elmulo kernel: [107449.561897] bonding bond0: master_dev is not up in bond_enslave
Nov 23 10:21:59 elmulo kernel: [107449.654579] bnx2: eth2: using MSIX
Nov 23 10:21:59 elmulo kernel: [107449.654912] bonding: bond0: enslaving eth2 as an active interface with a down link.
Nov 23 10:21:59 elmulo kernel: [107449.690706] bonding: bond0: doing slave updates when interface is down.
Nov 23 10:21:59 elmulo kernel: [107449.690711] bonding: bond0: Adding slave eth3.
Nov 23 10:21:59 elmulo kernel: [107449.690713] bonding bond0: master_dev is not up in bond_enslave
Nov 23 10:21:59 elmulo kernel: [107449.774441] bnx2: eth3: using MSIX
Nov 23 10:21:59 elmulo kernel: [107449.774768] bonding: bond0: enslaving eth3 as an active interface with a down link.
Nov 23 10:21:59 elmulo kernel: [107449.778043] ADDRCONF(NETDEV_UP): bond0: link is not ready

Conectamos una de las interfaces.

Nov 23 10:33:27 elmulo kernel: [108137.887591] bnx2: eth2 NIC Copper Link is Up, 1000 Mbps full duplex, receive & transmit flow control ON
Nov 23 10:33:27 elmulo kernel: [108137.947373] bonding: bond0: link status up for interface eth2, enabling it in 200 ms.
Nov 23 10:33:28 elmulo kernel: [108138.147249] bonding: bond0: link status definitely up for interface eth2.
Nov 23 10:33:28 elmulo kernel: [108138.147615] ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready

Conectamos la segunda interfaz.

Nov 23 10:48:00 elmulo kernel: [109009.830462] bnx2: eth3 NIC Copper Link is Up, 1000 Mbps full duplex, receive & transmit flow control ON
Nov 23 10:48:00 elmulo kernel: [109009.902823] bonding: bond0: link status up for interface eth3, enabling it in 200 ms.
Nov 23 10:48:00 elmulo kernel: [109010.102699] bonding: bond0: link status definitely up for interface eth3.

Ahora nuestro bond esta completamente activo en modo round-robin, lo podemos verificar con la siguiente instrucción.

root@elmulo:~# cat /sys/class/net/bond0/bonding/mode
balance-rr 0

Cambiaremos el MTU del bond y de las interfaces que lo componen para conectarnos usando Jumbo Frames a nuestro equipo de almacenamiento.

root@elmulo:~# ifconfig eth2 mtu 9000
root@elmulo:~# ifconfig eth3 mtu 9000
root@elmulo:~# ifconfig bond0 mtu 9000

Lista la parte de conexión pasamos a la parte de aplicación instalando el iniciador de iSCSI.

root@elmulo:~# aptitude install open-iscsi
The following NEW packages will be installed:
  open-iscsi 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 332 kB of archives. After unpacking 868 kB will be used.
Get:1 http://mirrors.kernel.org/debian/ squeeze/main open-iscsi amd64 2.0.871.3-2squeeze1 [332 kB]
Fetched 332 kB in 1s (297 kB/s)     
Selecting previously deselected package open-iscsi.
(Reading database ... 15954 files and directories currently installed.)
Unpacking open-iscsi (from .../open-iscsi_2.0.871.3-2squeeze1_amd64.deb) ...
Processing triggers for man-db ...
Setting up open-iscsi (2.0.871.3-2squeeze1) ...

Ponemos el servicio en automático.

root@elmulo:~# vim /etc/iscsi/iscsid.conf
.
node.startup = automatic
.

Reiniciamos el servicio.

root@elmulo:~# /etc/init.d/open-iscsi restart
Unmounting iscsi-backed filesystems: Unmounting all devices marked _netdev.
Disconnecting iSCSI targets:.
Stopping iSCSI initiator service:.
Starting iSCSI initiator service: iscsid.
Setting up iSCSI targets:
iscsiadm: No records found!
.
Mounting network filesystems:.
root@elmulo:~# cat /etc/iscsi/initiatorname.iscsi
## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=iqn.1993-08.org.debian:01:cdfe4ea8ecd0

Utilizaremos el acceso por IQN que lo obtuvimos del archivo initiatorname.iscsi, mas adelante veremos que esta es una de las formas de autenticación de EqualLogic para acceder a un volumen.

InitiatorName=iqn.1993-08.org.debian:01:cdfe4ea8ecd0

Ahora el siguiente paso es crear un volumen en nuestra SAN para poder continuar, lo crearemos con un tamaño de 150 GB, a continuación se muestran los pasos mediante el CLI de EqualLogic que ejemplifican este proceso.

Entramos mediante telnet a la linea de comandos del sistema EqualLogic.

gabriel@giskard:~$ telnet 172.16.0.XXX
Trying 172.16.0.XXX...
Connected to 172.16.0.XXX.
Escape character is '^]'.
 
PS Series Storage Arrays
Unauthorized Access Prohibited
 
login: gabriel
Password:
 
 
           Welcome to Group Manager
 
        Copyright 2001-2011 Dell, Inc.
 
 
 
Grupo2> 
32722:315:EQL2:netmgtd:22-Nov-2012 19:41:16.596159:rcc_util.c:738:INFO:25.2.9:CLI: Login to account gabriel succeeded.

Mediante la instrucción volume create Fotos-Sin 150GB, creamos un volumen llamado Fotos-Sin con un tamaño de 150 GB, que tomara los parámetros predeterminados del sistema.

Grupo2> volume create Fotos-Sin 150GB
Volume creation succeeded.
iSCSI target name is iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850
aed-fotos-sin.
Grupo2> 
32728:10471:EQL2:MgmtExec:22-Nov-2012 19:42:30.709363:VolInfo.cc:79:INFO:8.2.2:Volume 'Fotos-Sin' successfully created.

Para ver la descripción del volumen creado utilizamos la instrucción volume show Fotos-Sin.

Grupo2> volume show Fotos-Sin 
_____________________________ Volume Information ______________________________
Name: Fotos-Sin                        Size: 150GB                            
VolReserve: 150GB                      VolReserveInUse: 0MB                   
ReplReserveInUse: 0MB                  iSCSI Alias: Fotos-Sin                 
iSCSI Name:                            ActualMembers: 1                       
  iqn.2001-05.com.equallogic:0-8a0906- Snap-Warn: 10%                         
  48624a509-b290018545850aed-fotos-sin Snap-Depletion: delete-oldest          
Description:                           Snap-Reserve: 100%                     
Snap-Reserve-Avail: 100% (150GB)       Permission: read-write                 
DesiredStatus: online                  Status: online                         
Connections: 0                         Snapshots: 0                           
Bind:                                  Type: not-replicated                   
ReplicationReserveSpace: 0MB           Replicas: 0                            
ReplicationPartner:                    Pool: default                          
Transmitted-Data: 0MB                  Received-Data: 0MB                     
Pref-Raid-Policy: none                 Pref-Raid-Policy-Status: none          
Thin-Provision: disabled               Thin-Min-Reserve: 0% (0MB)             
Thin-Growth-Warn: 0% (0MB)             Thin-Growth-Max: 0% (0MB)              
ReplicationTxData: 0MB                 MultiHostAccess: disabled              
iSNS-Discovery: disabled               Replica-Volume-Reserve: 0MB            
Thin-Clone: N                          Template: N                            
Administrator:                                                                 
_______________________________________________________________________________
 
 
_______________________________ Access Records ________________________________
 
 
ID  Initiator                     Ipaddress       AuthMethod UserName   Apply-To
 
--- ----------------------------- --------------- ---------- ---------- --------
 
 
 
____________________________ Operations InProgress ____________________________
 
 
ID StartTime            Progress Operation Details                              
 
-- -------------------- -------- ---------------------------------------------- 
 
Grupo2>

Y aquí es donde daremos acceso a nuestro servidor mediante su IQN al volumen de Fotos-Sin, con la siguiente instrucción: volume select Fotos-Sin access create initiator iqn.1993-08.org.debian:01:cdfe4ea8ecd0

Initiator:iqn.1993-08.org.debian:01:cdfe4ea8ecd0
Target: iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850aed-fotos-sin
Grupo2> volume select Fotos-Sin access create initiator iqn.1993-08.org.debian:0
1:cdfe4ea8ecd0
Access control record created with ID 1.
Grupo2> volume select Fotos-Sin access show                                     
ID  Initiator                     Ipaddress       AuthMethod UserName   Apply-To
 
--- ----------------------------- --------------- ---------- ---------- --------
 
1   iqn.1993-08.org.debian:01:cdf *.*.*.*         none                  both    
 
      e4ea8ecd0                                                                 
 
Grupo2>

Volvemos a la parte de nuestro servidor para continuar el proceso y lo haremos lanzando un descubrimiento a la dirección IP de nuestro sistema de almacenamiento para ver los volúmenes a los que tenemos acceso.

root@elmulo:~# iscsiadm -m discovery -t st -p 172.16.0.XXX
172.16.0.XXX:3260,1 iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850aed-fotos-sin
root@elmulo:~# iscsiadm -m node
172.16.0.XXX:3260,1 iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850aed-fotos-sin

Después de descubrir nuestro target iniciamos sesión en el para conectarnos y empezar a trabajar con el como si fuera un disco duro mas en nuestro sistema.

root@elmulo:~# iscsiadm -m node --targetname "iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850aed-fotos-sin" --portal "172.16.0.XXX:3260" --login
Logging in to [iface: default, target: iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850aed-fotos-sin, portal: 172.16.0.XXX,3260]
Login to [iface: default, target: iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850aed-fotos-sin, portal: 172.16.0.XXX,3260]: successful

Después de conectarnos vamos a nuestro storage a ver un poco de sus logs y notamos que efectivamente se conecto usando Jumbo Frames (MTU 9000), using Jumbo Frame length.

32901:10603:EQL2:MgmtExec:25-Nov-2012 00:01:47.137815:targetAttr.cc:759:INFO:7.2.14:iSCSI login to target '172.16.0.XXX:3260, iqn.2001-05.com.equallogic:0-8a0906-48624a509-b290018545850aed-fotos-sin' from initiator '172.16.0.151:50683, iqn.1993-08.org.debian:01:cdfe4ea8ecd0' successful, using Jumbo Frame length.

Con fdisk vemos que tenemos nuestro dispositivo listo para crear una partición en el, nos dice que son 161.1 GB pero nosotros creamos un espacio de 150, lo que pasa que nos lo esta mostrando con tomando como base 1000 y no 1024, 150*1024*1024*1024 = 161061273600 bytes.

root@elmulo:~# fdisk -l
.
.
Disk /dev/sdc: 161.1 GB, 161061273600 bytes
255 heads, 63 sectors/track, 19581 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
Disk /dev/sdc doesn't contain a valid partition table

Creamos una partición primaria de tipo Linux usando todo el espacio disponible.

root@elmulo:~# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x228dfc1d.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
 
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
 
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19581, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-19581, default 19581): 
Using default value 19581
 
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks.

Volvemos a verificar con fdisk y ya nos indica la partición lista, solo queda darle formato con algún sistema de archivos propios de Linux.

root@elmulo:~# fdisk -l
.
.
Disk /dev/sdc: 161.1 GB, 161061273600 bytes
255 heads, 63 sectors/track, 19581 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x228dfc1d
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       19581   157284351   83  Linux

Vamos a dar formato a la partición con el sistema de archivos ext4.

root@elmulo:~# mkfs.ext4 /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
9830400 inodes, 39321087 blocks
1966054 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
1200 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872
 
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Creamos un directorio donde poder montar nuestra nueva partición.

root@elmulo:~# mkdir /U1
root@elmulo:~# mount /dev/sdc1 /U1/
root@elmulo:~# mount
/dev/mapper/elmulo-root on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda1 on /boot type ext2 (rw)
/dev/sdc1 on /U1 type ext4 (rw)

Vemos que esta montada correctamente por lo tanto ya podemos empezar a guardar unos cuantos archivos.

root@elmulo:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/elmulo-root
                     134526224  53112252  74580412  42% /
tmpfs                  2024052         0   2024052   0% /lib/init/rw
udev                   2018716       164   2018552   1% /dev
tmpfs                  2024052         0   2024052   0% /dev/shm
/dev/sda1               233191     15946    204804   8% /boot
/dev/sdc1            154816488    191936 146760336   1% /U1

Antes de empezar a copiar y hacer otras pruebas, veremos que tanto afecto en tamaño al volumen los pasos de crear una partición y dar formato, para eso necesitamos conectarnos a nuestro EqualLogic y sacar unos datos. En el desplegado de información del volumen en la sección de Access Records se encuentra nuestro servidor mediante su IQN y de que actualmente tiene ocupado 3.79 GB debido a la creación de la partición y el formato del sistema de archivos y que debido a esos procedimientos el volumen recibió 2.47 GB de información.

Grupo2> volume show Fotos-Sin 
_____________________________ Volume Information ______________________________
Name: Fotos-Sin                        Size: 150GB                            
VolReserve: 150GB                      VolReserveInUse: 3.79GB                
ReplReserveInUse: 0MB                  iSCSI Alias: Fotos-Sin                 
iSCSI Name:                            ActualMembers: 1                       
  iqn.2001-05.com.equallogic:0-8a0906- Snap-Warn: 10%                         
  48624a509-b290018545850aed-fotos-sin Snap-Depletion: delete-oldest          
Description:                           Snap-Reserve: 100%                     
Snap-Reserve-Avail: 100% (150GB)       Permission: read-write                 
DesiredStatus: online                  Status: online                         
Connections: 1                         Snapshots: 0                           
Bind:                                  Type: not-replicated                   
ReplicationReserveSpace: 0MB           Replicas: 0                            
ReplicationPartner:                    Pool: default                          
Transmitted-Data: 1MB                  Received-Data: 2.47GB                  
Pref-Raid-Policy: none                 Pref-Raid-Policy-Status: none          
Thin-Provision: disabled               Thin-Min-Reserve: 0% (0MB)             
Thin-Growth-Warn: 0% (0MB)             Thin-Growth-Max: 0% (0MB)              
ReplicationTxData: 0MB                 MultiHostAccess: disabled              
iSNS-Discovery: disabled               Replica-Volume-Reserve: 0MB            
Thin-Clone: N                          Template: N                            
Administrator:                                                                 
_______________________________________________________________________________
 
 
_______________________________ Access Records ________________________________
 
 
ID  Initiator                     Ipaddress       AuthMethod UserName   Apply-To
 
--- ----------------------------- --------------- ---------- ---------- --------
 
1   iqn.1993-08.org.debian:01:cdf *.*.*.*         none                  both    
 
      e4ea8ecd0                                                                 
 
 
 
____________________________ Operations InProgress ____________________________

Si tomamos el parámetro de que 150 GB son 161061273600 bytes, y que mediante el comando df el sistema nos muestra que tenemos un disco con un tamaño de 154816488 kB que son 158532083712 bytes, tenemos una diferencia de 2529189888 bytes que son 2.36 GB aproximadamente los cuales se ven disminuidos como resultado de los procesos de partición y formato. Ahora vamos a realizar una prueba de copiado para lo cual generaremos un archivo de 50 GB y lo copiaremos en nuestro nuevo almacenamiento.

root@elmulo:~# dd if=/dev/zero of=/tmp/archivo50G bs=1G count=50
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 548.544 s, 97.9 MB/s
root@elmulo:~# ls -l /tmp/
total 52480056
-rw-r--r-- 1 root root 53687091200 Oct  7 19:58 archivo50G
root@elmulo:~# cp /tmp/archivo50G /U1/

Le llevo 7 minutos copiar 50 GB mediante el comando cp, vamos a ver cuanto le lleva copiar los mismos 50 GB directamente con el comando dd.

root@elmulo:~# dd if=/dev/zero of=/U1/archivo50G-DD bs=1G count=50
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 433.233 s, 124 MB/s

Nos arroja 433 segundos que son poco mas que 7 minutos que es el mismo tiempo de la primer copia, vemos el estado del volumen que muestra ya su espacio ocupado.

Grupo2> show volume Fotos-Sin
_____________________________ Volume Information ______________________________
Name: Fotos-Sin                        Size: 150GB                            
VolReserve: 150GB                      VolReserveInUse: 103.74GB              
ReplReserveInUse: 0MB                  iSCSI Alias: Fotos-Sin                 
iSCSI Name:                            ActualMembers: 1                       
  iqn.2001-05.com.equallogic:0-8a0906- Snap-Warn: 10%                         
  48624a509-b290018545850aed-fotos-sin Snap-Depletion: delete-oldest          
Description:                           Snap-Reserve: 100%                     
Snap-Reserve-Avail: 100% (150GB)       Permission: read-write                 
DesiredStatus: online                  Status: online                         
Connections: 1                         Snapshots: 0                           
Bind:                                  Type: not-replicated                   
ReplicationReserveSpace: 0MB           Replicas: 0                            
ReplicationPartner:                    Pool: default                          
Transmitted-Data: 1MB                  Received-Data: 102.49GB                
Pref-Raid-Policy: none                 Pref-Raid-Policy-Status: none          
Thin-Provision: disabled               Thin-Min-Reserve: 0% (0MB)             
Thin-Growth-Warn: 0% (0MB)             Thin-Growth-Max: 0% (0MB)              
ReplicationTxData: 0MB                 MultiHostAccess: disabled              
iSNS-Discovery: disabled               Replica-Volume-Reserve: 0MB            
Thin-Clone: N                          Template: N                            
Administrator:                                                                 
_______________________________________________________________________________

Borramos los archivos anteriores y volvemos a crear un archivo de 100 GB.

root@elmulo:~# dd if=/dev/zero of=/U1/archivo100G-DD bs=1G count=100
100+0 records in
100+0 records out
107374182400 bytes (107 GB) copied, 869.745 s, 123 MB/s

Le tomo 14 minutos y medio la copia de 100 GB, el tiempo concuerda con que seria el doble.

Ya con esto realizado, podemos instalar un servicio como SAMBA, FTP, como disco duro para maquinas virtuales o simplemente para respaldos de archivos. Más adelante pretendo documentar un poco mas cuestiones como recuperar archivos a partir de un snapshot o incrementar el tamaño del volumen.

Referencias para saber más:

http://phenobarbital.wordpress.com/2011/06/22/linux-guia-rapida-de-network-bonding-en-debian/
http://wiki.debian.org/Bonding
http://www.howtoforge.com/using-iscsi-on-debian-lenny-initiator-and-target

Manual Transfer Utility

Volvemos nuevamente con este asunto del equipo de almacenamiento EqualLogic y la replicación de volúmenes.

Vamos a comentar el siguiente escenario; anteriormente en otro escrito de este blog se realizo la replica de volúmenes entre dos SAN EqualLogic una en la ciudad de México y otra en la ciudad de Querétaro. Debido a que el enlace WAN es pequeño para enviar una replicación de un volumen de al menos 200 GB optamos por realizar una replica manual mediante la utilidad MTU.

La primera copia del equipo de la ciudad de México sera apoyándonos con la utilidad gráfica sin embargo la computadora del lado de Querétaro es un poco limitada y el navegador al usar esta interfaz gráfica se bloquea debido a que la aplicación de EqualLogic requiere la totalidad del procesador en este equipo por lo que vamos a describir un poco mas el uso de la consola y a meter instrucciones directamente a la SAN.

Bueno el respaldo lo tenemos en un disco duro externo mediante USB.

Aquí vemos el proceso de copiado mediante el modo gráfico desde una computadora con Windows XP.

Copiado finalizado es hora de transportarnos a Querétaro, en un autobus de estación a estación el tiempo de viaje es de al menos dos horas y media (sin trafico) entre las dos ciudades en cuestión.

Utilizaremos otro equipo con Windows XP para los trabajos y lo primero que necesitamos es instalar la aplicación de MTU en el equipo y mas importante que si esta no detecta el iniciador iSCSI en nuestro equipo lo instalara y obtendremos un IQN para nuestro equipo y asi podremos comunicar nuestra computadora con la SAN EqualLogic.

Antes que nada necesitamos verificar el estado de la replicación y dar permisos de acceso al equipo que se encargara de subir el respaldo. Iniciamos el acceso por telnet a una de las direcciones IP asignadas (no la IP de grupo) con un usuario con privilegios de administrador.

gabriel@tyrael:~$ telnet 172.17.0.102
Trying 172.17.0.102...
Connected to 172.17.0.102.
Escape character is '^]'.
 
PS Series Storage Arrays
Unauthorized Access Prohibited
 
login: gabriel
Password:
 
 
           Welcome to Group Manager
 
        Copyright 2001-2011 Dell, Inc.
 
 
 
Grupo3> 
831:22:EQL3:netmgtd:12-Apr-2012 11:15:55.620023:rcc_util.c:738:INFO:25.2.9:CLI: Login to account gabriel succeeded.

Verificamos que el proceso de replicación esta en progreso ya que desde el grupo primario se especifico que seria una replicación manual.

Grupo3> partner select Grupo2 inbound-replicaset show 
Name            ReservedSpace FreeSpace     Replicas Status                    
--------------- ------------- ------------- -------- ------------------------- 
EQL2VMESXi01.1  814.45GB      407.22GB      1        in-progress               
Correo.1        438.19GB      219.09GB      1        in-progress

Lo que haremos a continuación es darle permisos de acceso al volumen que se esta replicando al equipo que usaremos para iniciar la transferencia el acceso se lo daremos mediante el IQN de este mismo.

Grupo3> partner select Grupo2 inbound-replicaset select EQL2VMESXi01.1 access create initiator iqn.1991-05.com.microsoft:icverify-net.anaseguros.com.mx
Access control record created with ID 2.
Grupo3> 
837:209:EQL3:MgmtExec:12-Apr-2012 11:26:42.340210:targetAttr.cc:759:INFO:7.2.13:iSCSI login to target '172.17.0.104:3260, iqn.2001-05.com.equallogic:0-8a0906-b9924a509-3830018537a4f845-eql2vmesxi01.1-2012-04-10-11:25:22.52' from initiator '172.17.0.164:1257, iqn.1991-05.com.microsoft:icverify-net.anaseguros.com.mx' successful, using standard frame length.

Realizados los pasos anteriores podemos iniciar la aplicación donde nos preguntara la operación a realizar, la replica asociada y la ubicación del archivo que deseamos subir al equipo que se encuentra en un disco externo USB, la imagen muestra la conclusión de este proceso que se llevo aproximadamente ocho horas.

Terminado todo el proceso anterior volvemos a la consola de la SAN para finalizar la replicación como primer paso verificamos los accesos hacia al volumen con el que estamos trabajando.

Grupo3> partner select Grupo2 inbound-replicaset select EQL2VMESXi01.1 access show 
ID  Initiator                     Ipaddress       AuthMethod UserName   Apply-To
 
--- ----------------------------- --------------- ---------- ---------- --------
 
1                                 *.*.*.*         chap-local Grupo2     both    
 
2   iqn.1991-05.com.microsoft:icv *.*.*.*         none                  snapshot
 
      erify-net.anaseguros.com.mx

Borramos el acceso del equipo hacia el volumen utilizando el ID del iniciador como medida de seguridad y volvemos a verificar los accesos para verificar la adecuada eliminación del ID.

Grupo3> partner select Grupo2 inbound-replicaset select EQL2VMESXi01.1 access delete 2
Access control record deletion succeeded.
Grupo3> partner select Grupo2 inbound-replicaset select EQL2VMESXi01.1 access show    
ID  Initiator                     Ipaddress       AuthMethod UserName   Apply-To
 
--- ----------------------------- --------------- ---------- ---------- --------
 
1                                 *.*.*.*         chap-local Grupo2     both

Después de borrar el acceso tenemos estos mensajes diciéndonos que la conexión fue cerrada y que el equipo que utilizamos no encuentra su objetivo ya que le quitamos el acceso.

Grupo3> 
864:210:EQL3:MgmtExec:12-Apr-2012 19:31:25.930211:targetAttr.cc:1055:INFO:7.2.15:iSCSI session to target '172.17.0.104:3260, iqn.2001-05.com.equallogic:0-8a0906-b9924a509-3830018537a4f845-eql2vmesxi01.1-2012-04-10-11:25:22.52' from initiator '172.17.0.164:1257, iqn.1991-05.com.microsoft:icverify-net.anaseguros.com.mx' was closed.
        Volume or snapshot went offline.
 
866:212:EQL3:MgmtExec:12-Apr-2012 19:31:25.950213:targetAttr.cc:517:ERROR:7.4.3:iSCSI login to target '172.17.0.100:3260, iqn.2001-05.com.equallogic:0-8a0906-b9924a509-3830018537a4f845-eql2vmesxi01.1-2012-04-10-11:25:22.52' from initiator '172.17.0.164:1405, iqn.1991-05.com.microsoft:icverify-net.anaseguros.com.mx' failed for the following reason:
        Requested target not found.

Una vez borrado el acceso nos disponemos decirle al equipo que la transferencia manual ha sido completada para que los dos grupos se sincronicen y den por buena la replica.

Grupo3> partner select Grupo2 inbound-replicaset select EQL2VMESXi01.1 manual-xfer done

Verificamos el estado de las replicas y satisfactoriamente tenemos lista la primera de las dos que realizaremos.

Grupo3> partner select Grupo2 inbound-replicaset show
Name            ReservedSpace FreeSpace     Replicas Status                    
--------------- ------------- ------------- -------- ------------------------- 
EQL2VMESXi01.1  814.45GB      407.22GB      1        ready                     
Correo.1        438.19GB      219.09GB      1        in-progress               
 
Grupo3>

Después de esto una segunda replica solo reflejara los cambios de manera incremental y estos se podrían manejar de acuerdo a los tiempos que te permita tu enlace, de lo contrario puedes hacer este tipo de replicas las veces que necesites siempre y cuando la información a guardar no la necesites tan actualizada.

Más información.

110-0122-EN-R3_MTU_UserGuide

Probando Red Hat Enterprise Virtualization 3

Instalando RHEV Manager.

Toda la información referente esta aquí: Red Hat Enterprise Virtualization 3.0 Installation Guide

Partimos de una instalación básica de Red Hat 6 y nos referimos a que no instalaremos entorno gráfico ni cosas inútiles para el sistema.

Una vez instalado lo registramos (rhn_register) y actualizamos mediante YUM siguiendo las pautas del manual de instalación, antes de ejecutar el comando principal de instalación asegurate de adicionar los siguientes canales de Red Hat Network al sistema.

[root@rhevm3b ~]# rhn-channel --add --channel=rhel-x86_64-server-6-rhevm-3-beta                                                                                                                                                                                                      
[root@rhevm3b ~]# rhn-channel --add --channel=rhel-x86_64-server-supplementary-6
[root@rhevm3b ~]# rhn-channel --add --channel=rhel-x86_64-server-6-rhevm-3-jboss-5-beta
[root@rhevm3b ~]# rhn-channel --list
rhel-x86_64-server-6
rhel-x86_64-server-6-rhevm-3-beta
rhel-x86_64-server-6-rhevm-3-jboss-5-beta
rhel-x86_64-server-supplementary-6
[root@rhevm3b ~]# yum remove classpathx-jaf
[root@rhevm3b ~]# yum upgrade

A instalar la aplicación.

[root@rhevm3b ~]# yum install rhevm
Dependencies Resolved
 
====================================================================================================================================================================================
 Package                                         Arch                Version                                           Repository                                              Size
====================================================================================================================================================================================
Installing:
 rhevm                                           x86_64              3.0.0_0001-51.el6                                 rhel-x86_64-server-6-rhevm-3-beta                       66 k
Installing for dependencies:
 alsa-lib                                        x86_64              1.0.22-3.el6                                      rhel-x86_64-server-6                                   370 k
 antlr                                           noarch              2.7.7-7.ep5.el6                                   rhel-x86_64-server-6-rhevm-3-jboss-5-beta              516 k
 apache-cxf                                      noarch              2.2.12-4.patch_02.1.ep5.el6                       rhel-x86_64-server-6-rhevm-3-jboss-5-beta              8.0 M
 atk                                             x86_64              1.28.0-2.el6                                      rhel-x86_64-server-6                                   191 k

Y paciencia por que descargaremos varios paquetes.

 xml-security                                    noarch              1.4.3-6.ep5.el6                                   rhel-x86_64-server-6-rhevm-3-jboss-5-beta              427 k
 xz                                              x86_64              4.999.9-0.3.beta.20091007git.el6                  rhel-x86_64-server-6                                   137 k
 yum-plugin-versionlock                          noarch              1.1.30-10.el6                                     rhel-x86_64-server-6                                    26 k
 zip                                             x86_64              3.0-1.el6                                         rhel-x86_64-server-6                                   260 k
 
Transaction Summary
====================================================================================================================================================================================
Install     338 Package(s)
 
Total download size: 664 M
Installed size: 0  
Is this ok [y/N]:

Hay que asegurarnos de tener instalado nslookup y el cliente de ssh, ya que si hacemos la instalación básica a pesar de instalar rhevm y la gran cantidad de dependencias que tiene, estos paquetes no se instalan y la ausencia de nslookup provoca errores en la configuración de RHEVM y posteriores operaciones donde interviene la consulta a un servidor DNS, el cliente de SSH es importante al agregar los hosts a la interfaz gráfica en concreto marca un error en la instalación y no puede finalizar la operación. En lo personal me gusta hacer instalaciones muy básicas e ir agregando los paquetes que resulten necesarios así uno se puede dar cuenta con mas detalle de los puntos que a veces una instalación omite por asumir que tienes una instalación completa.

yum install bind-utils
yum install openssh-clients

Empezamos con la configuración.

[root@rhevm3b ~]# rhevm-setup 
Welcome to RHEV Manager setup utility
HTTP Port  [8080] : 
HTTPS Port  [8443] : 
Host fully qualified domain name, note that this name should be fully resolvable  [rhevm3b.ananet.com.mx] : 
rhevm3b.ananet.com.mx did not resolve into an IP address
User input failed validation, do you still wish to use it? (yes|no): no
Host fully qualified domain name, note that this name should be fully resolvable  [rhevm3b.ananet.com.mx] : 
Password for Administrator (admin@internal) :
Confirm password :
Database password (required for secure authentication with the locally created database) :
Warning: Weak Password.
Confirm password :
Organization Name for the Certificate: Demerzel Inc 
The default storage type you will be using  ['NFS'| 'FC'| 'ISCSI']  [NFS] : 
Should the installer configure NFS share on this server to be used as an ISO Domain? ['yes'| 'no']  [yes] : no
Firewall ports need to be opened.
You can let the installer configure iptables automatically overriding the current configuration. The old configuration will be backed up.
Alternately you can configure the firewall later using an example iptables file found under /usr/share/rhevm/conf/iptables.example
Configure iptables ? ['yes'| 'no']: yes
 
RHEV Manager will be installed using the following configuration:
=================================================================
http-port:                     8080
https-port:                    8443
host-fqdn:                     rhevm3b.ananet.com.mx
auth-pass:                     ********
db-pass:                       ********
org-name:                      Demerzel Inc
default-dc-type:               NFS
override-iptables:             yes
Proceed with the configuration listed above? (yes|no): yes
 
Installing:
Creating JBoss Profile...                                [ DONE ]
Creating CA...                                           [ DONE ]
Setting Database Security...                             [ DONE ]
Creating Database...                                     [ DONE ]
Updating the Default Data Center Storage Type...         [ DONE ]
Editing JBoss Configuration...                           [ DONE ]
Editing RHEV Manager Configuration...                    [ DONE ]
Configuring Firewall (iptables)...                       [ DONE ]
Starting JBoss Service...                                [ DONE ]
 
 **** Installation completed successfully ******
 
     (Please allow RHEV Manager a few moments to start up.....)
 
 
Additional information:
 * There is less than 4 GB available free memory on the Host.
It is  recommended to have at least 4 GB available memory to run the RHEV Manager.
 * SSL Certificate fingerprint: 46:BD:6D:90:C9:A6:62:6B:15:38:87:41:E6:64:27:85:FD:3B:91:B3
 * SSH Public key fingerprint: 7b:81:63:f0:88:83:db:f7:c2:51:cd:fd:0d:2c:75:d4
 * The firewall has been updated, the old iptables configuration file was saved to /usr/share/rhevm/conf/iptables.backup.113527-12212011_1497
 * The installation log file is available at: /var/log/rhevm/rhevm-setup_2011_12_21_05_04_50.log
 * Please use the user "admin" and password specified in order to login into RHEV Manager
 * To configure additional users, first configure authentication domains using the 'rhevm-manage-domains' utility
 * To access RHEV Manager please go to the following URL: http://rhevm3b.ananet.com.mx:8080

En la configuración si no contamos con nslookup nos saldra este mensaje de advertencia que se aprecia en las lineas anteriores.

Host fully qualified domain name, note that this name should be fully resolvable  [rhevm3b.ananet.com.mx] : 
rhevm3b.ananet.com.mx did not resolve into an IP address
User input failed validation, do you still wish to use it? (yes|no): no

Si verificamos un poco el log de instalación veremos como no puede hacer una correcta verificación de la IP mediante el nombre del host que le proporcionamos.

2011-12-21 05:05:00::DEBUG::common_utils::165::root:: cmd = /usr/bin/nslookup rhevm3b.ananet.com.mx
2011-12-21 05:05:00::DEBUG::common_utils::170::root:: output =
2011-12-21 05:05:00::DEBUG::common_utils::171::root:: stderr = /bin/sh: /usr/bin/nslookup: No such file or directory
 
2011-12-21 05:05:00::DEBUG::common_utils::172::root:: retcode = 127
2011-12-21 05:05:00::ERROR::rhevm_validators::136::root:: Failed to resolve rhevm3b.ananet.com.mx
2011-12-21 05:05:00::DEBUG::rhevm-setup::519::root:: asking user: User input failed validation, do you still wish to use it? (yes|no):
2011-12-21 11:32:43::DEBUG::rhevm-setup::523::root:: user answered: no

Instalamos el paquete bind-utils para obtener nslookup y volvemos a configurar la aplicación que ahora se ejecuta sin error.

[root@rhevm3b ~]# yum install bind-utils
2011-12-21 11:32:44::INFO::rhevm_validators::122::root:: Validating rhevm3b.ananet.com.mx as a FQDN
2011-12-21 11:32:44::INFO::rhevm_validators::96::root:: validating rhevm3b.ananet.com.mx as a valid domain string

Después de esta aclaración realizamos lo que comenta la ultima linea de configuración: * To access RHEV Manager please go to the following URL: http://rhevm3b.ananet.com.mx:8080

Probando la nueva interfaz de RHEV Manager.

Tenemos que usar el navegador Internet Explorer en su versión 8 la versión 9 en lo personal no me ha funcionado siempre marcar errores al cargar la aplicación.

La cuestión de los certificados.

La interfaz de administración.

Instalando los hosts.

La pantalla de bienvenida.

Hay un cambio importante en el instalador de los host, el instalador tiene un poco de color (solo un poco) y eso da la sensación de que sera una instalación fácil y amigable.

En la primera parte de la instalación solo necesitamos proveer el almacenamiento donde se instalara la imagen y una contraseña de administración que nos pedirá posteriormente para activar la configuración del host.

Como primer paso debemos configurar nuestra red especificando los parámetros a nuestra tarjeta de red principal (eth0), las demás interfaces las manejaremos desde el manager.

Imagen del estado de la red del host, vemos la primera interfaz conectada, el hostname especificado y el DNS.

Con el manager instalado, le pasamos los parametros al host para agregarse a este.

En nuestro manager veremos que nos aparece el host esperando que se apruebe su instalación y se pueda agregar a nuestro cluster.

Nos pide verificar los datos del host como el nombre y su dirección IP así como el datacenter y el cluster al que va a pertenecer.

Al agregar el primer host se presenta este error y nunca se termina de instalar, el mensaje es descriptivo nos falta en el servidor de RHEVM el cliente de ssh.

Host demerzel.ananet.com.mx installation failed. SshClient not started. Please call start() method before connecting to a server.
[root@rhevm3b ~]# yum install openssh-clients

Después de esto hay que borrar el host que se quedo a medio camino y volver a agregarlo de forma manual, posteriores host se agregaran de forma automática.

Pasamos a la parte de configuración de la red y almacenamiento.

Esta parte donde se encuentran los parámetros de red esta mas trabajada y con mas opciones con respecto a la creación de un bond de tarjetas para la red iSCSI, contamos con dos hosts a cada uno de ellos le vamos a crear un bond con las interfaces cuatro y cinco.

Como el datacenter lo creamos para iSCSI vamos a usar un servidor e instalar un target en el para simular la presencia de una SAN, como se ha descrito en esta pagina tenemos acceso a SAN EqualLogic pero por el momento no estan disponibles, asi que utilizaremos un servidor HP Proliant que utilizaremos como target basandonos en esta guia: using-iscsi-on-debian-lenny-initiator-and-target.

Con un volumen de 30 GB basta, para la parte de autenticación utilizamos CHAP.

Una vez acreditados estamos listos para aceptar el lun y activarlo en nuestro datacenter, alguno de los host asumirá el rol de SPM.

Agregando el storage ISO.

Desde el datacenter lo activamos para iniciar la carga de las imágenes ISO que necesitemos.

Antes de cualquier instalación con Windows no se nos debe olvidar descargar el driver virtio-win-1_4_0-1.vfd y almacenarlo igual en el storage ISO, vamos a instalar un Windows 7 Professional de 64 bits como primera maquina virtual.

root@tyrael:/home/gabriel/Downloads# cp virtio-win-1_4_0-1.vfd /home/gabriel/RHEV/3dbdd243-acd9-4e37-9691-7f98cfd98929/images/11111111-1111-1111-1111-111111111111/
root@tyrael:/home/gabriel/Downloads# chown 36:36 /home/gabriel/RHEV/3dbdd243-acd9-4e37-9691-7f98cfd98929/images/11111111-1111-1111-1111-111111111111/virtio-win-1_4_0-1.vfd
root@tyrael:/home/gabriel# mv es_windows_7_professional_x64_dvd_x15-65843.iso RHEV/3dbdd243-acd9-4e37-9691-7f98cfd98929/images/11111111-1111-1111-1111-111111111111/
root@tyrael:/home/gabriel# chown 36:36 RHEV/3dbdd243-acd9-4e37-9691-7f98cfd98929/images/11111111-1111-1111-1111-111111111111/es_windows_7_professional_x64_dvd_x15-65843.iso
root@tyrael:/home/gabriel# ls -l RHEV/3dbdd243-acd9-4e37-9691-7f98cfd98929/images/11111111-1111-1111-1111-111111111111/
total 3106344
-rwxr--r-- 1 36 36 3176308736 Aug 17  2009 es_windows_7_professional_x64_dvd_x15-65843.iso
-rw-r--r-- 1 36 36    1474560 Feb  3 13:30 virtio-win-1_4_0-1.vfd
root@tyrael:/home/gabriel#

Iniciamos la creación de nuestra maquina virtual asignando nombre, tipo de sistema operativo, memoria RAM, núcleos de procesador, disco duro, tarjeta de red, cluster y datacenter.

En los equipos con Windows es importante seleccionar la opción Run Once con el fin de especificar la unidad A que contiene los drivers virtio para poder reconocer el disco duro asignado.

Podemos tomar el controlador para la red desde la unidad A como mencionamos anteriormente, y nuestra maquina virtual ya tiene acceso a Internet.

Aqui otro punto donde el DNS es importante para nuestra aplicación, ya que tenemos dos hosts vamos a verificar la migración de la maquina virtual de un host a otro.

Al iniciar la migración de la maquina virtual esta no se logra y obtenemos los siguientes mensajes acerca del proceso:

Starting migration of VM Win7 from Host giskard.ananet.com.mx to Host demerzel.ananet.com.mx (User: admin@internal.).
Migration failed due to Error: Migration destination has an invalid hostname (VM: Win7, Source Host: giskard.ananet.com.mx). Trying to migrate to another Host.
Migration failed due to Error: Migration destination has an invalid hostname (VM: Win7, Source Host: giskard.ananet.com.mx).

Verificando en los registros del administrador podemos observar lo siguiente:

2012-02-03 18:04:10,709 ERROR [org.ovirt.engine.core.vdsbroker.VdsUpdateRunTimeInfo] (QuartzScheduler_Worker-54) Rerun vm 83cdad51-2ff3-49bc-bab2-51720159298a. Called from vds giskard.ananet.com.mx
2012-02-03 18:04:10,714 INFO  [org.ovirt.engine.core.vdsbroker.vdsbroker.MigrateStatusVDSCommand] (pool-15-thread-1877) START, MigrateStatusVDSCommand(vdsId = 9cfbe6de-4b9b-11e1-a5da-ff6f684fbc39, vmId=83cdad51-2ff3-49bc-bab2-51720159298a), log id: 88c9ab6
2012-02-03 18:04:10,719 INFO  [org.ovirt.engine.core.vdsbroker.vdsbroker.BrokerCommandBase] (pool-15-thread-1877) Command org.ovirt.engine.core.vdsbroker.vdsbroker.MigrateStatusVDSCommand return value 
 Class Name: org.ovirt.engine.core.vdsbroker.vdsbroker.StatusOnlyReturnForXmlRpc
mStatus                       Class Name: org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc
mCode                         39
mMessage                      Migration destination has an invalid hostname
 
 
2012-02-03 18:04:10,719 INFO  [org.ovirt.engine.core.vdsbroker.vdsbroker.BrokerCommandBase] (pool-15-thread-1877) Vds: giskard.ananet.com.mx
2012-02-03 18:04:10,719 ERROR [org.ovirt.engine.core.vdsbroker.VDSCommandBase] (pool-15-thread-1877) Command MigrateStatusVDS execution failed. Exception: VDSErrorException: VDSGenericException: VDSErrorException: Failed in vdscommand to MigrateStatusVDS, error = Migration destination has an invalid hostname
2012-02-03 18:04:10,719 INFO  [org.ovirt.engine.core.vdsbroker.vdsbroker.MigrateStatusVDSCommand] (pool-15-thread-1877) FINISH, MigrateStatusVDSCommand, log id: 88c9ab6
2012-02-03 18:04:10,729 WARN  [org.ovirt.engine.core.bll.MigrateVmCommand] (pool-15-thread-1877) CanDoAction of action MigrateVm failed. Reasons:ACTION_TYPE_FAILED_VDS_VM_CLUSTER,VAR__ACTION__MIGRATE,VAR__TYPE__VM

Tenemos que asegurarnos que en el servidor DNS que utilicemos tengamos creados correctamente los registros de los equipos que utilizaremos tanto los hosts como del manager, de esta manera lograremos que en una migración si existen errores sean atribuidos a otras cosas y no a algo tan simple como un registro DNS.

Starting migration of VM Win7 from Host giskard.ananet.com.mx to Host demerzel.ananet.com.mx (User: admin@internal.).
Migration complete (VM: Win7, Source Host: giskard.ananet.com.mx).

El entorno de instalación de los servidores, el administrador se ejecuta como maquina virtual mediante VMware Player, el servidor NFS se ejecuta en mi laptop y el servidor que se ve abajo funciona como almacén iSCSI. Los dos conmutadores representan la separación entre la red de área local iSCSI y la de datos.

Necesitas al menos tres componentes (Manager, Host, Storage) para levantar este sistema de virtualización ya que a diferencia de VMware o Citrix el administrador de RedHat se debe instalar aparte.

En cada host no he podido terminar lo referente a el “Power Management”, algo en la configuración estoy omitiendo cuando lo averigüe lo pondremos por aquí.

Instalando VMware ESXi 4.1.

Vamos a instalar en un servidor Power Edge Dell R910, el sistema de virtualización de VMware ESXi 4.1, las características de este equipo lo hacen idóneo para este tipo de sistemas ya que son servidores con mucha capacidad tanto de almacenamiento, procesamiento y desempeño.

Parte frontal del equipo donde se aprecian los tres discos duros que tiene, estos mismos están en un RAID 5 manejados por una controladora HPERC 700.

Power Edge R910

Con la parte superior descubierta donde se identifican los zócalos de los CPU y módulos de memoria, este equipo en particular cuenta con 128 GB de memoria RAM y un par de procesadores Intel Xeon X7560.

Cuatro fuentes de poder.

Internal DUAL SD module, mas información acerca de este modulo aquí: SD module.

Cuatro NIC integradas.

Dos NIC mediante una tarjeta PCI.

Como podemos ver es un gran equipo, capaz e interesante para realizar experimentos con VMware.

Asterisk, Sangoma A101 y OpenR2.

Instalaremos Asterisk, DAHDI, OpenR2 y WANPIPE para configurar un enlace telefónico E1 de TELMEX en México, sera la tercera guía rápida que hago cada una con distintas tarjetas, Digium y OpenVox.
El sistema operativo que utilizaremos sera Linux Red Hat Enterprise Linux 5.6 para arquitectura de 64 bits, el equipo donde desarrollaremos las pruebas es un HP Proliant ML150, una tarjeta Sangoma A101 1-port T1/E1/J1 y conectores para los coaxiales para la conversión a RJ45. Instalaremos el sistema y utilizaremos únicamente paquetes que vienen junto con los discos de instalación, no usaremos yum para instalar ni actualizar paquetes principalmente para verificar los paquetes que son necesarios para compilar asterisk, dahdi y wanpipe (puedes utilizar CentOS por aquello de la licencia de RedHat).

No cubriremos la instalación de Red Hat hay demasiada información en la red para consultar solo hacemos mención que se instala sin entorno gráfico y demás aplicaciones no necesarias para un servidor de las características mencionadas. Los paquetes los tomaremos y los instalaremos usando la imagen ISO de RHEL montándolo en un directorio para instalarlos mediante RPM, ya que tenemos instalado todo el sistema operativo y conectado adecuadamente a una red con acceso a Internet procederemos a lo siguiente:

Crearemos un directorio denominado IPBX dentro de /usr/src que sera nuestro directorio de instalación, dentro de el crearemos otro directorio denominado Disco donde montaremos la ISO de instalación de Red Hat, para acceder a los paquetes.

[root@asterisksangoma ~]# mkdir /usr/src/IPBX
[root@asterisksangoma ~]# cd /usr/src/IPBX/
[root@asterisksangoma IPBX]# mkdir Disco
[root@asterisksangoma IPBX]# mount -t iso9660 -o loop rhel-server-5.6-x86_64-dvd.iso Disco/
[root@asterisksangoma IPBX]# cd Disco/Server/

Estos son los paquetes que tuve que instalar para la compilación de wanpipe, dahdi, asterisk y openr2, hay dependencias entre ellos por lo tanto es necesario instalarlos todos, con yum o createrepo es mas automático sin embargo no son muchos paquetes y de esta manera uno se da cuenta de los necesarios.

[root@asterisksangoma Server]# rpm -ivh kernel-devel-2.6.18-238.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh ncurses-devel-5.5-24.20060715.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh ncurses-5.5-24.20060715.x86_64.rpm *
[root@asterisksangoma Server]# rpm -ivh kernel-headers-2.6.18-238.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh glibc-headers-2.5-58.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh glibc-devel-2.5-58.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh gcc-4.1.2-50.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh flex-2.5.4a-41.fc6.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh patch-2.5.4-31.el5.x86_64.rpm *
[root@asterisksangoma Server]# rpm -ivh libtermcap-devel-2.0.8-46.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh bison-2.3-2.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh imake-1.0.2-3.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh autoconf-2.59-12.noarch.rpm
[root@asterisksangoma Server]# rpm -ivh automake-1.9.6-2.3.el5.noarch.rpm
[root@asterisksangoma Server]# rpm -ivh libtool-1.5.22-7.el5_4.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh libstdc++-devel-4.1.2-50.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh gcc-c++-4.1.2-50.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh slang-devel-2.0.6-4.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh newt-devel-0.52.2-15.el5.x86_64.rpm 
[root@asterisksangoma Server]# rpm -ivh zlib-devel-1.2.3-3.x86_64.rpm 
[root@asterisksangoma Server]# rpm -ivh libxml2-devel-2.6.26-2.1.2.8.el5_5.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh e2fsprogs-devel-1.39-23.el5_5.1.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh keyutils-libs-devel-1.2-1.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh libsepol-devel-1.15.2-3.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh libselinux-devel-1.33.4-5.7.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh krb5-devel-1.6.1-55.el5.x86_64.rpm
[root@asterisksangoma Server]# rpm -ivh openssl-devel-0.9.8e-12.el5_5.7.x86_64.rpm

En el directorio de IPBX descargaremos las ultimas versiones de cada una de las aplicaciones que vamos a utilizar, para este caso usaremos Wanpipe 3.5.20, Asterisk 1.8.4, DAHDI linux 2.4.1.2, DAHDI tools 2.4.1 y OpenR2 1.3.1.

[root@asterisksangoma IPBX]# wget ftp://ftp.sangoma.com/linux/current_wanpipe/wanpipe-3.5.20.tgz
[root@asterisksangoma IPBX]# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases/dahdi-linux-2.4.1.2.tar.gz
[root@asterisksangoma IPBX]# wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.4.1.tar.gz
[root@asterisksangoma IPBX]# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8.4.tar.gz
[root@asterisksangoma IPBX]# wget http://openr2.googlecode.com/files/openr2-1.3.1.tar.gz

Antes que nada debemos conectar al equipo la tarjeta y verificar que se reconocida por Linux, mediante lspci verificamos que adecuadamente el sistema operativo la reconoció y nos muestra donde esta conectada físicamente.
La tarjeta en cuestión:
A102
Puerto PCI del equipo.

[root@asterisksangoma ~]# lspci | grep Net
07:00.0 Network controller: Sangoma Technologies Corp. A200/Remora FXO/FXS Analog AFT card
07:01.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5703X Gigabit Ethernet (rev 02)

Procedemos con la instalación de los módulos de DAHDI y posteriormente la instalación de Wanpipe ya que vamos a utilizar DAHDI especificamos al script de instalación el parámetro dahdi.

[root@asterisksangoma IPBX]# tar xfz dahdi-linux-2.4.1.2.tar.gz
[root@asterisksangoma IPBX]# cd dahdi-linux-2.4.1.2
[root@asterisksangoma dahdi-linux-2.4.1.2]# make
[root@asterisksangoma dahdi-linux-2.4.1.2]# make install
[root@asterisksangoma dahdi-linux-2.4.1.2]# cd ..
 
[root@asterisksangoma IPBX]# tar xfz wanpipe-3.5.20.tgz
[root@asterisksangoma IPBX]# cd wanpipe-3.5.20


El script de instalación verificara los componentes necesarios como son paquetes, librerías del kernel utilizado y el directorio de DAHDI a utilizar.

[root@asterisksangoma wanpipe-3.5.20]# ./Setup dahdi
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
WANPIPE INSTALLATION FOR DAHDI
 
You are about to install WANPIPE TDM Voice drivers
for Asterisk/Dahdi framework.
 
You will be prompted for path to DAHDI source.
 
Wanpipe drivers will compile into dahdi WITHOUT any
dahdi patching or need to recompile dahdi modules.
 
You must have Linux Kernel Headers along with
full development tools (i.e. GNU C compiler and utilities)
installed in order to be able to install this product.
 
If you have previoulsy installed WANPIPE, this release
will overrite/upgrade full release without the need to
uninstall first!
 
IMPORTANT:
It is always recommended to say YES to all options
prompted during the install!
 
Please visit: http://wiki.sangoma.com for more info.
 
Would you like to install WANPIPE now? [y] (y/n) y
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
Fixing file permissions...
 
Verifying files and fixing permissions ...Done
Checking for C developement tools ...(gcc) OK
Checking for C++ developement tools ...OK
Checking for Make utility ...OK
Checking for ncurses library ... OK
Checking for Perl developement tools ...OK
Checking for AWK ...OK
Checking for FLEX ...OK
Checking for Patch ...OK
Checking for libtermcap-devel...OK
Checking for bison...OK
Checking for libtool...OK
 
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
 
Installing WANPIPE Device Drivers: Linux KERNEL
 
To integrate WANPIPE Multi-Protocol Voice & WAN Router 
modules into the Linux kernel, the kernel has to be 
updated with latest wanpipe sources.  Install will only
modify existing wanpipe source that is already in the
Kernel. 
 
IMPORTANT:
It is always recommended to say YES to all options 
prompted during the install!
 
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
 
Please specify absolute path name of your linux headers/source directory
 
Press Enter for Default: /lib/modules/2.6.18-238.el5/build
 
#>Setting linux directory to /lib/modules/2.6.18-238.el5/build
 
 
 
Upgrading WANPIPE kernel documentation ...Done.
 
 
Installing WANPIPE include headers ...Done.
 
WANPIPE device drivers upgraded successfully!
 
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
WANPIPE KERNEL DRIVER COMPILATION
 
The next step in WANPIPE installation involves compiling 
WANPIPE kernel modules.  
 
This script will compile and install WANPIPE modules
into the currently running linux kernel.
 
For greater customization you will be prompted to
select which Protocol/Drivers you would like to
build into the WANPIPE kernel modules.
 
Wanpipe for Asterisk/Dahdi/Zaptel
	Default for Asterisk/Dahdi/Zaptel
Wanpipe for Wan Routing/API 
	Default for Wan/IP Routing and Data API
Wanpipe for Asterisk SMG/SS7
	Default for Asterisk SS7
Wanpipe for TDM API
	Default for FreeSwitch and Voice API 	
 
Custom Compilation:
------------------
  Customise WANPIPE driver compilation to add only the
  protocols that you need.  This way one can reduce
  the size of the WANPIPE kernel drivers.
 
Refer to http://wiki.sangoma.com for more info
 
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
 
	Please Select Compilation Mode
 
1. WAN Protocols Support 
       Protocols: Frame Relay, CHDLC, PPP, ATM, X25, ADSL, TDM API
       Default for: Wan Routing, Data & Voice API devel.
 
2. TDM Voice (Dahdi/Zaptel) Support 
       Protocols: TDMV (Dahid/Zaptel), TDM API on AFT adatpers.
       Default for: Asterisk & CallWeaver
 
3. TDM Voice (Dahid/Zaptel) + WAN Protocol Support
 
4. SMG (SS7) (Default for Asterisk SMG/SS7 install)
 
5. SMG (SS7) + TDM Voice (Dahdi/Zaptel)
       Default for: Asterisk SS7 + PRI
 
6. SMG (BRI) (Default for Asterisk SMG/BRI install)
 
7. SMG (BRI) + TDM Voice (Dahdi/Zaptel)
       Default for: Asterisk BRI + PRI + Analog
 
8. SMG (PRI) (Default for Asterisk SMG/PRI install)
 
9. SMG (PRI) + TDM Voice (Dahdi/Zaptel)
       Default for: Asterisk SMG/PRI + Analog
 
10. TDM API  
       Protocols: TDM API on AFT adapters:
       Default for: FreeSwitch, Yate, Sunrise
                    Custom voice development 
 
11. Custom Compilation Mode
       Specify protocols to be added into the WANPIPE
       kernel drivers.
 
Please select (1-11) [Default: 1]: 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
 
Looking for zaptel/dahdi directory in /usr/src ...
-------------------------------------------
1 : /usr/src/IPBX/dahdi-linux-2.4.1.2 
------------------------------------------ 
------------------------------------------ 
m : Enter zaptel path manually
 
(ctrl-c to Exit)
Please select working zaptel directory [1-1][m]: 1
 
Enabling the TDM Voice Asterisk Support
 
Dahdi HW HDLC Support Detected: Enabling DCHAN Feature
Native Dahdi HW HDLC Support Detected - No patch required
Dahdi source unmodified
 
Checking for UDEV Zaptel compatibility...     Dahdi installed, no need to add UDEV rules
Enabling the AFT TE1 Support
 
Checking for SMP support ...Enabled.
 
Checking current processor type ...x86_64
 
Wan Update Flags:  -DAF_WANPIPE_2612_FORCE_UPDATE -DWANPIPE_MOD_266_FORCE_UPDATE
 
 
--------------------------------------------------
CFLAGS: gcc -Wp,-MD,.wanpipe.o.d -nostdinc -iwithprefix include -D__LINUX__ -Dlinux -D__KERNEL__ -I/usr/include/wanpipe -I/lib/modules/2.6.18-238.el5/build/include  -DMODULE   -DAF_WANPIPE_2612_FORCE_UPDATE -DWANPIPE_MOD_266_FORCE_UPDATE   -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Wstrict-prototypes -Wundef -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -fwrapv -Os  -mtune=generic -m64 -mno-red-zone -mcmodel=kernel -pipe -fno-reorder-blocks -Wno-sign-compare -fno-asynchronous-unwind-tables -funit-at-a-time -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fomit-frame-pointer -g  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h  
--------------------------------------------------
 
Checking for REGPARM kernel option ...Disabled.
 
Compiling General WANPIPE Driver for 2.6.X Kernel .....Done.
 
 
WAN HWEC module enabled and compiled!
Linking Wanpipe Driver and protocols ...Done.
 
Updating Kernel Modules ...Done.
 
Compilation Successful.
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
WANPIPE META CONFIGURATION
 
There are two configuration files associated with WANPIPE.  
 
1) /usr/src/IPBX/wanpipe-3.5.20/wanrouter.rc: 
	- defines locations of important files such as lock
	  and configuration files as well as start/stop 
	  order of multiple WANPIPE devices.
2) /usr/src/IPBX/wanpipe-3.5.20/wanpipe1.conf:
	- main configuration file for each WANPIPE device.
	- defines interfaces, hardware and protocol information.
	- this file can be created using the 'wancfg' GUI
	  utility or manually based on sample files located
	  in /etc/wanpipe/samples.
 
Please read the WanpipeInstallation.(pdf/txt) manual for further
information.
 
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
WANPIPE UTILITIES SETUP
 
WANPIPE utilities are used to:
	1) create configuration files: for Zaptel and Asterisk
		/usr/sbin/wancfg_zaptel	#Zaptel and Asterisk
		/usr/sbin/wancfg_dahdi	#Dahdi and Asterisk
		/usr/sbin/wancfg_smg	#BRI/SS7, Zaptel and Asterisk
		/usr/sbin/wancfg_tdmapi	#TDM API
	2) create WANPIPE WAN/IP configuration files.
		(/usr/sbin/wancfg)
	3) start,stop,restart individual/all devices and interfaces.
		(/usr/sbin/wanrouter)
	4) debug line, protocol and driver problems.
		(/usr/sbin/wanpipemon)
	5) aid in WANPIPE API development
		(/etc/wanpipe/api)
 
Refer to the WanpipeInstallation.(pdf/txt) for more information.
 
 
Compiling WANPIPE Utilities ...Done.
 
 
Compiling WANPIPE WanCfg Utility ...Done.
 
 
Compiling WANPIPE LibSangoma API library ...Done.
 
 
Compiling WANPIPE LibStelephony API library ...Done.
 
 
Compiling WANPIPE API Development Utilities ...Done.
 
Compiling WANPIPE HWEC Utilities ...Done.
 
 
	WANPIPE Environment Setup Complete !!!
 
Installing WANPIPE Files ... !
Installing  WANPIPE Utilities in /usr/sbin
Installing wanrouter.rc in /etc/wanpipe
Installing wanpipe libraries in /etc/wanpipe
Installing firmware in /etc/wanpipe/firmware
Installing documentation in /usr/share/doc/wanpipe
Installing sample api code in /etc/wanpipe/api
Installing AFT Firmware update utility in /etc/wanpipe/util
Installing driver headers in /etc/wanpipe/api/include/linux
Installing Hardware Echo Cancel Utilites
 
	----------------------------------------------------------
	          WANPIPE v3.5.20 Installation Script
	    Copyright (c) 1995-2010, Sangoma Technologies Inc.
	----------------------------------------------------------
 
WANPIPE INSTALLATON: COMPLETE
 
WANPIPE installation is now complete. WANPIPE kernel drivers 
and configuration/debug utilities have been compiled and installed.
 
	1) Proceed to configure the WANPIPE drivers:
		Asterisk/Zaptel  : /usr/sbin/wancfg_zaptel
		Asterisk/Dahdi   : /usr/sbin/wancfg_dahdi
		TDM API          : /usr/sbin/wancfg_tdmapi
		SMG SS7/BRI/PRI  : /usr/sbin/wancfg_smg
		WAN Routing/API  : /usr/sbin/wancfg
	2) Use the /usr/sbin/wanrouter startup script to start and stop
	   the router. (eg: wanrouter start)
	3) To uninstall WANPIPE package run ./Setup remove
 
Please read http://wiki.sangoma.com for further instructions.
 
 
Wanpipe / Zaptel Configuration
==============================
 
wancfg_zaptel configurator can create all wanpipe config files
for ZAPTEL including /etc/zaptel.conf file.
Optionally: the configurator can also create Asterisk zapata.conf
-----------------------------------------------------
Would you like to configure wanpipe devices for DAHDI? (y/n) n
Wanpipe Installation Complete
-----------------------------
Please proceed to configure wanpipe user /usr/sbin/wancfg_dahdi

Hasta aquí termina la instalación le dimos la opción de que no configurara de momento los dispositivos esto lo haremos después con otro script del programa instalado aparte de que al final editaremos manualmente nuestro archivo de configuración.
Con el comando wanrouter recién instalado verificamos que nuestra tarjeta sea reconocida efectivamente por wanpipe.

[root@asterisksangoma wanpipe-3.5.20]# wanrouter hwprobe
 
-------------------------------
| Wanpipe Hardware Probe Info |
-------------------------------
1 . AFT-A101-SH : SLOT=0 : BUS=7 : IRQ=7 : CPU=A : PORT=1 : HWEC=32 : V=37
 
Card Cnt: A101-2=1

Vemos que satisfactoriamente esta reconocida por la aplicación, aquí en este punto especial introduzco el siguiente error que se presento en diversos intentos de instalación con otros kernel o sin la tarjeta E1 en el puerto PCI del equipo en cuestión.

FATAL: Error inserting wanpipe (/lib/modules/2.6.18-238.el5/kernel/drivers/net/wan/wanpipe.ko): Unknown symbol in module, or unknown parameter (see dmesg)
Would you like to generate /etc/asterisk/zapata.conf

Iniciamos el script de configuración tomando los pasos de un white paper denominado “Running MFC/R2 with Sangoma Wanpipe® using OpenR2 (libopenr2)“, para generar el archivo de configuración de wanpipe.

[root@asterisksangoma wanpipe-3.5.20]# wancfg_dahdi 
 
########################################################################
#    		           Sangoma Wanpipe                             #
#        Dahdi/Zaptel/SMG/TDMAPI/BOOT Configuration Script             #
#                             v2.39                                  #
#                     Sangoma Technologies Inc.                        #
#                        Copyright(c) 2009.                            #
########################################################################
 
Would you like to generate /etc/asterisk/chan_dahdi.conf
 1. YES
 2. NO
[1-2]:1
 
---------------------------------------------
Configuring T1/E1 cards [A101/A102/A104/A108]
---------------------------------------------
A101 detected on slot:0 bus:7
 
-----------------------------------------------------------
Configuring port 1 on A101 slot:0 bus:7.
-----------------------------------------------------------
 
Select media type for AFT-A101 on port 1 [slot:0 bus:7 span:1]
 1. T1
 2. E1
 3. Unused
 4. Exit
[1-4]:2
 
Configuring port 1 on 101 as E1, line coding:HDB3, framing:CRC4 
 1. YES - Keep these settings
 2. NO  - Configure line coding and framing
[1-2, ENTER='YES']:1
 
Select clock for AFT-A101 on port 1 [slot:0 bus:7 span:1]
 1. NORMAL
 2. MASTER
[1-2]:1
 
Select signalling type for AFT-A101 on port 1 [slot:0 bus:7 span:1]
 1. Zaptel/Dahdi - PRI CPE
 2. Zaptel/Dahdi - PRI NET
 3. Zaptel/Dahdi - E & M
 4. Zaptel/Dahdi - E & M Wink
 5. Zaptel/Dahdi - FXS - Loop Start
 6. Zaptel/Dahdi - FXS - Ground Start
 7. Zaptel/Dahdi - FXS - Kewl Start
 8. Zaptel/Dahdi - FX0 - Loop Start
 9. Zaptel/Dahdi - FX0 - Ground Start
 10. Zaptel/Dahdi - FX0 - Kewl Start
 11. Sangoma SMG/sangoma_prid- PRI CPE
 12. Sangoma SMG/sangoma_prid- PRI NET
[1-12]:5
 
 
Would you like to enable hardware DTMF detection?
 1. YES
 2. NO
[1-2, ENTER='YES']:1
 
Would you like to enable hardware fax detection?
 1. YES
 2. NO
[1-2, ENTER='NO']:1
 
Configuring port 1 on AFT-A101 as a full E1
 1. YES - Use all channels
 2. NO  - Configure for fractional
[1-2, ENTER='YES']:1
 
Select dialplan context for AFT-A101 on port 1
 1. from-pstn
 2. from-internal
 3. Custom
[1-3]:1
 
 
Port 1 on AFT-A101 configuration complete...
Press any key to continue: 
 
T1/E1 card configuration complete.
Press any key to continue: 
 
------------------------------------
Configuring analog cards [A200/A400/B600/B700/B800]
------------------------------------
 
------------------------------------
Configuring USB devices [U100]
------------------------------------
 
###################################################################
#                             SUMMARY                             #
###################################################################
 
  1 T1/E1 port(s) detected, 1 configured
  0 ISDN BRI port(s) detected, 0 configured
  0 analog card(s) detected, 0 configured
  0 usb device(s) detected, 0 configured
 
Configurator will create the following files:
	1. Wanpipe config files in /etc/wanpipe
	2. Dahdi config file /etc/dahdi/system.conf
	3. Chan-Dahdi config file /etc/asterisk/chan_dahdi.conf
 
 
Your original configuration files will be saved to:
	1. /etc/dahdi/system.conf.bak 
	2. /etc/asterisk/chan_dahdi.conf.bak 
 
 
Your configuration has been saved in /etc/wanpipe/debug-2011-05-15.tgz.
When requesting support, email this file to techdesk@sangoma.com
 
 
###################################################################
 
Configuration Complete! Please select following:
 1. YES - Continue
 2. NO - Exit
[1-2]:
 
Dahdi and Wanpipe configuration complete: choose action
 1. Save cfg: Restart Asterisk & Wanpipe now
 2. Save cfg: Restart Asterisk & Wanpipe when convenient
 3. Save cfg: Stop Asterisk & Wanpipe now
 4. Save cfg: Stop Asterisk & Wanpipe when convenient
 5. Save cfg: Save cfg only (Not Recommanded!!!)
 6. Do not save cfg: Exit
[1-6]:5
 
 
Removing old configuration files...
 
Copying new Wanpipe configuration files...
 
Copying new Dahdi configuration file (/etc/dahdi/system.conf)...
cp: cannot create regular file `/etc/dahdi/system.conf': No such file or directory
Error executing command:
cp -f /etc/wanpipe/wancfg_zaptel/tmp_cfg/zaptel.conf /etc/dahdi/system.conf
 
Would you like to continue?
 1. No - exit
 2. YES
[1-2, ENTER='No']:2
 
 
Copying new Chan-Dahdi configuration files (/etc/asterisk/chan_dahdi.conf)...
cp: cannot create regular file `/etc/asterisk/chan_dahdi.conf': No such file or directory
Error executing command:
cp -f /etc/wanpipe/wancfg_zaptel/tmp_cfg/zapata.conf /etc/asterisk/chan_dahdi.conf
 
Would you like to continue?
 1. No - exit
 2. YES
[1-2, ENTER='No']:2
 
Saving files only
Current boot level is 3
 
Wanrouter boot scripts configuration...
 
Removing existing wanrouter boot scripts...OK
Would you like wanrouter to start on system boot?
 1. YES
 2. NO
[1-2]:1
 
Verifying Dahdi boot scripts...
Verifying Dahdi boot scripts...Not installed
Verifying Dahdi shutdown scripts...Not installed
Enabling wanrouter boot scripts ...(level:8)
Enabling wanrouter shutdown scripts ...(level:91)
Remvoing old smg_ctrl boot.....OK
Remvoing old smg_ctrl_safe boot.....OK

Posteriormente realizaremos unos cambios en el archivo de configuración, vamos a verificar que wanrouter nos muestre el dispositivo.

[root@asterisksangoma wanpipe-3.5.20]# wanrouter start
 
Starting up device: wanpipe1
--> Loading ec image OCT6116-64S.ima...
Configuring interfaces: w1g1 
done.
 
[root@asterisksangoma wanpipe-3.5.20]# wanrouter list
 
Devices currently active:
	wanpipe1
 
[root@asterisksangoma wanpipe-3.5.20]# wanrouter status
 
Devices currently active:
	wanpipe1
 
 
Wanpipe Config:
 
Device name | Protocol Map | Adapter  | IRQ | Slot/IO | If's | CLK | Baud rate |
wanpipe1    | N/A          | A101/1D/A102/2D/4/4D/8| 169 | 0       | 1    | N/A | 0         |
 
Wanrouter Status:
 
Device name | Protocol | Station | Status        |
wanpipe1    | AFT TE1  | N/A     | Disconnected  |

Instalamos las herramientas de DAHDI para usar dahdi_tool.

[root@asterisksangoma wanpipe-3.5.20]# cd ..
[root@asterisksangoma IPBX]# tar xfz dahdi-tools-2.4.1.tar.gz 
[root@asterisksangoma IPBX]# cd dahdi-tools-2.4.1
[root@asterisksangoma dahdi-tools-2.4.1]# ./configure
[root@asterisksangoma dahdi-tools-2.4.1]# make
[root@asterisksangoma dahdi-tools-2.4.1]# make install
[root@asterisksangoma dahdi-tools-2.4.1]# make config
[root@asterisksangoma dahdi-tools-2.4.1]# cd ..

Compilamos e instalamos OpenR2 según las indicaciones del manual colocado en la pagina del autor.

[root@asterisksangoma IPBX]# tar xvfz openr2-1.3.1.tar.gz 
[root@asterisksangoma IPBX]# cd openr2-1.3.1
[root@asterisksangoma openr2-1.3.1]# ./configure --prefix=/usr
[root@asterisksangoma openr2-1.3.1]# make
[root@asterisksangoma openr2-1.3.1]# make install

Por ultimo compilamos e instalamos Asterisk.

[root@asterisksangoma IPBX]# tar xfz asterisk-1.8.4.tar.gz 
[root@asterisksangoma IPBX]# cd asterisk-1.8.4
[root@asterisksangoma IPBX]# ./configure
[root@asterisksangoma IPBX]# make
[root@asterisksangoma IPBX]# make install
[root@asterisksangoma IPBX]# make samples

Verificamos que el soporte de OpenR2 este correctamente instalado en Asterisk.

[root@asterisksangoma asterisk-1.8.4]# ldd channels/chan_dahdi.so | grep openr2
	libopenr2.so.3 => /usr/lib64/libopenr2.so.3 (0x00002ab1f4dbe000)

Configuraremos DAHDI con los siguientes parámetros específicos para el E1 de TELMEX, son treinta canales posibles de comunicación con el canal 16 para señalización.

[root@asterisksangoma IPBX]# vi /etc/dahdi/system.conf 
span=1,1,0,cas,hdb3
cas=1-15:1101
dchan=16
cas=17-31:1101
 
loadzone=us
defaultzone=us

Cargamos la configuración.

[root@asterisksangoma IPBX]# dahdi_cfg -vv
DAHDI Tools Version - 2.4.1
 
DAHDI Version: 2.4.1.2
Echo Canceller(s): 
Configuration
======================
 
SPAN 1: CAS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)
 
Channel map:
 
Channel 01: CAS / User (Default) (Echo Canceler: none) (Slaves: 01)
Channel 02: CAS / User (Default) (Echo Canceler: none) (Slaves: 02)
Channel 03: CAS / User (Default) (Echo Canceler: none) (Slaves: 03)
Channel 04: CAS / User (Default) (Echo Canceler: none) (Slaves: 04)
Channel 05: CAS / User (Default) (Echo Canceler: none) (Slaves: 05)
Channel 06: CAS / User (Default) (Echo Canceler: none) (Slaves: 06)
Channel 07: CAS / User (Default) (Echo Canceler: none) (Slaves: 07)
Channel 08: CAS / User (Default) (Echo Canceler: none) (Slaves: 08)
Channel 09: CAS / User (Default) (Echo Canceler: none) (Slaves: 09)
Channel 10: CAS / User (Default) (Echo Canceler: none) (Slaves: 10)
Channel 11: CAS / User (Default) (Echo Canceler: none) (Slaves: 11)
Channel 12: CAS / User (Default) (Echo Canceler: none) (Slaves: 12)
Channel 13: CAS / User (Default) (Echo Canceler: none) (Slaves: 13)
Channel 14: CAS / User (Default) (Echo Canceler: none) (Slaves: 14)
Channel 15: CAS / User (Default) (Echo Canceler: none) (Slaves: 15)
Channel 16: D-channel (Default) (Echo Canceler: none) (Slaves: 16)
Channel 17: CAS / User (Default) (Echo Canceler: none) (Slaves: 17)
Channel 18: CAS / User (Default) (Echo Canceler: none) (Slaves: 18)
Channel 19: CAS / User (Default) (Echo Canceler: none) (Slaves: 19)
Channel 20: CAS / User (Default) (Echo Canceler: none) (Slaves: 20)
Channel 21: CAS / User (Default) (Echo Canceler: none) (Slaves: 21)
Channel 22: CAS / User (Default) (Echo Canceler: none) (Slaves: 22)
Channel 23: CAS / User (Default) (Echo Canceler: none) (Slaves: 23)
Channel 24: CAS / User (Default) (Echo Canceler: none) (Slaves: 24)
Channel 25: CAS / User (Default) (Echo Canceler: none) (Slaves: 25)
Channel 26: CAS / User (Default) (Echo Canceler: none) (Slaves: 26)
Channel 27: CAS / User (Default) (Echo Canceler: none) (Slaves: 27)
Channel 28: CAS / User (Default) (Echo Canceler: none) (Slaves: 28)
Channel 29: CAS / User (Default) (Echo Canceler: none) (Slaves: 29)
Channel 30: CAS / User (Default) (Echo Canceler: none) (Slaves: 30)
Channel 31: CAS / User (Default) (Echo Canceler: none) (Slaves: 31)
 
31 channels to configure.
 
Setting echocan for channel 1 to none
Setting echocan for channel 2 to none
Setting echocan for channel 3 to none
Setting echocan for channel 4 to none
Setting echocan for channel 5 to none
Setting echocan for channel 6 to none
Setting echocan for channel 7 to none
Setting echocan for channel 8 to none
Setting echocan for channel 9 to none
Setting echocan for channel 10 to none
Setting echocan for channel 11 to none
Setting echocan for channel 12 to none
Setting echocan for channel 13 to none
Setting echocan for channel 14 to none
Setting echocan for channel 15 to none
Setting echocan for channel 16 to none
Setting echocan for channel 17 to none
Setting echocan for channel 18 to none
Setting echocan for channel 19 to none
Setting echocan for channel 20 to none
Setting echocan for channel 21 to none
Setting echocan for channel 22 to none
Setting echocan for channel 23 to none
Setting echocan for channel 24 to none
Setting echocan for channel 25 to none
Setting echocan for channel 26 to none
Setting echocan for channel 27 to none
Setting echocan for channel 28 to none
Setting echocan for channel 29 to none
Setting echocan for channel 30 to none
Setting echocan for channel 31 to none

Configuramos los parámetros con respecto a MFCR2, los DNIS, el contexto y los canales a utilizar, en este caso de los canales uno al veintiuno (el 16 se usa señalización) debido a que mi E1 tiene veinte lineas disponibles.

[root@asterisksangoma ~]# cat /etc/asterisk/chan_dahdi.conf 
[channels] 
signalling=mfcr2 
mfcr2_variant=mx 
mfcr2_get_ani_first=no 
mfcr2_max_ani=10 
mfcr2_max_dnis=4 
mfcr2_category=national_subscriber 
mfcr2_mfback_timeout=-1 
mfcr2_metering_pulse_timeout=-1 
; this is for debugging purposes 
mfcr2_logdir=log 
mfcr2_logging=all 
; end debugging configuration 
context=from-pstn 
group=1 
restrictcid=yes 
hidecallerid=yes 
channel => 1-15 
channel => 17-21

Con esto ya tenemos configurada la parte de Asterisk y DAHDI para solo recibir la señal del E1, vamos a terminar de configurar Wanpipe. Conectar el E1 no basta para que nuestra tarjeta inmediatamente empiece a trabajar, en dado caso wanpipemon nos ayudara a identificar las posibles alarmas existente para lograr poner en verde el led indicador del estado de nuestra tarjeta.
Aquí cito una pagina de la wiki de sangoma donde nos muestran la descripción de cada una de estas alarmas. Aquí wanpipemon muestra las alarmas cuando no tenemos conexión alguna en la tarjeta, nota la alarma de open circuit, loss of framing y loss of frame signal.

[root@asterisksangoma IPBX]# wanpipemon -i w1g1 -c Ta
 
***** w1g1: E1 Rx Alarms (Framer) *****
 
ALOS:	OFF	| LOS:	ON
RED:	ON	| AIS:	OFF
LOF:	ON	| RAI:	OFF
 
***** w1g1: E1 Rx Alarms (LIU) *****
 
Short Circuit:	OFF
Open Circuit:	ON
Loss of Signal:	ON
 
***** w1g1: E1 Tx Alarms *****
 
AIS:	OFF	| YEL:	ON
 
 
***** w1g1: E1 Performance Monitoring Counters *****
 
Line Code Violation	: 0
Far End Block Errors	: 0
CRC4 Errors		: 0
FAS Errors		: 0
 
 
Rx Level	: < -44db

Aquí un ejemplo de la tarjeta conectada con un loop en los coaxiales, esto con el fin de comparar ciertas alarmas que van desde una mala señal enviada por el otro lado de nuestro enlace así como cables invertidos en la conexión, la alarma es la de loss of framing.

[root@asterisksangoma IPBX]# wanpipemon -i w1g1 -c Ta
 
***** w1g1: E1 Rx Alarms (Framer) *****
 
ALOS:	OFF	| LOS:	OFF
RED:	ON	| AIS:	OFF
LOF:	ON	| RAI:	OFF
 
***** w1g1: E1 Rx Alarms (LIU) *****
 
Short Circuit:	OFF
Open Circuit:	OFF
Loss of Signal:	OFF
 
***** w1g1: E1 Tx Alarms *****
 
AIS:	OFF	| YEL:	ON
 
 
***** w1g1: E1 Performance Monitoring Counters *****
 
Line Code Violation	: 725
Far End Block Errors	: 0
CRC4 Errors		: 0
FAS Errors		: 0
 
 
Rx Level	: > -2.5db

En los logs del sistema se pueden presentar mensajes similares a los siguientes haciendo referencia al reloj, en mi caso fue por que el Rx y Tx de los coaxiales estaban invertidos en el balun, sin embargo en la FAQ de Sangoma hay mas causas posibles, también nota que aparecen otras alarmas diferentes en especial la de short circuit que nos indica que los cables están cruzados, y la de remote alarm indication.

[root@asterisksangoma ~]# wanpipemon -i w1g1 -c Ta 
 
***** w1g1: E1 Rx Alarms (Framer) ***** 
 
ALOS:	OFF	| LOS:	OFF 
RED:	ON	| AIS:	OFF 
LOF:	ON	| RAI:	ON 
 
***** w1g1: E1 Rx Alarms (LIU) ***** 
 
Short Circuit:	ON 
Open Circuit:	OFF 
Loss of Signal:	OFF 
 
***** w1g1: E1 Tx Alarms ***** 
 
AIS:	OFF	| YEL:	ON 
 
 
***** w1g1: E1 Performance Monitoring Counters ***** 
 
Line Code Violation	: 826634 
Far End Block Errors	: 0 
CRC4 Errors		: 0 
FAS Errors		: 2166 
 
 
Rx Level	: -40db to -44db
[root@asterisksangoma ~]# tail -f /var/log/messages 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:53 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The CT_C8_A clock behavior does not conform to the H.100 spec! 
May 19 20:48:54 asterisksangoma kernel: wanec1: The H100 slave has lost its framing on the bus!

En los casos anteriores el comando dahdi_tool nos mostrara la alarma en la tarjeta y mientras exista Asterisk no podra usarla.


La alarma RED se quitara hasta que logremos configurar adecuadamente la tarjeta y nos deje de mostrar las demás alarmas, anteriormente configuramos con el script, necesitamos cambiar en el archivo wanpipe1.conf dentro del directorio /etc/wanpipe, el tipo de framing a NCRC4 en vez de CRC4 y confirmar la configuración del reloj se encuentre en modo normal.

FE_FRAME	= NCRC4 
TE_CLOCK 	= NORMAL

Conectamos el E1 a la tarjeta y comprobamos las alarmas en ella.

[root@asterisksangoma ~]# wanpipemon -i w1g1 -c Ta 
 
***** w1g1: E1 Rx Alarms (Framer) ***** 
 
ALOS:	OFF	| LOS:	OFF 
RED:	OFF	| AIS:	OFF 
LOF:	OFF	| RAI:	OFF 
 
***** w1g1: E1 Rx Alarms (LIU) ***** 
 
Short Circuit:	OFF 
Open Circuit:	OFF 
Loss of Signal:	OFF 
 
***** w1g1: E1 Tx Alarms ***** 
 
AIS:	OFF	| YEL:	OFF 
 
 
***** w1g1: E1 Performance Monitoring Counters ***** 
 
Line Code Violation	: 2620 
Far End Block Errors	: 0 
CRC4 Errors		: 0 
FAS Errors		: 1507 
 
 
Rx Level	: > -2.5db




Satisfactoriamente no hay ninguna alarma, nuestra tarjeta se pone en verde y esta lista para recibir llamadas, confirmamos con dahdi_tool.


Entramos a la consola de Asterisk y verificamos que los canales estén listos.

asterisksangoma*CLI> mfcr2 show channels 
Chan Variant Max ANI Max DNIS ANI First Immediate Accept Tx CAS   Rx CAS  
   1 MX      10      4        No        No               IDLE     IDLE    
   2 MX      10      4        No        No               IDLE     IDLE    
   3 MX      10      4        No        No               IDLE     IDLE    
   4 MX      10      4        No        No               IDLE     IDLE    
   5 MX      10      4        No        No               IDLE     IDLE    
   6 MX      10      4        No        No               IDLE     IDLE    
   7 MX      10      4        No        No               IDLE     IDLE    
   8 MX      10      4        No        No               IDLE     IDLE    
   9 MX      10      4        No        No               IDLE     IDLE    
  10 MX      10      4        No        No               IDLE     IDLE    
  11 MX      10      4        No        No               IDLE     IDLE    
  12 MX      10      4        No        No               IDLE     IDLE    
  13 MX      10      4        No        No               IDLE     IDLE    
  14 MX      10      4        No        No               IDLE     IDLE    
  15 MX      10      4        No        No               IDLE     IDLE    
  17 MX      10      4        No        No               IDLE     IDLE    
  18 MX      10      4        No        No               IDLE     IDLE    
  19 MX      10      4        No        No               IDLE     IDLE    
  20 MX      10      4        No        No               IDLE     IDLE    
  21 MX      10      4        No        No               IDLE     IDLE    
asterisksangoma*CLI>

DAHDI también se muestra configurado adecuadamente.

asterisksangoma*CLI> dahdi show channels 
   Chan Extension  Context         Language   MOH Interpret        Blocked    State     
 pseudo            default                    default                         In Service 
      1            from-pstn                  default                         In Service 
      2            from-pstn                  default                         In Service 
      3            from-pstn                  default                         In Service 
      4            from-pstn                  default                         In Service 
      5            from-pstn                  default                         In Service 
      6            from-pstn                  default                         In Service 
      7            from-pstn                  default                         In Service 
      8            from-pstn                  default                         In Service 
      9            from-pstn                  default                         In Service 
     10            from-pstn                  default                         In Service 
     11            from-pstn                  default                         In Service 
     12            from-pstn                  default                         In Service 
     13            from-pstn                  default                         In Service 
     14            from-pstn                  default                         In Service 
     15            from-pstn                  default                         In Service 
     17            from-pstn                  default                         In Service 
     18            from-pstn                  default                         In Service 
     19            from-pstn                  default                         In Service 
     20            from-pstn                  default                         In Service 
     21            from-pstn                  default                         In Service 
asterisksangoma*CLI>

Si tenemos la tarjeta con alarma los canales se nos mostraran de la siguiente manera:

asterisksangoma*CLI> dahdi show channels 
   Chan Extension  Context         Language   MOH Interpret        Blocked    State     
 pseudo            default                    default                         In Service 
      1            from-pstn                  default               R         In Service 
      2            from-pstn                  default               R         In Service 
      3            from-pstn                  default               R         In Service 
      4            from-pstn                  default               R         In Service 
      5            from-pstn                  default               R         In Service 
      6            from-pstn                  default               R         In Service 
      7            from-pstn                  default               R         In Service 
      8            from-pstn                  default               R         In Service 
      9            from-pstn                  default               R         In Service 
     10            from-pstn                  default               R         In Service 
     11            from-pstn                  default               R         In Service 
     12            from-pstn                  default               R         In Service 
     13            from-pstn                  default               R         In Service 
     14            from-pstn                  default               R         In Service 
     15            from-pstn                  default               R         In Service 
     17            from-pstn                  default               R         In Service 
     18            from-pstn                  default               R         In Service 
     19            from-pstn                  default               R         In Service 
     20            from-pstn                  default               R         In Service 
     21            from-pstn                  default               R         In Service 
 
asterisksangoma*CLI> mfcr2 show channels 
Chan Variant Max ANI Max DNIS ANI First Immediate Accept Tx CAS   Rx CAS  
   1 MX      10      4        No        No               IDLE     BLOCK   
   2 MX      10      4        No        No               IDLE     BLOCK   
   3 MX      10      4        No        No               IDLE     BLOCK   
   4 MX      10      4        No        No               IDLE     BLOCK   
   5 MX      10      4        No        No               IDLE     BLOCK   
   6 MX      10      4        No        No               IDLE     BLOCK   
   7 MX      10      4        No        No               IDLE     BLOCK   
   8 MX      10      4        No        No               IDLE     BLOCK   
   9 MX      10      4        No        No               IDLE     BLOCK   
  10 MX      10      4        No        No               IDLE     BLOCK   
  11 MX      10      4        No        No               IDLE     BLOCK   
  12 MX      10      4        No        No               IDLE     BLOCK   
  13 MX      10      4        No        No               IDLE     BLOCK   
  14 MX      10      4        No        No               IDLE     BLOCK   
  15 MX      10      4        No        No               IDLE     BLOCK   
  17 MX      10      4        No        No               IDLE     BLOCK   
  18 MX      10      4        No        No               IDLE     BLOCK   
  19 MX      10      4        No        No               IDLE     BLOCK   
  20 MX      10      4        No        No               IDLE     BLOCK   
  21 MX      10      4        No        No               IDLE     BLOCK   
asterisksangoma*CLI>

Configuramos rápidamente un extensión SIP 1000 con el contexto from-pstn para que pueda recibir las llamadas, marcamos y vemos como la llamada entra con el primer DNI y se dirige a la extensión 1000.

asterisksangoma*CLI> 
New MFC/R2 call detected on chan 11. 
MFC/R2 call offered on chan 11. ANI = , DNIS = 5900, Category = National Priority Subscriber 
MFC/R2 call has been accepted on backward channel 11 
    -- Executing [5900@from-pstn:1] Dial("DAHDI/11-1", "SIP/1000") in new stack 
  == Using SIP RTP CoS mark 5 
    -- Called 1000 
    -- SIP/1000-00000001 is ringing 
    -- SIP/1000-00000001 answered DAHDI/11-1 
  == Spawn extension (from-pstn, 5900, 1) exited non-zero on 'DAHDI/11-1' 
    -- Hungup 'DAHDI/11-1' 
MFC/R2 call end on channel 11

Sobre esa misma extensión realizamos una llamada de salida.

asterisksangoma*CLI> 
  == Using SIP RTP CoS mark 5 
    -- Executing [46028079@pruebas:1] Dial("SIP/1000-00000007", "DAHDI/g1/46028079") in new stack 
    -- Called g1/46028079 
MFC/R2 call has been accepted on forward channel 1 
    -- DAHDI/1-1 is ringing 
    -- DAHDI/1-1 is making progress passing it to SIP/1000-00000007 
MFC/R2 call has been answered on channel 1 
    -- DAHDI/1-1 answered SIP/1000-00000007 
Chan 1 - Far end disconnected. Reason: Normal Clearing 
MFC/R2 call disconnected on channel 1 
    -- Hungup 'DAHDI/1-1' 
  == Spawn extension (pruebas, 46028079, 1) exited non-zero on 'SIP/1000-00000007'


El teléfono es un MITEL 5312, diseñados específicamente para el protocolo MINET sin embargo tiene soporte para SIP, solo es cuestión de que inicie con el protocolo, y lo podremos registrar con cualquier proxy SIP mediante su pagina web de configuración.

Utilizamos dos tipos de conectores de coaxial a RJ45 que se muestran a continuación:


Este conector lo utiliza el conmutador MITEL de donde tome el E1.


Y aquí el conector de la marca AC and E, 408809069 K162.

De momento es todo configuraciones mas especificas quedan fuera de esta guía, quedan puntos pendientes como instalar una tarjeta Digium junto con la Sangoma, la instalación de Wanpipe en Debian que esperamos abordar en otro momento. Saludos dejo las paginas de donde se tomo la información.

Referencias:
http://code.google.com/p/openr2/downloads/list
http://wiki.sangoma.com/wanpipemon-T1-E1-line-alarms-0
http://www.fonality.com/trixbox/forums/vendor-forums-certified/sangoma/sangoma-a101d-alarm-redon-lofon
http://wiki.sangoma.com/konrads-cheat-sheet
http://wiki.sangoma.com/mfcr2
http://wiki.sangoma.com/wanpipe-linux-asterisk-debugging#pri_span_debugging
http://wiki.sangoma.com/wanpipe-linux-asterisk-appendix
http://libopenr2.org
http://code.google.com/p/openr2/downloads/list
http://edocs.mitel.com/UG/EN/5312-5324_SIP7.2_UG_GA.pdf
http://sangoma.com/assets/docs/misc/MFCR2_and_Sangoma_English.pdf