28 de diciembre de 2011

Simulando una red corporativa: Instalando la red

Continuando con la entrada anterior, en la que nos introdujimos en la creación de la red para una pequeña/mediana empresa, vamos a ir añadiendo y configurando switches en las sedes del ejercicio. Como se comentó en la entrada previa, vamos a crear una sede principal con un diseño de switches en cascada y una sede externa que se comunicarán a través del enlace de Internet.


Al igual que para los routers, lo primero que realizaremos será una configuración inicial básica en los distintos switches de las sedes:



Sede Principal (SC)

CME.SC

Vamos a utilizar la interfaz FastEthetnet 0/0 para la conexión con las sedes, por lo que pasamos inicialmente a configurar la interfaz física y posteriormente las diferentes interfaces virtuales, cada una en una VLAN diferente.








Core.SC

Utilizaremos la VLAN nativa para la gestión de la planta, la configuraremos en primer lugar al igual que crearemos las distintasn VLANs de la sede y posteriormente pasamos a configurar su direccionamiento.



Configuramos las distintas interfaces con una pequeña descripción, velocidad, modo, VLANs permitidas, etc. Realizaremos pruebas desde el router (CME.SC) hasta las direcciones creadas en el equipo.



Server.SC

Igualmente, realizaremos dicha configuración en el switch "del CPD" que dará conexión a los servidores de la empresa; también haremos algunas pruebas de conectividad.


Data.SC

Configuración






Pruebas


 Clients.SC

Configuración y pruebas

 
Admins.SC

Configuración y pruebas


Test.SC

Configuraciones



Pruebas


Sede Externa (SE)

CMS.SE


SW.SE

Configuración


Pruebas (desde CME.SE)


Una vez que tenemos desplegado y configurados todos los switches de las sedes, pasamos a configurar el enrutamiento en los routers para comunicar las redes de las distintas sedes. En este caso, vamos a utilizar RIP en su segunda versión permitiendo únicamente a las interfaces WAN de los routers.


Y comprobamos que se conocen todas las redes de las sedes.


Para finalizar realizamos pruebas desde los distintos equipos para comprobar que tenemos conexión entre las distintas sedes y entre las distintas redes.


En la siguiente entrada iremos incoporando los host y realizaremos una pruebas básicas. También realizaremos algunas otras opciones interesantes que nos proporciona Packet Tracer.

Un saludo, Brixton Cat.

24 de diciembre de 2011

Simulando una red corporativa: Introducción

Vamos a empezar una pequeña serie en la que crearemos la topología y la configuración de una red corporativa para una pequeña/mediana empresa con varias sedes. El ejercicio lo realizaré bajo Packet Tracer en su última versión, 5.3.2, dado que nos permite realizar grandes proyectos sin consumir muchos recursos.


Introducción

En el caso más simple, el que llevaremos a cabo, tenemos dos sedes comunicadas a través de Internet o a través de una red privada proporcionada por un ISP. En nuestro caso tendremos una sede principal y una sede externa que se comunicarán con un enlace ethernet a través de una VLAN específica (VLAN 100).

En la sede principal tendremos un diseño de switches en cascada conectados al router, donde se crearán distintas VLANs para distinguir tráfico. Igualmente en la sede externa tendremos un switch conectado al router para comunicar los clientes. Las VLANs a configurar serán:
- VLAN 1: Gestión (MANAGEMENT)
- VLAN 10: Servidores (SERVER)
- VLAN 20: Clientes (CLIENTS)
- VLAN 30: Administradores (ADMINS)
- VLAN 100: Internet (WAN)
En la sede principal instalaremos unos servidores con los que hacer algunas pruebas y jugetear con las opciones del programa y de la configuración. Incluiremos un servidor Web que alojará las páginas de la empresa, un Syslog donde registrar los eventos y un TFTP con el que actualizar la IOS de los equipos.

En el siguiente enlace podeis ver un Excel con el direccionamiento completo del ejercicio. En las siguientes tablas podeis ver a modo de resumen las redes a configurar:

- Routers:


- Switches:


 A la acción

 Como se que os gusta la marcha, vamos a empezar con el ejercicio. Comenzaremos configurando la conexión a Internet de los routers, para ello crearemos una subinterfaz etiquetada con la VLAN 100 y realizaremos una prueba de pines. Facilón no?

Añadimos los equipos al escenario y realizamos una configuración básica a nuestro antojo



Configuramos las interfaces en cada equipo


Y comprobamos que la interfaz está levantada y configurada correctamente. Posteriormente comprobamos que tenemos conexión con el equipo distante.


En la siguiente entrada realizaremos la configuración de la planta de las sedes, poco a poco iremos añadiendo y configurando switches en el escenario y comprobaremos que hay conexión entre las distintas redes configuradas.

Un saludo, Brixton Cat.

10 de diciembre de 2011

Bash Script: Comparando archivos

