Category Archives: Linux

A veces cansa

Voy a llorar un poco por aquí, puedo? Gracias!
Hoy visité una universidad del país, X universidad… hablé con su rector, durante un buen rato, media hora, una hora, proponiéndole un plan de vinculación con la comunidad en apoyo y para mejor aprovechamiento del SL. Posibilidad de a nivel país poder apoyar aprovechando este tema de vinculación. La negativa fue incoherente pero eso sí: cortés y diplomática. No pude ni enojarme en ese momento, total el que venía proponiendo la idea era yo y quien podría mostrar interés o requerir más información eran ellos.

Hoy es de los días en que siento que no entiendo al ser humano. A veces sientes que hay alguien “allá arriba” que tiene una lista que dice: “bloqueen lo que venga de este tipo”

O es como cuando alguien por “hacerte daño” se dedica a difamarte o a alejarte de algo que no sólo representa algo para tí sino también para él y seguramente para miles o millones más

Las universidades deben ahora cumplir con varios requisitos entre ellos vinculación con la comunidad, investigación, etc. para poderse mantener en su categoría o mejorar su categoría.

Y no es por falta de esfuerzo mío o por no plantear bien lo requerido. Simplemente sin mucho para allá o para acá.. ahi acabó todo… gracias, hasta luego!

Lo peor es que no es en esa universidad solamente donde me ha sucedido.. todavía a muchas les falta comprender lo que es SL.

Uno tiene las ganas, el conocimiento, incluso el tiempo, la dedicación… pero vas por el mundo nadando contra corriente.. a veces cansa.

Cómo obtener IPv6 para mi sitio web si mi proveedor de hosting sólo tiene IPv4

Hola

Bueno, sobre IPv6, quería comentarles de un servicio que estamos ofreciendo en EcuaLinux con la finalidad de que las organizaciones interesadas puedan ya implementar IPv6 en sus sitios web sin costo adicional alguno.

Como breve introducción:
Llevamos un buen tiempo trabajando con IPv6 en nuestros sitios y de algunos de nuestros clientes, en sentido general no han habido mayores dificultades en estos. Sin embargo frecuentemente nos topamos conque existe mucho desconocimiento sobre el proceso; incluso muchos mitos sobre lo que es o no es IPv6. Y no lo dudemos: también existen inconvenientes prácticos para llevar a cabo el proceso de implementación de IPv6 en los sistemas que actualmente utilizamos.

El pasado año 2012, desde el ministerio de telecomunicaciones a través del acuerdo ministerial 039-2012 se solicitó en al Artículo 1, inciso 2:

“Las instituciones y Organismos del sector Público señalados en el Art 225 de la Constitución de la República del Ecuador, deberán realizas las gestiones necesarias para que implementen sus sitios web y plataformas de servicios electrónicos, con el soporte y compatibilidad con el protocolo IPv6 de manera coexistente con el protocolo IPv4, en el plazo de un año contado a partir de la entrada en vigencia del presente acuerdo.”

En la maestría en redes que estamos siguiendo, hicimos un muestreo de diversos sitios gubernamentales (pero lo mismo aplica perfectamente a cualquier tipo de sitio web) y notamos que poco se ha avanzado en la implementación de IPv6 al menos en los sitios web, que son la parte visible de una organización en internet. Un ministerio o dos, un municipio o dos, una universidad o dos, una empresa comercial o dos, pero no es un número alto. Pero bueno: es normal! Es un protocolo que recién estamos comenzando a usar. Todo tiene que comenzar por los primeros ¿verdad?

Una de las justificaciones que tienen las organizaciones (públicas y privadas) es que los ISP no ofertan todavía en forma masiva IPv6 a las redes de los clientes. Y por tanto los potenciales usuarios finales de IPv6 ven como un inconveniente al proceso este hecho.

Otro de los “peros” que se tienen (pueden haber más) es que quizá el sitio web es un sistema ya instalado, funcionando, que quizá no controlen directamente pues está en un proveedor de hosting o de internet y que tocarle a este sistema con la finalidad de implementar IPv6 quizá no sea posible o les afectaría el sistema IPv4 actual y bueno, las típicas situaciones de: “el director, gerente, ministro, jefe, administrador, no nos permite que se vaya a caer el sitio ni un minuto para realizar este cambio, etc, etc, etc”

Ahora sí, sobre el sistema que creamos:
Nosotros pensamos en algo para ayudar en este proceso: Si no pueden poner IPv6 en su sistema ya sea porque a la red no llega IPv6, o porque estiman o saben que el proceso de implementación de IPv6 en su servidor web es o va a ser muy complejo… ofrezcamos una alternativa.

Y la explico mejor:

Supongamos que tengo un servidor con IPv4 en el cual está corriendo mi sitio web. Y a este servidor, por la razón que sea, no le puedo implementar IPv6 al momento; sin embargo quiero cumplir con el acuerdo ministerial e ir haciendo algo para que al menos mi sitio web esté presente por IPv6.

Para esto nosotros te ofrecemos un servidor localizado en nuestra red, el cual puede actuar de intermediario entre la red IPv6 y la red IPv4 donde está tu servidor.

