Personal tools
You are here: Home Usuaris iperez XEiLL Configuración Servidores Cambios realizados en 2007
Document Actions

Cambios realizados en 2007

by Ismael Perez last modified 2007-04-26 11:30

Cambios realizados en la XEiLL en el 2007

A continuación os mostraré como queda la nueva configuración de los servicios, con los cambios realizados, para que la XEiLL sea mas estable y con mas tolerancia de fallos.

OpenVPN & Quagga


Es el cambio mas significativo de la XEiLL, ya que se ha pasado de una tipologia de estrella (todos los centros conectados al Puig Castellar) a una tipologia de malla, donde se diferencia un area 0 y un area 1

Encontramos 4 centros en el area 0: Puig Castellar, Banus, Balldovina, CRP Santa Coloma

Estos 4 centros actuan como servidor y cliente a la vez, esto se hace gracias al openvpn2.0 que permite varios clientes conectados a un servidor. Con esto conseguimos nivelar la carga de los tuneles quedando una configuracion de por cada servidor, 5 clientes conectados (por ahora, esto ira augmentando segun se añadan centros educativos a la XEiLL). Aqui una imagen de como es la XEiLL en febrero de 2007


mallaXeill2.jpg

Como hacer esto? Bien para ellos con el openvpn2.0 nos permite hacer esto gracias a que se puede crear un archivo de configuración como servidor y otro como cliente. Para ser servidor se tienen que crear una serie de claves: Certificado de Autentificación (CA), claves de clientes y de servidor, y una clave Diffie Hellman.

Como se hacen estas claves?

Bien esto es gracias a la nueva herramienta que nos brinda openvpn2.0, llamada easy-rsa. Este directorio lo encontramos en /usr/share/openvpn/easy-rsa/2.0.Este directorio lo copiamos y lo pegamos en /home/tu_usuario (cp -r /usr/share/openvpn/easy-rsa/2.0 /home/tu_usuario/CA) , y nos dirigimos a el (cd /home/tu_usuario/CA/2.0). Bien despues de esto realizaremos una modificacion en el archivo vars (vi vars) y cambiaremos lo siguiente:

export KEY_COUNTRY="ES"
export KEY_PROVINCE="CAT"
export KEY_CITY="Santa Coloma de Gramanet"
export KEY_ORG="XEiLL"
export KEY_EMAIL="admin@xeill.net"

Esto lo hacemos para no tener que escribirlo cada vez que construimos una clave, simplemente con darle al intro ya coge el valor por defecto que nosotros hemos escrito

Una vez realizado este cambio escribiremos los suguientes comandos dentro de la carpeta:

  1. . ./vars
  2. ./clean-all
  3. ./build-ca
  4. ./build-key-server servidor
  5. ./buid-key clienteX
  6. ./build-dh

El build-dh englobará todas las claves que haya dentro de la carpeta keys/ por tanto, si despues creamos mas clientes (no hace falta hacer los pasos 1,2 y 3) tendremos que realizar otro ./build-dh

Para el punto 5, si son pocos clientes podemos hacerlo uno a uno, pero si son muchos, como el caso de la XEiLL, donde se han creado 50 clientes, hay que hacer varias modificaciones y un simple comando con un bucle:

  • Editar con vi el archivo build-key y modificar la siguiente linia:
    • "$EASY_RSA/pkitool" --interact $* --> Cambiar --interact por --batch, de esta manera nos ahorramos que nos pregunte los datos por cada cliente que creamos
  • Hacer un bucle con el numero de clientes que queremos realizar:
    • for x in `seq 1 1 num_clientes_a_crear`; do; ./build-key cliente$x; done;

Acabado con esto, a cada servidor se le dará la misma clave servidor, el mismo ca.crt, ca.key y el mismo dh1024.pem. Cada servidor tendrá su propio archivo de configuración, con una estructura como esta:

port 30000
proto udp
dev tap
ca ca.crt
cert servidor.crt
key servidor.key
dh dh1024.pem
server ip_del_tunel mascara_de_subred
ifconfig-pool-persist ipp.txt
keepalive 10 60
client-to-client
comp-lzo
persist-key
persist-tun
verb 3

Luego los clientes que se conecten a estos servidores, se les assignarán una clave cliente a cada uno de ellos, osease que aunque estén conectado a dos servidores diferentes, con la misma clave de cliente ya es suficiente. A continuación la configuración de cliente.

client
dev tap
remote ip_del_tunel_servidor puerto_del_servidor (p.ej. 30000)
nobind
persist-key
persist-tun
ca ca.crt
cert cliente1.crt
key cliente1.key
comp-lzo
verb 3
En estos momentos en la XEiLL encontramos la siguiente distribución:

Centro
clave cliente
Actua Como
Red Tunel
IP del Servidor
Conectado a
IES Puig Castellar
-Servidor
172.16.107.64/27172.16.107.65/27-
CEIP Torre Balldovina cliente3Servidor
Cliente
172.16.107.160/27172.16.107.161/27Puig Castellar
Banus
CRP Santa Coloma
CRP Santa Coloma
cliente1
Servidor
Cliente
172.16.107.96/27 172.16.107.97/27 Puig Castellar
CEIP Banus
cliente2
Servidor
Cliente
172.16.107.128/27 172.16.107.129/27 Puig Castellar
CRP Santa Coloma
CEIP Rafael Casanova
cliente4
Cliente
-
-
Puig Castellar
Torre Balldovina
IES Terra Roja
cliente5
Cliente
-
-
Torre Balldovina
Banús
IES Torrent de les Bruixes
cliente12
Cliente
-
-
Torre Balldovina
Banús
IES La Bastida
cliente7
Cliente
-
-
Torre Balldovina
Banús
IES Can Peixauet
cliente8
Cliente
-
-
Torre Balldovina
CRP Santa Coloma
CEIP Lluis Millet
cliente11
Cliente
-
-
Banús
CRP Santa Coloma
ZER el Serrai
-
Cliente
-
-
Puig Castellar
CRP Santa Coloma
CEIP Antoni Gaudi
cliente9
Cliente
-
-
Banús
Torre Balldovina
IES Les Vinyes
cliente10
Cliente
-
-
Puig Castellar
CRP Santa Coloma
CEIP Fray Luis de León
cliente13Cliente
-
-
CRP Santa Coloma
Banús
CEIP Sagrada Familia
cliente15
Cliente
-
-
IES Puig Castellar
CRP Santa Coloma
Los que realizan la función de servidores tienen las siguientes IP's y puertos de openvpn abiertos

CentroIP/puerto
Puig Castellar
82.151.203.129/30003
CRP Santa Coloma 82.151.207.5/30008 
Torre Balldovina
82.151.203.105/30001
Banús
82.151.204.5/30010

El nombre de los arhivos de configuración es la siguiente:

    - Si es servidor --> servidor_nombre_del_centro.conf

    - Si es cliente --> cliente_nombre_del_centro-centro_al_que_conecta.conf

Bien, realizados estos cambios, tenemos ya configurado el OpenVPN, por tanto solo nos queda configurar el Quagga (OSPF & Zebra)

El archivo de configuracion de ospf (/etc/quagga/ospfd.conf) quedará similar a lo siguiente:

hostname ceip-balldovina

password xXxXx
enable password xXxXxXx

log file /var/log/quagga/ospfd.log

interface lo
interface eth0
interface eth1
interface tap0
interface tap1
interface tap2
interface tap3

router ospf
ospf router-id 10.35.144.97
passive-interface eth0
passive-interface eth1
! Area WiFi
network 10.35.144.96/27 area 1
! Conexión directa con Puig Castellar
network 172.16.107.16/30 area 0
! conexion con PUIG CASTELLAR
network 172.16.107.64/27 area 0
! conexion con CRP SANTA COLOMA
network 172.16.107.96/27 area 0
! conexion con CEIP BANUS
network 172.16.107.128/27 area 0
! Conexion Propia Balldovina
network 172.16.107.160/27 area 0

* Archivo de configuracion del centro Torre Balldovina.

Se añadirán tantas linias network, como conexiónes a las que pertenezca.

En el caso del anterior, tiene tres conexiones, a tres servidores diferentes, y una directa con al Puig Castellar, mas aparte, su area de cobertura WiFi.

Por ultimo solo nos queda ver el archivo de configuración de zebra (/etc/quagga/zebra.conf)

hostname ceip-balldovina

! Contrasenya de usuario y de administrador
!
password xXxXx
enable password XXXxxXXX


! Definicion de interfaces
!
interface lo
interface eth0
interface eth1
interface tap0
interface tap1
interface tap2

! Ruta por defecto
!
ip route 0.0.0.0/0 192.168.0.1

log file /var/log/quagga/zebra.log



Servicio DNS

En el named.conf antes teniamos dos vistas, la LAN y la xeill.net, esto sigue igual, lo que ahora en la vista xeill.net, diferenciamos 3 zonas:
  • La red inalambrica interna, osease la zona de cobertura del centro.
  • La zona xeill.net que su función es, si estas conectado a la xeill, cualquier pregunta que sea referente a .xeill.net pregunte a varios forwarders (zona 0), donde antes solo preguntaba al Puig Castellar, ahora se han añadido la zona 0, y eso nos hace tener mas tolerancia de fallos en caso de que se caiga el servidor del Puig.
  • Y por ultimo, cualquier cosa que preguntemos de internet, iremos a preguntarlo al servidor DNS de la XTEC