Bueno, bueno, bueno... Hace tiempo que tenía ganas de hacer una entrada con algo de programación de scripts en Bash pero no encontraba el momento ni el código apropiado para colgarlo. En el trabajo me pidieron que comparase unos archivos y completase uno de ellos con datos del segundo. Como no tenía ganas de hacerlo manualmente ni de crear una macro Excel, pensé en un pequeño script que lo hiciera por mi. Os pongo en situación...

Tenemos un archivo Excel con una serie de datos de unas sedes en los que tenemos instalados unos equipos. Pensemos que tenemos las siguientes columnas:
- Sede
- Hostname
- IP
- Marca
- Modelo
- S/N (Reservado para los datos que tenemos que añadir)
En el segundo archivo tenemos una serie de datos que hemos recopilado de los distintos equipos. Imaginemos:
- Hostname
- IP
- S/N
La idea es comparar ambos archivos a partir del hostname y añadir el S/N (Número de Serie) a los datos del archivo original. Lo primero que vamos a hacer es crear un archivo CSV a partir del Excel original, por lo que nos quedaría un archivo parecido a:
Sede;Hostname;IP;Marca;Modelo;S/N;;;;;;
Sede1;Sede1;10.10.10.10;Cisco;1841;;;;;;;
Sede2;Sede2;10.10.10.11;Cisco;2801;;;;;;;
Mientras que el segundo tendrá la siguiente estructura:
Sede1 10.10.10.10 1234567890
Sede2 10.10.10.11 2345678901
Leeremos línea a línea el archivo con los número de serie, llamémosle NumeroSerie, y filtraremos el archivo original, llamémosle Planta, a partir del hostname. Luego con otro bucle leeremos todos los campos de la fila seleccionada y los mandaremos separados por coma a un nuevo fichero para que nos genere un CSV final tal que así:
Sede;Hostname;IP;Marca;Modelo;S/N;;;;;;
Sede1;Sede1;10.10.10.10;Cisco;1841;1234567890;;;;;;
Sede2;Sede2;10.10.10.11;Cisco;2801;2345678901;;;;;;
El código del script es:
#!/bin/bash
#

### VARIABLES
FILEORIG="Planta"
SERIALSORIG="NumeroSerie"
FILETARGET="Nuevo.csv"
CSVCOLS="6"

### FUNCTIONS
function Errors() {
        [ "$#" != "2" ] && echo -e "Fallo de ejecucion" && exit 1

        if [ "$1"  == "name" ]; then
          PARAM="nemonico"
        elif [ "$1" == "serial" ]; then
          PARAM="numero de serie"
        fi

        echo -e "Falta $PARAM en la linea '$2'" >> Error.log
}

### SCRIPT
sort $SERIALSORIG | uniq > NewSerials

FILESERIALS="NewSerials"

TOTAL="`cat $FILESERIALS | wc -l`"

head -n 1 $FILEORIG >> $FILETARGET

for ((i=1;i<=$TOTAL;i++)); do

  ARCHIVO="`cat $FILESERIALS | grep -n . | grep -E "^$i:"`"
  NEMONICO="`echo $ARCHIVO | cut -d ' ' -f 1 | sed 's/[0-9]*://g'`"
  SERIAL="`echo $ARCHIVO | cut -d ' ' -f 3`"

  [ -z $NEMONICO ] && Errors name "$ARCHIVO" && continue
  [ -z $SERIAL ] && Errors serial "$ARCHIVO" && continue

  for ((j=1;j<=$CSVCOLS;j++));do

    CAMPO="`cat $FILEORIG | grep $NEMONICO | cut -d ';' -f $j`"

    [ "$j" == "$CSVCOLS" ] && CAMPO="$SERIAL;;;;;;;"

    echo -ne "$CAMPO;" >> $FILETARGET

  done

  echo -ne "\n" >> $FILETARGET

done

rm -rf NewSerials

exit 0

#EOF
##FVE
Lo primero que hacemos es ordenar y quitar los repetidos del archivo NumeroSerie, contamos el número de líneas y lo pasamos al bucle que nos leerá el archivo línea a línea. Filtraremos el archivo NumeroSerie para quedarnos con el hostname y con el S/N de cada línea, NEMONICO y SERIAL respectivamente.
ARCHIVO="`cat $FILESERIALS | grep -n . | grep -E "^$i:"`"
NEMONICO="`echo $ARCHIVO | cut -d ' ' -f 1 | sed 's/[0-9]*://g'`"
SERIAL="`echo $ARCHIVO | cut -d ' ' -f 3`"
En caso que no exista el hostname o el numero de serie, enviamos a la función Errors una palabra clave acompañada de la línea donde ha fallado con lo que generamos un archivo de log, Error.log. Además cortamos la ejecución del bucle para que pase a la siguiente iteración.
[ -z $NEMONICO ] && Errors name "$ARCHIVO" && continue
[ -z $SERIAL ] && Errors serial "$ARCHIVO" && continue
En el segundo bucle leeremos el archivo Planta y lo filtramos a partir del hostname para recorrer todos los campos de la línea y generar un archivo CSV nuevo. En este caso los S/N van en la sexta columna (Variable CSVCOLS), por lo que cuando se encuentre en dicho campo utilizaremos el valor almacenado en la variable SERIAL para mandarlo al archivo final:
[ "$j" == "$CSVCOLS" ] && CAMPO="$SERIAL;;;;;;;"
El script no es nada del otro mundo: hay un pequeño control de errores, no hay funciones que estructuren bien el código, no está documentado, etc; pero me parece que puede ser interesante publicarlo porque es bastante genérico y fácilmente adaptable a otros proyectos o necesidades que puedan surgir.