El usuario sólo debe realizar los siguientes pasos:
1- registrarse en http://ipv6.ecualinux.com/,
2- agregar entonces el record (o los records) al que se quiere ponerle IPv6, por ejemplo www.midominio.gob.ec
3- entonces en los DNS que maneje su dominio, donde quiera que esté, solicitar que agreguen o agregar un record AAAA hacia la IPv6 que le daremos cuando realice el paso 2.

Unos minutos después de realizado el paso 3, el sistema ya estará funcional a través de IPv6. Mientras no realice los 3 pasos, el sistema no funcionará en IPv6.

¿Cómo se vería esta página web entonces? habrían dos formas:
– Si alguien desea ver el sitio por IPv4, obtendrá el record A de tu servidor, y accederá directito a tu servidor.
– Si alguien desea ver el sitio por IPv6, obtendrá el record AAAA de tu servidor, irá por tanto a un servidor nuestro que actuará de intermediario (proxy reverso) hacia la IPv4 (record A) de tu servidor.
Por tanto se verá la misma página web que si le viera por IPv4. Como ventaja adicional tu sitio ahora estará en dos lugares: en tu servidor web, y además se servirá el sitio desde un servidor nuestro en Norteamérica; esto podría tener como ventaja adicional el disminuir muy levemente el tráfico hacia tu sitio web original.

Todo esto sin tener que hacer ningún tipo de reconfiguración ni reprogramación de nada en el actual sistema web.

Este servicio no tiene costo, es un pequeño aporte al proceso de implementación, no es la panacea, lógicamente siempre hay peros y porqueses que dar sobre el cómo funciona el sistemita pero bueno, sabemos que funciona porque ya le tenemos a algunos sitios web trabajando en IPv6 a través de esta pasarela.

Durará lo necesario hasta que poco a poco las organizaciones vayan implementando IPv6 directamente.

Si algun ISP local desea, le podemos brindar el código de este sistema (de hecho luego veré que sea publicado el código) para que puedan implementar sus propias pasarelas. Pero esto nos implicaría un poco más de documentación sobre cómo dejar configurado el servicio y nos demoraría un poco más hacerlo.

Como último, y sobre el tema de capacitación que hablo al final de esta noticia:

También en el mismo artículo del acuerdo ministerial, en el inciso 5, indican que dictarán charlas, talleres, foros y jornadas teórico prácticas sobre aspectos técnicos de IPv6.

Respecto a este inciso: contactamos a varias personas en el mintel y subsecretaría de informática, enviamos incluso propuestas de capacitación sobre cursos prácticos en video sobre IPv6 en servidores Linux (que son la mayoría de los servidores usados para servicio web e incluso para servidores de comunicaciones) curso que ya ofrecemos y que se puede recibir incluso remotamente (Están pensados para llegar al máximo de personas) y hemos recibido al momento el silencio por respuesta.

Esperemos que para el próximo año se pueda también aportar con esta parte de los cursos pues en efecto uno de los inconvenientes que vemos no es la dificultad de la implementación de IPv6… no! (es fácil verdad?) el inconveniente es que las personas quizá por falta de tiempo en esta vida tan agitada que llevamos no tienen tiempo de investigar tranquilamente y probar el protocolo IPv6 y en efecto es muy útil el poder recibir un empujón en cuanto a la capacitación en IPv6.

A ver, a ver, a quién le atacaron hoy

Bueno, al incop!

Aquí la url de zone-h.org que es de donde obtengo los reportes diarios:

http://www.zone-h.org/mirror/id/19026232

sí, mira una captura de pantalla de la firma que les han subido:

Screenshot from 2013-01-17 20:59:23

Hum, sí.. pues mira, parece que tienen un joomla (oh sorpresa, otra vez un joomla) y el atacante aprovechó ya sea una falla de seguridad por no estar actualizado o correctamente protegido, o descubrió la clave.. y puso una firmita.

Qué significa la firmita? Es algo así como que les dicen: entré! Y puedo hacer más!

Señores, más cuidado, políticas más fuertes para evitar esto. El incop no es gracia, no es un sitio así así por cumplir.. es el sitio del incop! Por favor, más atención.

Cómo resolverán el problema? Seguramente no lo sabremos.. ahora se enterarán de que les atacaron, eliminarán la firmita y ya.. no dirán nada de lo sucedido, y no sabremos en lo absoluto cómo corrigieron el problema para que las otras instituciones puedan aprender de las acciones que ellos van a tomar. Y para que tengamos la tranquilidad de que tomaron medidas para que no vuelvan a atacarles por el mismo lugar.

Y repito: comprar más hardware o sistemas comerciales que no aportan conocimiento no va a solucionar el problema!

Cómo se puede evitar o mitigar esto? Con un continuo aprendizaje, aplicación de técnicas de seguridad, una correcta política de mantenimiento de los sistemas. Capa 8, orientémonos a la capa 8.

No estamos en 1998 cuado poner un sitio era subir un html y ya.. los sitios los están atacando y la seguridad es algo del día a día, más en lugares tan importantes como el incop.

También atacaron a otros sitios, creo que dos gobernaciones, pueden verles en www.zone-h.org

 

Cómo configurar alta disponibilidad con dos WAN (dos ISP)

