
IRC, Internet Relay Chat, es un protocolo de comunicación en tiempo real que permite la interacción entre usuarios a través de canales (o grupos). Aunque no lo parezca, fue creado hace bastante tiempo, en 1988. Sin embargo, ¡siendo utilizado! Especialmente por desarrolladores y comunidades de código abierto. Entre sus virtudes se encuentra su anonimato, protocolo abierto, simplicidad tecnológica y su bajo consumo de recursos haciendo apto en casi cualquier equipo o sistema operativo por muy humilde que sea. La gran mayoría de sus usuarios, lo mantienen siempre corriendo de fondo. A pesar del éxito de otras plataformas como Teams o Slack que han superado infinitamente en funcionalidades, posiblemente IRC les sobreviva a todas ellas. Cuando una tecnología es simple, sólida y funcional, aunque no sea tan completa y bonita como otras más modernas, es difícil que se deje de usar.
Y dicho esto, desde el 2016 se esta trabajando en un nuevo estándar denominado IRCv3 que busca mejorar la experiencia de usuario, aportar un historial y una mejor seguridad. A pesar de esto, muchos servidores y clientes, siguen utilizando el protocolo original. Por ello, se crea la necesidad de usar alguna herramienta externa, un software que actúa como intermediario permitiendo mantener el historial de mensajes y sincronizar múltiples clientes. O en otras palabras, un IRC Bouncer.
¿Qué es un IRC Bouncer?
Un IRC Bouncer es un software que actúa como intermediario entre tu cliente IRC y el servidor IRC al cual te quieres conectar. Permite mantener el historial de mensajes y sincronizar múltiples clientes. Esto significa que puedes conectarte a un servidor IRC desde diferentes dispositivos y mantener la misma experiencia de usuario en todos ellos. Similar a un cliente de mensajería instantánea moderno como WhatsApp o Telegram.
¿Qué es Soju?
Soju es un IRC Bouncer moderno, escrito en Go, que incorpora varias características interesantes de IRCv3. Además consume menos que un mechero. Desde mi punto de vista, es un indispensable de cualquier servidor casero o privado.
Configurar Docker
Para levantar Soju con Docker, primero debes crear un archivo .env
en la raíz del proyecto. Este archivo contendrá la variable de entorno RESTART_POLICY
, que define la política de reinicio del contenedor. Puedes establecerla en always
, unless-stopped
, o no
. Por ejemplo:
RESTART_POLICY=always
Ahora vamos a definir el archivo Dockerfile
que se encargará de construir la imagen de Soju. Crea un archivo llamado Dockerfile
en la raíz del proyecto y añade el siguiente contenido:
FROM debian:trixie-slim
# set work directory
WORKDIR /app
# set time
RUN ln -fs /usr/share/zoneinfo/Europe/Madrid /etc/localtime
RUN dpkg-reconfigure -f noninteractive tzdata
# install software
RUN apt update && apt install -y \
build-essential \
ca-certificates \
sqlite3 \
soju \
&& apt clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /run/soju
ENTRYPOINT ["soju"]
Luego, crea un archivo compose.yml
en la raíz del proyecto, junto con el archivo .env
y Dockerfile
. Este archivo contendrá la configuración del contenedor de Soju. Aquí tienes un ejemplo básico:
services:
soju:
restart: ${RESTART_POLICY:-no}
container_name: soju
build:
context: .
dockerfile: Dockerfile
env_file: .env
ports:
- 6697:6697
volumes:
- ./soju/:/var/lib/soju/
- ./config.ini:/etc/soju/config:ro
Por último creamos el archivo de configuración config.ini
. Lo usará Soju para saber como debe funcionar.
hostname localhost
db sqlite3 /var/lib/soju/database.sqlite
message-store fs /var/lib/soju/logs/
tls /var/lib/soju/cert.pem /var/lib/soju/key.pem
listen unix+admin://
listen ircs://0.0.0.0:6697
http-origin localhost
Levantando el contenedor
Para levantar el contenedor, ejecuta el siguiente comando en la raíz del proyecto:
docker compose up -d
Ahora ya podemos conectarnos a Soju. Pero antes de eso, debemos crear un usuario.
Crear un usuario
Ejecuta el siguiente comando para crear un usuario en Soju. No confundir con el usuario del servidor IRC al que deseas conectarte.
docker compose exec -it soju sojuctl user create -admin -username tu-username-soju -password "tu-contraseña-soju"
Conectar con Soju
Ahora puedes conectarte a Soju utilizando tu cliente IRC favorito. La dirección del servidor es localhost
y el puerto es 6697
. Asegúrate de usar SSL/TLS al conectarte.
Un ejemplo de cómo conectarte a Soju utilizando el cliente irssi
:
irssi -c localhost -p 6697 -ssl -n tu-username
Configurar el servidor IRC
Cuando estés conectado con Soju, ya podrás administrar la conexiones con los servidores IRC.
Supongamos que quieres conectarte a irc.libera.chat
. Puedes hacerlo ejecutando el siguiente comando en la consola de Soju:
/msg BouncerServ help
/net create -addr ircs://irc.libera.chat -name libera -username username-en-libera -pass contraseña-en-libera -realname mi-nombre-real
/certfp generate -network libera
¡Ya esta todo listo! Puedes desconectarte de Soju, ahora vamos a conectarnos pero usándolo como intermediario.
Conectar con el servidor IRC
Ahora puedes conectarte al servidor IRC utilizando Soju como intermediario.
- host:
localhost
- account:
tu-username-soju/irc.libera.chat
- password:
tu-contraseña-soju
Y si lo dispone tu cliente:
- Auto Identity:
- username:
username-en-libera
- password:
contraseña-en-libera
- username:
Un ejemplo utilizando el cliente irssi
:
irssi -c localhost -p 6697 -ssl -n tu-username-soju/irc.libera.chat
¡Ya estaremos conectados!
Si encuentras algún error, no dudes en enviarme un mensaje directo por mi cuenta de ActivityPub/Mastodon para subsanarlo.
Espero que a partir de ahora puedas disfrutar de IRC tanto como yo.
{{ comments.length }} comentarios