Cambios realizados en 2007
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

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:
- . ./vars
- ./clean-all
- ./build-ca
- ./build-key-server servidor
- ./buid-key clienteX
- ./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.
clientEn estos momentos en la XEiLL encontramos la siguiente distribución:
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
| Centro | clave cliente | Actua Como | Red Tunel | IP del Servidor | Conectado a |
|---|---|---|---|---|---|
| IES Puig Castellar | - | Servidor | 172.16.107.64/27 | 172.16.107.65/27 | - |
| CEIP Torre Balldovina | cliente3 | Servidor Cliente | 172.16.107.160/27 | 172.16.107.161/27 | Puig 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 | cliente13 | Cliente | - | - | CRP Santa Coloma Banús |
| CEIP Sagrada Familia | cliente15 | Cliente | - | - | IES Puig Castellar CRP Santa Coloma |
| Centro | IP/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
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:
- 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.
- 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)