Hace años realizé estas pruebas pero a patita, usando directamente los comandos de linux (tal y como se indica en el excelente libro de www.lartc.org)

Yo había pensando que había cambiado un poco la idea, pero no, sigue siendo la misma.

El escenario:

Supongamos que tenemos dos proveedores de internet, dos ISP, pueden ser el mismo ISP con dos conexiones o dos muy diferentes ISP.. y que queremos que los usuarios de nuestra red naveguen a través de ambos.

Bueno, pues requeriremos de una máquina con 3 tarjetas de red, una para cada WAN (para cada ISP) y otra para la LAN donde estarían nuestros sistemas.

Este gráfico que mostraré es muy burdo, puede ser mejorado (sobre todo por ejemplo insertando un servidor proxy, correos, control de contenidos, etc detrás de la tarjeta ETH02 del server que aquí muestro).

Esquema planteado para balanceo de carga entre dos conexiones de internet
Esquema planteado para balanceo de carga entre dos conexiones de internet

Este método que usaremos no hace magias, simplemente si un usuario solicita ir a un sitio web, el sistema le saca la petición por uno de los dos ISP. Si otro usuario solicita ir a otro sitio, pues le saca la petición por el otro ISP y así cada petición irá saliendo alternadamente por cada ISP.

No es perfecto: una vez que una petición sale por un ISP, se mantiene esta preferencia hasta que se cierre totalmente. Es por muchas cosas, por ejemplo para evitar que un sitio web sienta que le están jugando sucio si ve que un paquete llega por una IP y luego el siguiente por otra. Entonces se mantiene toda la conexión por un ISP, para que salga por la misma IP siempre.

Lógicamente esto tiene algo malo, si se cae el ISP por donde sale mi conexión, entonces me quedaré colgado un rato, hasta que se reinicialice la conexión por el otro ISP. Por suerte este será el escenario menos frecuente, y no ocurrirá a todas las conexiones, sino solamente a las que estén verdaderamente establecidas en ese momento. Típicamente ni se notará.

Algunas personas piensan que esto se llama Bonding. Bonding es “pegar” y no es la idea esta. Bonding (también conocido como trunking) se hace cuando yo tengo dos tarjetas de red que se van a conectar a un mismo switch (a una misma vlan) y le uso para incrementar el canal hacia mi LAN y para que ante una falla la otra tarjeta siga sirviendo. En el bonding ambas interfaces actúan de común acuerdo, ambas tienen una única IP y se reparten los paquetes desde-hacia esa IP. El bonding se hace en LAN, no se hace en conexiones WAN.

Bueno, veamos el diagrama anterior: tengo dos ruteadores de dos ISP diferentes, ellos me han entregado una IP (192.168.9.1 el uno y 192.168.1.1) que sería el gateway hacia ellos. Ellos no saben y no esperan que tu tengas dos ISP, simplemente ellos esperan que tú configures una IP en tu servidor (192.168.9.3 el uno y 192.168.1.3 el otro) y que le pongas a ese servidor la IP de ellos de gateway (192.168.1.1 el uno y 192.168.9.1 el otro).

Pero nosotros no haremos eso. Nosotros bajaremos ZeroShell del sitio www.zeroshell.net y le pondremos a nuestro servidor 3 tarjetas:

  1. en ETH00 configuraremos la IP que nos dió el ISP1 (192.168.9.3).. y hasta le pondremos su gateway (192.168.9.1). Aquí reiniciamos y probamos ver si nos podemos conectar al zeroshell. Te toca aprender a guardar su “profile” la idea es que la máquina arranque con esta interfaz bien configurada en el profile que guardarás.
  2. En ETH01 configuraremos la IP que nos dió el ISP2 (192.168.1.1), y no le pondremos de momento el gateway de este ISP2.
  3. En ETH02 cofiguraremos la IP que pondremos hacia nuestra LAN, la 10.0.0.1 por ejemplo.

No continuemos hasta que logremos ver esto, las 3 interfaces configuradas como aqui indiqué:

Configuracion de la red en ZS para alta disponibilidad

Si te fijas, eth00 tiene la IP que me asignó el ISP1, y así mismo eth01 y eth02 la de mi lan.

Pondré una PC a mi LAN (eth02) y le pondré de IP 10.0.0.2 y de gateway 10.0.0.1. Lógicamente le pondré los dns que mejor me parezcan.

Ahora configuraré NAT, para que el equipo de mi red LAN (10.0.0.2 le conecté a ETH02) pueda navegar.

Para configurar NAT, mira la imagen anterior. Ves allí arriba un botoncito que dice: NAT. Pues dá click aquí y escoge AMBAS interfaces que están conectadas a los ISP: ETH00 y ETH01 en mi caso.

Probando el NAT:

No sigas si esta prueba no resulta: intenta realizar un ping desde el equipo de tu LAN (10.0.0.2) hacia internet, verás que funciona. Tiene que funcionar, sino revisa que el NAT esté bien definido y que el equipo pueda hacer ping a 10.0.0.1 que es el gateway de él. No sigas hasta que esto no funcione.

Configurando Dual WAN

