IRC sobre Túneles IP (el nombre
clave de este proyecto era "WormProof")
En el principio de los tiempos IRC-Hispano se financiaba, fundamentalmente, a través del servicio de "clones": dado que el
IRC limita a 2 conexiones simultaneas por IP, los cibercafés que querían ofrecer conexión al IRC tenían que contratar permiso
para conectar más personas simultaneamente. La idea no era mala e impone un coste solo a quien se beneficiaba económicamente
del IRC.
Pero había algunos problemas: El precio por clon dependía de si eras cliente de un miembro de la red o no (bueno para los
miembros, malo para los cibercafés, que tenían una oferta limitada) y, sobre todo, necesitabas tener una IP fija, lo que resultaba
caro y en algunos casos no era posible. Además, si el cibercafé tenía varios proveedores de conexión, para protegerse de caídas de uno de ellos,
debía contratar clones con cada una de las IPs, dichas IPs debían ser fijas, etc. Por último, si el cibercafé tenía una IP fija,
requerido por el sistema de clones, podía convertirse en un objetivo fácil para ataques de denegación de servicio, un clásico de la
época.
En un momento dado, Argo empezó a ofrecer el servicio de "IRC sobre Túneles IP".
Dicho servicio requería que un cibercafé instalase un programa en su red, que establecía un túnel con Argo y canalizaba el tráfico
IRC (exclusivamente) a través del mismo. En la parte de Argo, las conexiones que llegaban a través del túnel se mandaban al servidor
de IRC usando como remitente una IP de la red 10.0.0.0/8 (red asignada a direcciones privadas). Cada cibercafé tenía su IP virtual
10.0.0.0/8 independiente, y el servidor DNS de Argo le asignaba una IP inversa del tipo "ciberperico.irc.argo.es".
Para el cibercafé este cambio tenía consecuencias interesantes: no se requería ser cliente de un nodo de la red, porque cara a
IRC-Hispano aparecía como cliente de Argo, no se requería tener IP fija (bajando costes y permitiendo tener varios proveedores de
conexión, por redundancia) y la IP real del local permanecía oculta y protegida de ataques. Como detalle original, el aparecer
como "ciberperico.irc.argo.es" permitía la personalización y publicitaba el local.
La versión 1 y 2 del sistema de "IRC sobre Túneles IP" se desplegaron utilizando SSH. La versión de SSH en el servidor de Argo estaba muy
modificada para no permitir lanzar comandos arbitrarios, o abrir túneles de entrada hacia la red del cliente, comprometiendo la
seguridad de Argo. Cuando el cliente abría la conexión SSH, se lanzaba un script que iba mostrando en el terminal el tráfico
de datos del usuario, y el número de sesiones establecidas dentro del túnel.
Argo cobraba al usuario por el tráfico del túnel, y el cliente pagaba a IRC-Hispano por clones de forma normal, como "cliente"
de Argo, que es lo que veía el resto de la red.
Este esquema funcionó bien durante años. No obstante era bastante pesado en el servidor (se usaban varios procesos por cada
túnel, que demandaban bastante CPU y memoria) y había poco control en el funcionamiento del túnel. El empleo de SSH en el cliente
era un problema también, sobre todo en entornos MS Windows, con administradores poco experimentados. El servicio fue creciendo y
llegó un momento en el que el servidor no podía con tantos túneles. La opción evidente era instalar máquinas adicionales, pero decidí
desarrollar una nueva versión del servicio de túneles que solucionase los problemas encontrados con la experiencia previa de
operar el servicio.
Esto fue la versión 3 del sistema de "IRC sobre Túneles IP" de Argo.
Este desarrollo estaba escrito en Python (versión 2.1). El cibercafé recibía un pequeño cliente (menos de 700Kbytes en el caso
de MS Windows, 17 Kbytes en el caso de Linux), con mantenimiento cero, que restauraba el túnel automáticamente en caso de
caída, mostraba al operador del local información de tráfico y conexiones activas, etc. En el servidor se completaban los túneles,
como siempre, y se mandaban al servidor IRC usando la red 10.0.0.0/8 y las inversas "*.irc.argo.es", como siempre. La gran ventaja es
que con el nuevo servicio de túneles, Argo tenía control total sobre ambos extremos y la parte servidor era mucho más ligera. Una
sola máquina llegó a albergar más de 700 túneles simultaneos, sin pestañear.
La facturación era la misma: Argo facturaba por el tráfico del túnel (si no lo usas, no pagas) e IRC-Hispano recibía su parte
por la contratación de clones por parte de un cliente de un miembro (Argo). La migración de clientes al nuevo sistema fue bastante
rápida, ya que la nueva clave de acceso se derivaba (hash MD5) de la vieja clave SSH que el cliente utilizaba para el antiguo
túnel. Enseguida pudimos eliminar el sistema de túneles anterior, que era un dolor de muelas de operar, cargaba la máquina,
nos daba muy poco control y opciones, y siempre me preocupaba que un cliente encontrase algún fallo de seguridad del servidor SSH,
por muy modificado que lo tuviese. El día en que apagué el demonio SSH del túnel dormí mejor.
Argo ofreció esta tecnología a otros nodos de la red IRC-Hispano, pero no hubo interés.
A nivel técnico, cada vez que un usuario se daba de alta en el servicio, Argo necesitaba añadir una IP 10.0.0.0/8 nueva al
servidor de túneles (para utilizarla como IP fuente en las conexiones al IRC) y configurar su DNS inversa como
"ciberperico.irc.argo.es". Manualmente. Pronto pensé que teniendo control también del IRC, podía modificarlo para que el sistema
de túneles y el IRC se comunicasen datos "virtuales" de IPs y DNSs inversos, sin necesidad de que existiesen en realidad. Esa
tecnología fue el IRCD-OoB (Out of Band) descrito en el punto anterior. Así se hizo, simplificando la carga
administrativa en Argo y dándonos un respiro en cuanto a carga de trabajo.
Poco después se me ocurrió lo siguiente: dado que el túnel con el cibercafé nos indica la IP de origen real de cada conexión
canalizada (típicamente una IP del local del tipo 192.168.x.x), podíamos identificar cada mesa en el servidor. Si en vez de poner
las inversas "ciberperico.irc.argo.es" poníamos "puestoXXX.ciberperico.irc.argo.es" y asignábamos a cada puesto una IP 10.0.0.0/8
separada, no necesitaríamos contratar clones en IRC-Hispano (porque cada mesa del local se ve como una conexión independiente)
y el control de IRC-Hispano y de los locales mejoraría (se podría "banear" una mesa concreta, en vez de todo el local). Argo podría
embolsarse dinero adicional en concepto de clones (que ahora controlaría Argo, no IRC-Hispano). Pero IRC-Hispano dejaría de facturar
clones, que era su principal fuente de financiación.
Planteé la cuestión en una reunión de IRC-Hispano, presentando la idea y ofreciendo compartir la explotación. Una de las
premisas de IRC-Hispano era permitir que los miembros de la red se "buscasen la vida", y Argo recibió permiso para desarrollar y
lanzar el servicio, y nadie más se interesó en explotarlo. Creo sinceramente que fue un error de cálculo por parte de IRC-Hispano,
que o bien dudó de mi capacidad para desarrollar el servicio o pensaron que Argo era un proveedor minúsculo e irrelevante y
no lo consideraron una amenaza. El hecho es que el servicio se desarrolló en días y tuvo un gran éxito. Sospecho que tuvo peso
también en la decisión de expulsar a Argo de IRC-Hispano en Marzo de 2004, aunque el motivo declarado fue otro. Argo proporcionó
el código a LleidaNet (otro miembro de IRC-Hispano y presidente de la asociación en aquel momento), pero no me consta que lo llegase
a usar. Puede verse este hecho en el sistema de control de versiones.
Ésta fue la cuarta generación del servicio de "IRC sobre Túneles IP" de Argo.
La documentación sigue online y recomiendo echarle un vistazo, sobre todo a
la base de datos de conocimientos, por su valor histórico.
He liberado la versión 3 y la versión 4 del sistema de "IRC sobre Túneles IP" de Argo.
En esta ocasión el repositorio está limpito y la conversión desde el Subversion original fue trivial. Hay pocos comentarios
en los "commits", pero creo que el código es simple de entender y se puede reutilizar con facilidad. Está escrito para Python 2.1.
Su arquitectura de procesos se explica un poco en la sección sobre IRCD-OoB.
El código se libera con licencia
GNU Affero General Public License 3 o superior. Espero que sea útil a alguien.
Eso sí, recordad que si lo usáis deberéis publicar vuestros cambios, como manda la licencia AGPL3. Aunque no entreguéis el ejecutable
a nadie :-)
Olimpo
La personalidad de una red de IRC, además de por su comunidad de usuarios, viene marcada por los servicios que despliega,
su filosofía, y su interacción con los usuarios.
Mi interés en IRC-Hispano, cuando se fundó, era desarrollar tecnología y nuevos servicios nunca vistos antes. Tenía una visión:
una red de chat en la que se pudieran llevar a cabo innovaciones técnicas como la base de datos distribuida,
pero enseguida me tropecé con reticencias, inmovilismo e intereses poco claros. A los pocos meses
y tras unas cuantas decepciones, fundé una segunda red de IRC, ESNET, en la que
fuera posible desarrollar esas ideas.
Quiero hacer una mención especial para Adrián García, por su tiempo, apoyo y esfuerzo en la creación de ESNET y en muchas sesiones de
"brainstorming".
Los progresos fueron rápidos y espectaculares.
Tal vez por ese éxito, o simplemente por la elección de una nueva Junta Directiva en IRC-Hispano, los vientos cambiaron. Las
innovaciones eran mejor recibidas, así que durante años ESNET fue el banco de pruebas, desarrollo y experimentación, e IRC-Hispano
la red "grande" donde las cosas se desplegaban de forma masiva.
Este periodo, y todo el trabajo realizado durante el mismo, está bastante bien documentado en mi web:
ESNET, y Olimpo. Recomiendo echar un ojo a todos esos artículos. Son interesantes.
Faltan por documentar dos módulos:
- AIMC:
AIMC hacía una encuesta anual de usuarios de Internet. IRC-Hispano era (¿es?) una plataforma
de captación de internautas, y este bot se encargaba de mandar "publicidad". Toma muchas precauciones para molestar
lo menos posible a los usuarios, aunque intenta ser efectivo.
- lazo-azul:
Este bot fue una reacción al ataque terrorista del 11 de Marzo de 2004. Permitía dejar una frase
sobre el atentado. No recuerdo qué se hizo luego con esas firmas, si se colgaron online o no.
El código fuente que he liberado de Olimpo consta de
dos ramas. La
rama "default" contiene la última versión del código, y es la base
que debería utilizarse para continuar el desarrollo. La rama "v1_66"
fue una variante pagada por IRC-Hispano y tiene un interés meramente histórico. No contiene nada que no esté en la rama principal.
El código de Olimpo está tal y como lo dejé en 2004. Veréis que escribí los primeros pasos de
una librería que permitiría integrar
bots ajenos a Olimpo para funcionar en IRC-Hispano
de forma oficial. Sería interesante que alguien siguiese esos pasos.
Dejar el código listo para ser publicado no ha sido trivial.
El código se libera con licencia
GNU Affero General Public License 3 o superior. Espero que sea útil a alguien.
Eso sí, recordad que si lo usáis deberéis publicar vuestros cambios, como manda la licencia AGPL3. Aunque no entreguéis el ejecutable
a nadie :-)