Un saludo, Brixton Cat.

5 de diciembre de 2011

Cluster Web Alta Disponibilidad: Instalación y configuración DRBD

En esta entrada describiré el proceso de creación de un sistema RAID1 utilizando el software DRBD con el que replicar fácilmente nuestros dispositivos de bloques. Añadimos un disco en cada máquina virtual y crearemos el sistema de ficheros de los dispositivos que utilizaremos para la sincronización de los datos.

En primer lugar pasamos a instalarlo con el comando aptitude install drbd-utils


Cargamos el módulo de DRBD y lo añadimos al archivo /etc/modules para que sea cargado en el arranque del sistema. Utilizamos el comando modprobe drbd para cargar dicho módulo.


Creamos un archivo .res en la ruta /etc/drbd.d donde configuramos el recurso con el siguiente contenido:


Creamos el recurso www-data y utilizaremos el protocolo C. Cifraremos la conexión con sha1 y una contraseña compartida. En cada nodo configuramos los discos y dispositivos que utilizan, su dirección IP junto al puerto donde escucha el recurso y la manera en la que se almacenan la metainformación.

Creamos y activamos el recurso con drbdadm create-md www-data y drbdadm up www-data respectivamente. En caso que el segundo nodo de problemas, probad con la opción --force al crear el recurso.


El archivo /proc/drbd es un archivo virtual con información a tiempo real sobre el estado de los recursos configurados. Podemos ver que no tenemos ningún nodo principal y el estado de los datos es Inconsistent.


En el nodo principal ejecutamos el comando drbdadm -- --overwrite-data-of-peer primary www-data para sincronizar los datos desde el principal al secundario. Este proceso va a tardar bastante tiempo por lo que echarle paciencia y no utiliceis volumenes muy grandes; como ejemplo: con unidades de 2G he tardado hora y media aproximadamente.


Una vez finaliza la replicación de los datos


Formateamos la unidad virtual con el comando mkfs.ext3 /dev/drbd0


Aprovechando que tengo el directorio /mnt vacio, creo dos directorios para guardar los datos de la página y la base de datos.


Creamos un archivo Web con el que realizar las pruebas y reconfiguramos los archivos de configuración de los servidores para que apunten a la nueva ruta.


Arrancamos crm y pasamos al modo configure. Creamos un nuevo recurso para el recurso DRBD y un multi-estado (ms) para el recurso anterior.

primitive WebData ocf:linbit:drbd params drbd_resource=www-data op monitor interval=60s
ms WebDataClone WebData meta master-max=1 meta-node-max=1 clone-max=2 clone-node-max=1 notify=true


Y confirmamos con commit, podemos comprobar los cambios a través de crm_mon


Luego creamos otro recurso para el sistema de ficheros con el comando

primitive WebFS ocf:heartbeat:Filesystem params device=/dev/drbd/by-res/www-data directory=/mnt/projwww fstype=ext3


Como en su momento colocamos el recurso del servidor web junto a la dirección IP, primero editamos el archivo y lo eliminamos.


Creamos un grupo con los recursos ClusterIP, WebSite y WebFS con el comando:

group WebCluster ClusterIP WebSite WebFS


Podemos ver en crm_mon al aplicar la creación del grupo que nos cambia la distribución y nos agrupa los recursos.


Con order vamos a arrancar el grupo WebCluster creado antes una vez esté promocionado el recurso multi-estado del sistema de ficheros DRBD.

order FS_after_Cluster inf: WebDataClone:promote WebCluster:start


Podemos observar toda la configuración antes de confirmar definitivamente.


Probando el sistema de ficheros

Si arrancamos el navegador y apuntamos a la dirección IP del cluster, nos responde correctamente el servidor principal con los cambios en el archivo Web que realizamos anteriormente.


Si deshabilitamos el nodo principal


Y comprobamos que el servicio se transfiere correctamente al secundario


Podemos recargar la página y comprobar que modifica el nombre de host.


A la hora de arrancar nuevamente el nodo me salto un error, intenté todo tipo de comandos con los que eliminarlo pero no hay manera.


Aunque el servicio se ha transferido correctamente al servidor principal el error continua, pero como el recurso está levantado y es un error desconocido no le doy más importancia jeje.


En próximas entradas configuraremos MySQL para almacenar la base de datos y que sea replicada entre los nodos para asegurar su disponibilidad.

Un saludo, Brixton Cat.