En el menú de la izquierda escojo: Net Balancer

  • En la sección Gateway List, aparecerá solamente el gateway que se corresponde con la eth00 (la conexión a la que le configuré el gateway anteriormente) Tiene el nombre DEFAULT GATEWAY. Tócale y aprieta el botón Change
  • En el recuadrito que te saldrá, en la parte que dice: IP Address, defínele la IP del gateway de ese ISP1 (192.168.9.1 en mi ejemplo).
  • En el mismo anterior recuadro que te saldrá, escoge Status y ponle en Active
  • Guardo y cierro esta ventana, me regresa a la ventana principal
  • Ahora aprieto el botón Add
  • Aquí En descripción pongo algo que sea referente al ISP2
  • En IP Address pongo la IP del gateway del ISP2
  • En Status, le pongo Active (enable, habilitado, lo que diga)
  • Guardo y cierro.
  • ahora tendré definido dos gateways. El del ISP1 y el del ISP2
  • A la derecha habilito el ICMP Failover checking.
  • Abajo en Failover IP addresses, pongo una o varias IPs hacia las cuales probará el sistema: el sistema cada algunos segundos enviará un ping a esas IPs si no responde, es que está caído ese canal y le deshabilita por un rato. Sugiero pongas por ejemplo 8.8.8.8 que es la IP de un dns de google que nunca se cae.
  • Ah sí, le pongo enable en las Failover IP Addresses que configuré
  • Arriba arriba a la derecha de la ventana principal dice; Mode, le dejé como estaba como Load Balancing and Failover.
  • Arriba arriba a la izquierda de la ventana principal dice: Status, le marco ese checkbox para que se active.
  • Entonces aprieto en Save.

Luego de un ratito ya estará funcionando.

Verificaciones:

Cómo le probé: Bueno, apagué, desconecté uno de los dos ISP mientras hacía ping desde la PC de la red LAN.

Luego reconecté la conexión de ese ISP, y cuando ya estaba activo, desconecté el otro.. y probé, y el ping funcionaba.

Luego le reconecté a este ISP. Para que se mantuvieran los dos canales.

Viendo los logs fíjate cómo el sistema reporta que le apagué una conexión (la default) cómo lo detecta y le desactiva, y luego que se enciende le detecta y activa. Lo mismo con la otra conexión que le llamé Paul (pues iba por la conexión que tiene Paul para su uso) y se nota cómo se detecta la desconexión y la reconexión.

Screenshot from 2013-01-15 14:54:53

En resumen, es factible hacer failover de forma bastante fácil.

Lógicamente esta es una pequeña introducción al tema, pues hay variantes un poco más especializadas (por ejemplo cómo hacer para recibir correos, cómo priorizar un canal sobre el otro, etc). Pero definitivamente con esta introducción seguramente podrás ya seguir investigando las otras variantes.

Todo este experimento lo hice a través de sistemas virtualizados para facilitarme la vida.

Presentación de arp y dns spoofing con ettercap

En el módulo de seguridades nos pidieron que nuestro grupo hiciera un pequeño trabajo de forma autónoma y presentara a los compañeros.. era sobre cómo hacer arp spoofing y dns spoofing utilizando una herramienta bastante conocida llamada ettercap para aplicar un ataque muy antiguo de spoofing en una red local.

No es la ciencia, existe muchísima información sobre este ataque, que no por ser antiguo o bien conocido deja de ser un problema.. todavía en estos tiempos es factible aplicarlo.

Aquí pongo un pdf del documento que nos sirvió de apoyo para presentar el resultado de la prueba.

ARP & DNS Spoofing – Presentación-1

Ettercap es bastante conocido y bien documentado de forma tal que realizar la prueba basándonos en los requerimientos (enviar respuestas de dns incorrectas a un equipo víctima presentándole una falsa página de facebook) fue realmente cautivador 😉 y por mi lado me permitió cerciorarme una vez más que asegurar una red es bastante complejo eh, no es cuestión de un hardware y ya.

Resultados del experimento de medición de Jitter propuesto para módulo de Banda Ancha de la maestría en redes

Este es el borrador con el que nos preparamos para demostrar el experimento de medición de jitter en VoIP dentro de una red congestionada:

ResultadosExperimento2012-01-02

 

 

Usando ZeroShell para probar QoS

Este documento lo publiqué a fines del año pasado para que mis  compañeros de la maestría en redes tuvieran una herramienta en Software Libre con la cual probar un escenario que nos habían planteado para medir el jitter entre dos puntos de una red congestionada.

Aquí publico la parte técnica de este documento pues me parece útil que otras personas puedan tener acceso a cómo probar el escenario y además usar ZS:

——————————————————–

Bueno, la idea de este laboratorio independiente es la siguiente:
Se necesita priorizar el tráfico de VoIP para evitar o minimizar el jitter.

Ahora consideremos:

1- El detectar el equipo que consume ancho de banda no me parece una buena idea puesto que no será un sólo equipo el que consuma ancho de banda, sino que pueden ser equipos diversos en diversos momentos del tiempo. Ahora es cierto que típicamente lo que sugieren algunas personas es precisamente esto pero no estoy de acuerdo con esta sugerencia.

2- Otra opción sería poner en redes diferentes los equipos que harán VoIP de los que tendrán un tráfico normal de forma tal que controle yo lo que consume cada red. Esto es válido, pero no es el caso que nos ocupa ahora.