Hay que diferenciar entre el named.conf del area 0 (maestros y esclavos) y del area 1

A continuación como queda el nuevo named.conf del area 0:

options {
directory "/etc";
pid-file "/var/run/named/named.pid";
};

// Vista dedicada a la LAN del centro
view "lan" {
match-clients { 192.168.0.0/24; };

zone "ceipbanus.xeill.net" {
type master;
file "/var/named/ceipbanus.xeill.net-LAN.hosts";
};

// Si nos preguntan desde la LAN, atacamos a los DNS de Internet
forwarders {
213.176.161.16;
213.176.161.18;
};
forward only;
};

// Vista dedicada a los clientes de la XEiLL
view "xeill" {
match-clients { any; };

zone "ceipbanus.xeill.net" {
type master;
file "/var/named/ceipbanus.xeill.net.hosts";
};

zone "145.35.10.in-addr.arpa" IN {
type master;
file "/var/named/145.35.10.in-addr.arpa";
allow-update { none; };
};

zone "xeill.net" IN {
type slave;
file "/var/named/xeill.net.hosts";
allow-query { any; };
masters { 10.35.144.1; };
transfer-source 10.35.145.129 port 53;
};

// Si hemos llegado aqu� es que no sabemos la respuesta y tampoco preguntan
// por algo del dominio xeill.net, así que preguntamos a los DNS de Internet
forwarders {
213.176.161.16;
213.176.161.18;
};
forward only;
};

Y aqui el named.conf del area 1: (Es exactamente todo igual menos la zona "xeill.net" que se configura de la siguiente manera

zone "xeill.net" {
type forward;
forwarders {
10.35.144.1; // IES Puig Castellar
10.35.144.97; // CEIP Torre Balldovina
10.35.145.129; // CEIP Banus
10.35.145.65; // CRP Santa Coloma
};

};


Plone

Por ultimo, el ultimo cambio realizado es en el CMS Plone, que antes, como podeis ver en la otra sección de esta carpeta, teniamos que instalar los componentes uno a uno, osease el python por un lado, el zope por otro y el plone por otro. Ahora todo esto lo encuentras en un mismo paquete en plone.org.

Una vez descargado extraerlo en la carpeta /opt (tar -xzf Plone-2.5.x..... /opt), despues no dirigimos a esta carpeta extraida y ejecutamos el install.sh (./install.sh). Se pondra a extraer cosas y tardá aproximadamente alrededor de 5 min, asi que paciencia. Al finalizar te dará un usuario y contraseña que tienes que apuntar, y te creara una carpeta llamada Plone-2.5, dentro de esta, encontrarás todos los servicios (zope & python) instalados ya.

Para arrancar el servicio es necesario ejecutar el script startcluster.sh dentro de la carpeta zeocluster/bin.

Una vez arrancado hay que modificar un par de archivos de configuración. En la carpeta client1/etc y client2/etc que estan dentro de zeocluster, encontraremos el archivo de configuración de zope (zope.conf), lo editaremos con vi y haremos la siguiente modificación:

<http-server>
# valid keys are "address" and "force-connection-close"
address 8080 ---> Cambiaremos 8080 por 8081 en client1 y 8082 en client2
# force-connection-close on
</http-server>

Una vez echo esto, arrancamos el servicio si no lo hemos arrancado, o lo restarteamos con restartcluster.sh.

Acabado con todo esto abriremos un navegador y escribiremos http://127.0.0.1/manage, nos pedire usuario y contraseña que os ha dado al finalizar la instalación. Una vez dentro arriba a la derecha tienes un listbox con un boton ADD a su lado. En el listbox buscaremos PLONE SITE y le daremos a ADD, nos creará un sitio plone, al que le daremos un nombre (nombre del centro educativo con su ies o ceip, ej iespuigcastellar). Hecho esto, podemos cambiar en la barra de navegación manage por el nombre del centro (ej: http://127.0.0.1/iespuigcastellar) y veremos la interfaz web de plone.

Arrancar y parar Plone con el sistema

Bien, plone por defecto no es un servicio de GNU/Linux, por tanto tendremos que crear un script para que lo arranque, cuando arranque el sistema, y que lo pare, si se viene abajo el sistema.

Para ellos nos dirigiremos a /etc/init.d/ (cd /etc/init.d) y crearmos el archivo, con vi, zope_nombre_del_centro. Dentro del este archivo copiaremos lo siguiente:

#!/bin/sh
# RedHat startup script for a Zope instance using zopectl
#
# chkconfig: 2345 80 20
# description: Zope, the web application server

# Source function library.
. /etc/rc.d/init.d/functions

controlpath="/opt/Plone-2.5/zeocluster/bin"
name="zope_nombre_del_centro"

RETVAL=0

start() {
[ ! -f /var/lock/subsys/$name ] && "$controlpath"/startcluster.sh
RETVAL=$?
[ $? -eq 0 ] && touch /var/lock/subsys/$name
return $RETVAL
}

stop() {
[ -f /var/lock/subsys/$name ] && "$controlpath"/shutdowncluster.sh
RETVAL=$?
[ $? -eq 0 ] && rm -f /var/lock/subsys/$name
return $RETVAL
}

status() {
if [ -f /var/lock/subsys/$name ]
then
RETVAL=0
else
RETVAL=1
fi
ESTADO="APAGADO"
[ $RETVAL -eq 0 ] && ESTADO="ENCENDIDO"
gprintf "$name esta %s\n" "$ESTADO"
return $RETVAL
}

case "$1" in
start)
start
;;