3- Cuando hice el trabajo (porque ya lo hice) no nos habían indicado que además había que usar el emulador gns3 que es un gran consumidor de ram y complica por gusto el trabajo y no aporta mucho al hecho de diferenciar en clases el ancho de banda, por tanto en esta explicación no hablaré del gns3 ya que incluso no nos indican todavía cómo configurar frame relay, tema simple pero algunos no conocen.

Por tanto le realicé el laboratorio de la siguiente forma:

Para virtualizar usé KVM pero bien podrían usar VirtualBox

Cada equipo le instalé con 1GB de ram pero una vez le encendí le bajé a 256MB pues como es Linux en modo texto no hace falta tanta RAM. De disco creo que le puse 5GB a cada equipo pero podría ser menos (2 ó 3 GB ) si no vas a instalar modo gráfico.

En KVM creé 5 máquinas virtuales:
1 equipo con Linux ZeroShell (ZS) en el medio.
2 máquinas CentOS a la izquierda de ZeroShell
2 máquinas CentOS a la derecha de ZheroShell, una de ellas será Trixbox.

ZeroShell es una distro que pueden bajar de aquí:
http://www.zeroshell.org

La imagen ISO tiene como 200MB, a algunos de los compañeros del grupo 1 que tuvieron el interés de acercarse ya les copié el ISO. Por demás se puede bajar de este sitio si te interesa probar esto que estoy indicando

A la máquina virtual de zeroshell le creé dos redes LAN:
– una de las LAN le llamé “izquierda” y es donde irán los dos equipos que estarán a la izquierda de ZS
– la otra se llamó “derecha” y como ya habrás adivinado es donde irán los dos equipos de la derecha

En uno de los equipos de la derecha puse trixbox , que es una distro de linux basada en CentOS con todo preparado para actuar de servidor de telefonía y que puede se bajada de http://www.trixbox.org la realidad esta parte me resultó rápida porque en este KVM teníamos un trixbox que usábamos hace unos meses y ahi estaba todavía y ya estaba configurado y demás.

En uno de los equipos de la izquierda instalé CentOS con un paquete del repositorio EPEL llamado SIPP (yum install sipp) que es un sistema que realiza varias y continuas llamadas a un servidor de SIP (el trixbox) y parece ser (esto toca validarlo) que me puede ayudar a medir el jitter de esas llamadas a través de wireshark pues al generar tantas llamadas genera suficiente tráfico para que wireshark pueda realizar mediciones. (ACTUALIZACION: A la final preferimos no usar sipp y usar un softphone como ekiga o twinkle para realizar llamadas a la extension 7777 y que quedara activa por buen tiempo).

En este mismo equipo donde puse sipp también instalé wireshark (yum install wireshark-gnome) y me conecté a él vía SSH con los switches -XYC para poder observar esta aplicación wireshark que es gráfica

Sobre los otros dos equipos: el que sobra a la izq y el que sobra a la der, fueron los generadores de tráfico. En ambos instalé CentOS y dentro de ellos instalé un paquete llamado iperf que está en el repositorio de EPEL.

(Como tema aparte: En realidad instalé un sólo CentOS y luego de instalarle el repo de EPEL le cloné y obtuve estos 3 centos similares en su paquetería. Todo esto gracias a las clases de virtualización que dictamos con Linux)

Sigamos: En el CentOS de la derecha ejecuté entonces: iperf -s que es el iperf listo para actuar como servidor, para recibir tráfico indiscriminado

En el de la izquierda ejecuté: iperf -c ipdel.iperf.dela.derecha lo que me permite generar tráfico de este cliente iperf hacia el anterior iperf que actúa como servidor.

Bueno, esto lo ejecuté tantas veces como me pareció conveniente. Y en realidad pueden estudiar más el iperf ya que este tiene una opción para decirle al cliente de iperf que no envíe solo 10 ó 30 segundos de tráfico sino que se pase enviando tráfico por varios minutos, etc. Así fue como hice en la vida real.

Siempre instalé CentOS-6 en los equipos de la der y de la izq. Y este CentOS pueden bajarlo de: http://centos.mirror.iweb.ca/6/isos/i386/CentOS-6.3-i386-minimal.iso es la variante mínima, para que no se demoren tanto en el proceso de instalación.

De los 5 equipos instalados:

  • los 4 Centos van dos conectados a la red de la izq y dos conectados a la red de la derecha (uno es trixbox que es una variante especializada de centos) y todos estos 4 fueron creados con una sóla tarjeta de red cada uno. (ACTUALIZACION: uno de los equipos de la izquierda no fue centos sino debian, pero no altera el cómo se hacen las cosas)
  • El equipo ZS es el único que tendrá 2 tarjetas de red, una hacia la red de la izq donde están dos centos y otro hacia la red de la der donde están los otros dos centos.
  • ACTUALIZACION: El debian actuó de NAT para que todos los equipos de esta red pudieran navegar a internet e instalar paquetes

Ahora viene lo interesante: Entré al zeroshell, y le configuré como un bridge. A los 4 equipos de ambos lados les puse una IP de la misma red e igual le puse una IP de la red al zeroshell.

Usé un recurso idéntico para ponerles la IP: Supongamos al zeroshell le configuré la IP 100, entonces a los de la izq le puse una IP menor que 100 y a los de la derecha una IP mayor que 100, para saber que si era 101, era un equipo de la derecha del 100 (del ZS) y si era .98 era un equipo con una IP menor que 100 y por tanto a la izquierda del ZS.

Entonces seguí las instrucciones aquí dadas:
http://www.zeroshell.org/qos/

Para catalogar el tráfico y todo funcionó! Lógico que seguir estas instrucciones te tomará un rato pero bueno, esta es la parte importante para la clase, el probar QoS.

Le puse un control de ancho de banda al ZS para que no dejara pasar más de 1 ó 2 mbits entre ambos lados… entonces realicé las siguientes pruebas (se pueden realizar más):

1- puse al sipp twinkle (equipo de la izq) a conectarse al server de trixbox (equipo de la der) a generar llamadas a la extensión 7777 (conexiones) y en efecto todo funcionó de maravillas. Este sistema de sipp podría ser sustituido por un cliente de telefonía sip si el caso lo amerita. Por ejempo ekiga. (ACTUALIZACION: así hice al final)

2- entonces puse a los equipos de iperf a generar tráfico (el cliente iperf a la izq y el servidor a la der) y en efecto en esos momentos el sipp comenzó a reportar pérdidas de llamadas pues el canal estaba saturado, pues recuerda que al ZS le dije que iba a ser un canal de 1 ó 2mbit/s

3- entonces seguí las instrucciones listadas en la última url que te he dado para clasificar y activar el control de tráfico, detectando en una cola todo lo relacionado con voip (rtp, skype, sip, etc), luego poniendo esta cola con más prioridad que el resto del tráfico, etc.. y repetí el paso 2… y el sipp ya no reportó pérdidas en las llamadas!
4- ahi me puse a hacer otros experimentos pues el ZS tiene chorro de cosas, pero esto ya no es tema del laboratorio este.

Consideraciones finales:

Para las personas que conocen Linux (que supongo sean la mayoría pues me dijeron que algunos ya han recibido muy buenas capacitaciones en Linux) este proceso les tomará varias horas en echarlo a andar, quizá un par de días bien dedicados a esto.

De mi parte me tomó como 2 días encontrar una solución que me pareciera adecuada (la de ZS) y varias horas más el preparar y probar el escenario aquí descrito. Hay más soluciones que puedes investigar si deseas, muchas más, tienes todo un mes todavía para investigar y prepararle el laboratorio.

Para los que no conocen Linux: es hora de comenzar a estudiarlo porque el tiempo apremia.

¿Cómo incorporar el gns3 ahi? Realmente no me parece conveniente y, la verdad sea dicha, para ser un experimento me parece ya bastante complejo e interesante. Incorporar el gns3 en mi caso me sería problemático pues ya tendría que dedicar otro hardware al gns3 ya que este es realmente un emulador, que consume recursos, que es lento (hecho en un lenguaje interpretado) y hasta incluso debido a ser un emulador podría falsear las interpretaciones que podríamos hacer de este experimento por su lentitud y consumo de recursos.

Pienso que se va a aprender lo siguiente (con lo hasta ahora dicho):

  1. A instalar linux, para algunos
  2. A instalar trixbox, para algunos
  3. A instalar zeroshell, para casi todos
  4. A configurar un repositorio para poder instalar sipp, para algunos
  5. A configurar una extensión en trixbox, para algunos
  6. A configurar un teléfono sip, para algunos
  7. a configurar ZS, para casi todos
  8. A configurar QoS en ZS, para casi todos
  9. A luego probar todo este escenario, para todos.

No queda espacio en el dispositivo, pero sí hay!

Esto me ha sucedido un par de veces, hoy me llamó un cliente al que le damos soporte al servidor, que el server cuando arrancó luego de un apagón, no le funcionaba adecuadamente, no le navegaban las máquinas de su red.

Entré al server, y en efecto el squid estaba caído! Le intenté levantar y nada, daba un error así como pude observar en /var/log/squid/cache.log

2012/11/26 08:01:21| WARNING: Could not write pid file
2012/11/26 08:01:21| Squid plugin modules loaded: 0
2012/11/26 08:01:21| Adaptation support is off.
2012/11/26 08:01:21| Ready to serve requests.
FATAL: Received Segment Violation…dying.
2012/11/26 08:01:21| storeDirWriteCleanLogs: Starting…
2012/11/26 08:01:21|   Finished.  Wrote 0 entries.
2012/11/26 08:01:21|   Took 0.00 seconds (  0.00 entries/sec).
CPU Usage: 0.029 seconds = 0.022 user + 0.007 sys
Maximum Resident Size: 41744 KB
Page faults with physical i/o: 0
Memory usage for squid via mallinfo():
total space in arena:    3460 KB
Ordinary blocks:         3378 KB      5 blks
Small blocks:               0 KB      0 blks
Holding blocks:          1096 KB      4 blks
Free Small blocks:          0 KB
Free Ordinary blocks:      81 KB
Total in use:            4474 KB 129%
Total free:                81 KB 2%