stop)
stop
;;

restart)
stop
start
;;

status)
status
;;

*)
gprintf "Usage: %s {start|stop|restart|status}\n" "$0"
exit 1
esac

exit $RETVAL

Con esto,  se arrancará y se parará bien el servicio de Plone, sin preocupación de perdida de datos.

Otro cambio realizado, ha sido la creación del vhost BACKUP, para que de esta forma, los coordinadores de la XEiLL de los otros centros, puedan descargarse la copia de seguridad de plone desde cualquier sistema operativo y guardarlo en un HD extraible, y en caso de que se rompiera el disco duro, recuperar el plone con el archivo que ellos tienen guardado.

Para ello crearemos:

  1. Un archivo mediante el comando htpasswd, crearemos un archivo de usuario en la carpeta /opt/store/backup llamado usuario.passwd. Para hacerlo utilizar el comando siguiente:  htpasswd -c usuario.passwd <nombre_de_usuario>, le daremos al intro, nos pedirá una clave que nos inventaremos, siempre y cuando luego nos acordemos.
  2. Un nuevo vhost en /etc/http/conf/vhost llamado backup.conf y dentro contendrá lo siguiente:
<VirtualHost *:80>
ServerName backup.<nombre_del_centro>.xeill.net
DocumentRoot /opt/store/backup/wwwbackup
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None
AuthType Basic
AuthName "Espacio restringido del <nombre_del_centro"
/* A contnuacion observareis que en authfile aparece /opt/store, en caso de tener
una particion unicamente para /store, como pasaba en la configuración de los servidores
de los ordenadores con poco disco duro, quitaremos el /opt, y dejaremos unicamente /store
y en caso de tener una particion muy grande de /opt, crearemos la carpeta /store dentro de
/opt, como sucede en este caso */

AuthUserFile /opt/store/backup/usuario.passwd
Require user <nombre_usuario_del_archivo_usuario.passwd>
</Directory>
</VirtualHost>

Despues nos dirigiremos a /etc/cron.daily y crearemos un archivo con vi llamado backup, dentro escribiremos:

[ -f /store/backup/wwwbackup/backup.tar ] && rm -f /store/backup/wwwbackup/backup.tar
[ ! -f /store/backup/wwwbackup/backup.tar ] && tar -cf /store/backup/wwwbackup/backup.tar /store/backup/zope_iestorrentdelesbruixes

Al salir, con chmod le damos permisos de escritura, y con esto cada dia se creara un backup del plone

Otro cambio es el repozo para las nuevas versiones de plone. Es como el anterior, pero como ya econtramos el python y el zope dentro de la misma carpeta, se modifican algunas cosas:

#!/bin/bash

export PYTHONPATH=/opt/Plone-2.5.2/lib/python/

echo `date +"%d/%m/%Y %k:%M"` Comienza el backup >>/store/backup/zope_iestorrentdelesbruixes/backup_repozo.log

/opt/Plone-2.5.2/Python-2.4.4/bin/python2.4 /opt/Plone-2.5.2/bin/repozo.py -Bvz -r /store/backup/zope_iestorrentdelesbruixes/zope_iestorrentdelesbruixes -f /opt/Plone-2.5.2/zeocluster/server/var/Data.fs >>/store/backup/zope_iestorrentdelesbruixes/backup_repozo.log 2>>/store/backup/zope_iestorrentdelesbruixes/backup_repozo.log