Lo que me llamó la atención es que decía que no podía escribir squid.pid. Miré el espacio libre en /var y resultaba que sí había espacio! mira:

df -h
S.ficheros            Size  Used Avail Use% Montado en
/dev/sda2             4,9G  1,2G  3,4G  27% /
tmpfs                 7,8G     0  7,8G   0% /dev/shm
/dev/sda1             194M  106M   78M  58% /boot
/dev/sda5            1008M   34M  924M   4% /tmp
/dev/sda6              38G   26G  9,5G  74% /var

Bueno, tiene un 74% de uso, no es el 100% aunque es medio alto no.

Me la olí, es un tema de inodos, se agotaron los inodos, porque cuando se acaban los inodos (cada filesystem tiene un número finito de inodos) puede suceder esto, ejecuté df -i para ver inodos libres y en efecto:

df -i
S.ficheros            Inodes   IUsed   IFree IUse% Montado en
/dev/sda2             320000   57751  262249   19% /
tmpfs                2041813       1 2041812    1% /dev/shm
/dev/sda1              51200      56   51144    1% /boot
/dev/sda5              65536      17   65519    1% /tmp
/dev/sda6            2485504 2485504       0  100% /var

Ahí está! 100% de uso de inodos. Por cada archivo que se escribe, se gasta al menos un inodo, el sistema a la hora de instalarse calcula más o menos cuánto espacio hay en la partición y divide este espacio por, digamos: 4k, de forma tal que estima que se escribirán como promedio archivos de 4k. Lógicamente muchos de los archivos que se escriben son mayores a 4k, por lo tanto normalmente los inodos bastan.

En este caso es porque el usuario tiene sarg instalado, sarg es un sistema de análisis de logs de squid que escribe diariamente, semanalmente, mensualmente su resultado del análisis, y son miles de archivitos pequeños, que no llegan a 4k, y esto es lo que hace que se agoten primero los inodos antes que el espacio

Si te fijas, un supuesto problema resultó no serlo. El usuario pensaba era porque se fue la luz. Yo ví que el squid no arrancaba y asumí primero un problema de permisos (puede suceder a veces) pero a la final resultó ser algo totalmente inesperado. Debe planificarse una tarea programada cada cierto tiempo para borrar los logs del sarg más viejos para evitar que esto ocurra.

 

¿Qué pasa si tenemos IPv6 mal configurada?

Estamos preparando un documento para la maestría que cursamos y es sobre ipv6, y nos hemos percatado de un detalle: opino que es mejor que un sitio no tenga IPv6 antes que tenga IPv6 mal configurado.

¿Cómo es esto? Recuerda que al momento estaremos en transición hacia un esquema de doble pila, equipos que tendrán IPv6 y además tendrán IPv4, para de esta forma atender tanto a los clientes que tengan IPv6 como a los que no, que irán por el hasta ahora tradicional IPv4.

¿Y en qué afecta un IPv6 mal configurado?

Mira: si yo como cliente que tengo ipv6 e ipv4, me voy a conectar a un servidor que me reporta que tiene ipv6 e ipv4, yo me conectaré primero por ipv6, pues el objetivo es que todos nos vayamos a ipv6.

Si el servidor que te reporta que tiene ipv6 configurada, en realidad ipv6 no le funciona… pum!! el palo… yo como cliente me iré a conectar a una IPv6 que no funciona y esta no responderá.. entonces mi cliente esperará varios segundos (pues no sabe por qué esta IPv6 no le responde) y a la final luego de varios segundos (no 1 ó 2 sino posiblemente 5 o más) el cliente intentará irse por IPv4.

Esto causa problemas en los clientes a los que migramos a IPv6, porque el cliente entonces comienza a protestar: “Ahhh.. ipv6 es más lento, algunos sitios se ven más lentos” y es porque esos sitios están mal configurados.

Esto por ejemplo acabamos de validar que ocurre con www.conatel.gob.ec el día de hoy, mira:

telnet www.conatel.gob.ec 80
Trying 2800:370:3e:129::10...
telnet: connect to address 2800:370:3e:129::10: No route to host
Trying 186.46.239.21...
Connected to www.conatel.gob.ec.
Escape character is '^]'.

Te fijas cómo mi cliente intenta primero conectarse a la IPv6 que el conatel reporta en sus DNS? Y en la tercera línea dice: No route to host… esto no ocurrió de inmediato sino después de varios segundos. Y un usuario normalmente no gusta de un sitio que percibe como “lento”. Luego ves en la 4ta línea cómo entonces intenta irse por IPv4 y ahi sí pudo.

Lo normal es que hubiera ocurrido así:

telnet www.ecualinux.com 80
Trying 2607:f748:1200:ff00::11...
Connected to www.ecualinux.com.
Escape character is '^]'.

Mira cómo de una abrió la IPv6 de www.ecualinux.com y ya.. esto no tomó ninguna demora.

Es imperioso que los entes a cargo de manejar las redes enel país comiencen a comprender que IPv6 no es un juego de “ponerlo ahi para ver qué tal” es un tema en efecto serio, importante, interesante, no es excesivamente complejo y ya en www.ecualinux.com tenemos a disposición capacitaciones en IPv6 para que puedan comenzar a adelantar en verdad en este tema que está ya a las puertas de nuestras redes.

 

usando a nginx como proxy reverso

Hace un tiempo venía con ganas de probarle, hasta que a la final analizando cómo está funcionando plesk 11 me dí cuenta que utilizan nginx como un proxy reverso para apache.

Bueno, ¿qué es esto de un proxy reverso y para qué me sirve?

Normalmente tu tienes digamos un servidor apache, y este servidor tiene ciertas customizaciones instaladas ya sea que instalaste algún tipo de módulo para un lenguaje de programación fuera de lo normal, exótico, o que en el .htaccess tienes ciertos rewrites muy complejos, o no sé, tienes algún módulo sumamente interesante que te parece imprescindible para el funcionamiento del sitema.

El hecho, yendo un poco más a lo directo, es que no puedes prescindir del apache por una u otra razón. Pero su desempeño no te convence. Está dejando de responder a ratos, se te agota la memoria del servidor; y cuando miras en los logs de apache notas que hay cientos de miles de peticiones.

Tu sitio funciona así:

Es decir, tienes apache corriento en tu server, el apache está atendiendo en el puerto 80 de ambas interfaces que tienes: la ethernet (eth0) y en localhost (lo). Lógicamente si llega una petición por la IP 1.2.3.4 que está en la eth0, le atiende el apache y de la misma forma, si llega una petición por 127.0.0.1 que es la IP de lo (localhost) igual le atiende, no es cierto? Ok, quién se va a fijar en localhost por favor! Pues mira, que sí es importante.

Bueno pues: te felicito … tienes un sitio web muy accedido, muy popular, y te felicito por esto! Pero el apache que está escuchando en ambas interfaces no te acompaña, su forma de trabajar ya no te funciona bien, tienes problemas.

¿Cómo puedes resolverlo? Una variante es instalar un proxy reverso, que es un servidor de proxy delante de él (del apache). De forma tal que cuando alguien vaya a ver tu sitio web, el server de proxy reverso atienda la petición y si considera necesaria o útil, le pase esta petición al apache.

Así quedaría

A ver te explico: yo configuraré el nginx de forma tal que si llega una petición a la IP publica (externa) mía 1.2.3.4 en el puerto 80, quien le atienda sea el nginx. Y si el nginx lo considera, reenviará esta petición al puerto 80 de la IP 127.0.0.1 que será atendido por el apache. Como ambos, el nginx y el apache, corren en el mismo equipo, pues puedo hacer esto sin inconveniente ninguno.

El procedimiento es el siguiente:

Yo parto del hecho de que ya tenemos el apache funcionando en el servidor, bien, con todas las de la ley… y que lo que quieres es agregar el nginx como un proxy reverso, ok?

Procedo a instalar el repositorio de epel y entonces ejecuto:

yum install nginx

wow.. y ya estará instalado.

Luego edito el archivo de configuración default del nginx (/etc/nginx/conf.d/default.conf) y le pongo solamente estos contenidos:

upstream apache {
server 127.0.0.1:80;
}

server {
listen      1.2.3.4:80;
client_max_body_size    4M;

location / {
proxy_read_timeout 150;
proxy_pass  http://apache;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
}

Bueno, aquí lo más interesante es el parámetro “listen” que le indicará al nginx que escuche en la IP 1.2.3.4 en el puerto 80. Lógicamente deberás modificarle para que escuche en la IP de tu server.

Si te fijas, todo lo que el nginx reciba, lo reenviaré a 127.0.0.1 en el puerto 80. Así que ahora me toca editar el archivo de configuración del apache para decirle que exclusivamente escuche en 127.0.0.1 porque sino ambos servidores se pelearían por el puerto 80 de la ip publica y por el puerto 80 de localhost.. lo que estoy haciendo es a cada uno ponerlo a escuchar en el puerto 80 de dos IPs diferentes (una la IP de eth0 y otra la IP de localhost).

Edito entonces /etc/httpd/conf/httpd.conf y busco una línea que dice:

Listen 80

este línea está descomentada y lo que le indica al apache es que escuche en el puerto 80 de TODAS las IPs que encuentre, yo simplemente le cambio a:

Listen 127.0.0.1:80

Así le estaré indicando que escuche exclusivamente en el puerto 80 de 127.0.0.1

Ahora procedo a reiniciar el apache y arrancar el nginx, en ese orden:

service httpd restart

service nginx start

chkconfig nginx on

Por qué en ese orden? Para primero poner a escuchar al apache en localhost exclusivamente, que libere cualquier otro puerto de cualquier otra IP.. y luego al arrancar el nginx, este comience a escuchar en el puerto 80 de la IP 1.2.3.4

y ya, ahi intenta acceder a tu sitio web y todo se verá normal, tiene que verse normalito.

Lo único que notarás es que la carga bajará drásticamente. Tenemos un servidor cuya carga era continuamente superior a 7.00 y luego de esto, la carga ha bajado a menos de 2. En realidad a un valor cercano a 1 y raramente superior a 1.5.

Seguro hay muchos más parámetros por configurar, pero esto funciona al 100%. Si notas que algo me faltó me avisas para verificarlo.