echo `date +"%d/%m/%Y %k:%M"` Backup realizado >>/store/backup/zope_iestorrentdelesbruixes/backup_repozo.log


Por ultimo decir, que presteis mucha atención a la configuración de Apache explicada en el apartado de CMS Plone de la Configuracion Antigua (Hasta 2006).

Proxy HTTP

    En este apartado lo unico que cambiamos es el archivo WelcomeRedirector.pl. Le pondremos una nueva configuración para que en la LAN del centro, cada vez que entre, no nos salga la pantalla de bienvenida de la XEiLL. La configuración del archivo, que recordamos que tiene que estar en /opt/bin, nos quedará de la siguiente manera:

#!/usr/bin/perl
#
# WelcomeRedirector v0.2 (por Victor Carceler)
#
# Este script es software libre GPL
#
# Este script es un redirector para Squid (http://www.squid-cache.org/Doc/FAQ/FAQ-15.html)
# Cuando Squid recibe una petición, se la pasa a WelcomeRedirector y el script retorna
# la URL que Squid debe retornar al cliente.
#
# Si es la primera vez que el cliente realiza la petición, o hace más de TIMEOUT segundos
# desde la última petición, el cliente es dirigido a URL. En caso contrario el cliente
# obtiene el documento que pidió.
# NO_REDIRECT_PREFIX indica un prefijo que si se encuentra en la dirección del cliente
# evitará que sea redirigido (aunque sea la primera conexión).
#
# Para que Squid utilice este software debe configurar la directiva redirect_program
# y redirect_children (con valor 1) en squid.conf

my $TIMEOUT = 3600;
my $URL = "http://iespuigcastellar.xeill.net/activitats/xeill";
my $NO_REDIRECT_PREFIX = "192.168";

$|=1;

my %registro;

while (<>) {
@X = split;
$url = $X[0];
$address = $X[1];
$ident = $X[2];
$method = $X[3];

#print "Petición: $url -> $address -> $ident -> $method\n";

my $registrado = 0;

# Sólo redirigimos peticiones que no coinciden con NO_REDIRECT_PREFIX
if ($address !~ /$NO_REDIRECT_PREFIX/) {
# Tenemos $address registrada ?
my @ips = keys %registro;
foreach(@ips) {
if ($_ == $address) {
if ((time - $registro{$address}) >= $TIMEOUT) {delete $registro{$address};
} else {
$registrado = 1;
#print "Tengo la ip registrada !!!";
}
}
}
} else {
$registrado = 1; # Nos saltamos la redirección
}

if (! $registrado) {
$url = $URL;
print "302:$url\n";
$registro{$address}=time;
} else {
print "$url\n";
}
}

Lo podemos descargar de aquí.

Otro cambio muy importante este año 2007 en el tema Proxy HTTP (SQUID), es el proxy transparente. Para configurar el proxy transparente necesitamos tener instalado el paquete squid2.6STABLE, ya que el proxy transparente empieza aparecer en la version 2.5 de SQUID.

PROXY TRANSPARENTE EN SQUID-2.6

Unicamente sufrirá un cambio el archivo squid.conf, la variable que declarabamos http_port ahora quedará así:

http_port 8080 transparent


PROXY TRANSPARENTE EN SQUID-2.5

Modificaremos el archivo squid.conf unicamente en la siguientes variables: (no tocar la variable http_port)

#Default:
# httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_port 80

#Default:
# httpd_accel_with_proxy off
httpd_accel_with_proxy on

#Default:
# httpd_accel_uses_host_header off
httpd_accel_uses_host_header on


En ambas versiones, a parte de esto, habrá que realizar una norma en el ip_tables para redirigir todo lo que venga por el puerto 8080, que es el que tenemos abierto para SQUID, lo redirigiremos al puerto 80, de esta manera no habrá que configurar el proxy en los navegadores, ni programas que necesiten proxy para salir a internet. La norma del ip_tables que definiremos es:

* En mandriva 2006 es posible no encontrar iptables instalado, asi que habrá que hacer urpmi iptables y listos.

[root@localhost ~]$ iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
//Ejecutamos a continuación
[root@localhost ~]$ /etc/init.d/iptables save //con lo que se escribirán las reglas en uso en /etc/sysconfig/iptables

Para ver su correcto funcionamiento, ejecutaremos el siguiente comando: iptables -L -t nat

!!! ---- OJO Y MUY IMPORTANTE ---- !!!
Con proxy transparente no funciona el protocolo HTTPS, eso significa que los formularios de la mayoria de las paginas no funcionarán. (Por cuestiones de seguridad)