Servicios
Servicios que tengo corriendo en el host, sin contenedores de por medio. Lo clásico, pero bien montado.
- Almacenamiento
- Backups
- Conectividad
- Caddy: Gestión e instalación sencilla de dominios
- Hysteria2: proxy QUIC de alto rendimiento contra bloqueos y restricciones de red
- PiVPN ( Wireguard )
- WGDashboard, interfaz web sencilla y funcional para gestionar WireGuard
- Utilidades
Almacenamiento
rClone: Sincronización y gestión de almacenamiento en la nube
Introducción
rClone es una herramienta extremadamente versátil que te permite sincronizar, copiar y gestionar datos entre tu servidor y servicios de almacenamiento en la nube. Es ideal para realizar copias de seguridad seguras y acceder a tus archivos desde diferentes ubicaciones.
Características principales
- Compatible con una amplia gama de servicios en la nube como Google Drive, OneDrive, Amazon S3, Dropbox y más.
- Soporta sincronización, transferencia y montajes locales de datos remotos.
- Configuración flexible y automatizable mediante
systemdo scripts personalizados.
Instalación
Puedes instalar Rclone utilizando alguno de los siguientes métodos:
Instalación desde el repositorio del sistema operativo (puede no ser la versión más reciente)
sudo apt install rclone
Instalación de la versión más reciente usando el script oficial
curl https://rclone.org/install.sh | sudo bash
Configuración inicial
-
Ejecuta el asistente de configuración interactiva para añadir un "remote" (servicio de almacenamiento):
rclone config -
Sigue las instrucciones para configurar un servicio en la nube, como Google Drive, OneDrive, Amazon S3, Dropbox, etc.
-
Una vez configurado, puedes listar los "remotes" disponibles con:
rclone listremotes
Ejemplo de configuración con Google Drive
- Tipo de almacenamiento:
Google Drive. - Autenticación: Rclone guiará el proceso para generar y validar las credenciales necesarias.
Comandos útiles
Listar archivos y carpetas en un remote
rclone ls remote:/ruta/remota
Sincronizar un directorio local con un remote
rclone sync /ruta/local remote:/ruta/remota --progress
Copiar archivos sin eliminar diferencias
rclone copy /ruta/local remote:/ruta/remota --progress
Montar un remote como un sistema de archivos local (requiere fusermount)
rclone mount remote:/ruta/remota /ruta/de/montaje
Integración con systemd
Puedes usar systemd para montar servicios de almacenamiento en la nube de manera automática al iniciar el sistema. Esto es útil si necesitas que los directorios de tu nube estén siempre disponibles como si fueran unidades locales.
Ejemplo 1: Montar Google Drive
Archivo: /etc/systemd/system/rclone-mount-drive.service
[Unit]
Description=Rclone GDrive (writes)
After=network-online.target
Wants=network-online.target
RequiresMountsFor=/mnt/Drive
[Service]
Type=notify
User=tuusuario
Group=tugrupo
ExecStartPre=/usr/bin/mkdir -p /mnt/Drive
ExecStart=/usr/bin/rclone mount Drive: /mnt/Drive \
--vfs-cache-mode=writes \
--cache-dir=/var/cache/rclone-drive \
--dir-cache-time=12h \
--poll-interval=1m \
--vfs-cache-max-size=10G \
--vfs-cache-max-age=24h \
--buffer-size=32M \
--vfs-read-chunk-size=32M \
--vfs-read-chunk-size-limit=256M \
--drive-chunk-size=128M \
--drive-pacer-min-sleep=10ms \
--drive-pacer-burst=200 \
--uid=1000 --gid=1000 --umask=022 \
--log-level=INFO
ExecStop=/usr/bin/fusermount3 -uz /mnt/Drive
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Ejemplo 2: Montar Mega
Archivo: /etc/systemd/system/rclone-mega.service
[Unit]
Description=Montar Mega con rclone
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=tuusuario
Group=tugrupo
ExecStart=/usr/bin/rclone mount Mega: /mnt/Mega \
--config /home/usuario/.config/rclone/rclone.conf \
--vfs-cache-mode full \
--allow-other \
--allow-non-empty \
--transfers 4 \
--checkers 8 \
--poll-interval 30s \
--dir-cache-time 2m \
--vfs-cache-poll-interval 2m \
--vfs-write-back 2m
ExecStop=/usr/bin/fusermount -u /mnt/Mega
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Activar y gestionar servicios
Una vez creados los archivos de servicio, puedes habilitarlos y gestionarlos con los siguientes comandos:
-
Recargar la configuración de systemd:
sudo systemctl daemon-reload -
Habilitar el servicio para inicio automático:
sudo systemctl enable rclone-mount-drive.service sudo systemctl enable rclone-mega.service -
Iniciar el servicio manualmente:
sudo systemctl start rclone-mount-drive.service sudo systemctl start rclone-mega.service -
Verificar el estado del servicio:
sudo systemctl status rclone-mount-drive.service sudo systemctl status rclone-mega.service
Notas finales
Integrar Rclone con systemd te permite gestionar de forma eficiente los servicios de almacenamiento en la nube, asegurando que estén siempre disponibles como unidades locales. Esto resulta ideal para entornos donde se trabaja de manera continua con datos en la nube.
Si encuentras problemas, puedes revisar los logs de los servicios con:
sudo journalctl -u rclone-mount-drive.service
sudo journalctl -u rclone-mega.service
Referencias
- Documentación oficial de rClone
- Repositorio oficial de rClone en GitHub
- Habilitar interfaz web customizada en rClone
Backups
Kopia: Backups de manera eficiente y sencilla
Introducción
Este artículo documenta el despliegue de Kopia como sistema de backups local con interfaz web, autenticación básica y ejecución persistente mediante systemd. La integración se realiza directamente a nivel de sistema, sin contenedores, y está pensada para entornos donde se requiere control directo del binario, del repositorio y del ciclo de vida del servicio.
Se separan claramente tres fases: instalación, creación del repositorio y arranque del servidor, ya que Kopia no genera configuración persistente hasta que alguno de estos pasos se ejecuta explícitamente.
Instalación en Ubuntu / Debian
Kopia no suele estar disponible en los repositorios oficiales con versiones actualizadas. Se utiliza el repositorio APT oficial del proyecto.
curl -s https://kopia.io/signing-key | sudo gpg --dearmor -o /usr/share/keyrings/kopia-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kopia-keyring.gpg] http://packages.kopia.io/apt/ stable main" | sudo tee /etc/apt/sources.list.d/kopia.list
sudo apt update
sudo apt install kopia
El binario queda disponible en:
/usr/bin/kopia
Conceptos previos importantes
Kopia distingue entre:
- Repositorio: destino físico donde se almacenan los backups.
- Archivo de configuración: generado automáticamente tras crear un repositorio o arrancar el servidor por primera vez.
Este archivo no existe inicialmente y no se crea a mano. Se genera como efecto colateral del uso del binario.
Crear el repositorio
Ejemplo con repositorio local tipo filesystem:
kopia repository create filesystem --path /mnt/Backups/Kopia
Este paso inicializa la estructura interna del repositorio, pero no levanta ningún servicio web.
Arranque inicial del servidor web (modo configuración)
Una vez creado el repositorio, se arranca el servidor web manualmente para:
- generar el archivo de configuración persistente
- definir credenciales de acceso
- validar funcionamiento antes de systemd
kopia server start \
--address=http://192.168.X.X:51515 \
--server-username=usuario \
--server-password=contraseña \
--insecure
Durante este arranque se genera el archivo de configuración, normalmente en:
/root/.config/kopia/repository.config
Este archivo será reutilizado posteriormente por el servicio systemd.
Configuración como servicio systemd
Una vez validado el arranque manual, Kopia se deja como servicio persistente.
Archivo /etc/systemd/system/kopia.service
[Unit]
Description=Kopia Server
After=network.target
[Service]
ExecStart=/usr/bin/kopia server start \
--config-file=/root/.config/kopia/repository.config \
--address=http://192.168.X.X:51515 \
--server-username=kopia-user \
--server-password=kopia-password \
--insecure
Restart=on-failure
RestartSec=10
User=root
Environment="KOPIA_LOG_LEVEL=info"
EnvironmentFile=-/etc/default/kopia
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Notas relevantes:
- El servicio se ejecuta como
rootpara evitar problemas de permisos en accesos y restauraciones. - El archivo
repository.configes generado automáticamente en fases previas. - Las credenciales pueden pasarse por
ExecStarto externalizarse víaEnvironmentFile. - El flag
--insecurees válido en entornos de red interna o protegidos por capas externas.
Activación y validación
sudo systemctl daemon-reload
sudo systemctl enable kopia
sudo systemctl start kopia
Comprobación:
systemctl status kopia
journalctl -u kopia
Estado final
Kopia queda operativo como servicio persistente, con:
- repositorio inicializado
- configuración generada y reutilizada
- interfaz web accesible en red interna
- autenticación básica activa
La seguridad adicional (TLS, reverse proxy, autenticación externa) se gestiona fuera de Kopia y no forma parte del núcleo del servicio.
Resumen breve
- Kopia no genera configuración hasta que se usa.
- El repositorio y el servidor son conceptos independientes.
- systemd reutiliza la configuración generada previamente.
- La unidad mostrada refleja un uso real y estable.
Referencias
Conectividad
Caddy: Gestión e instalación sencilla de dominios
Introducción
Este artículo documenta el despliegue y configuración de Caddy como reverse proxy principal dentro de la infraestructura. Se utiliza como punto de entrada HTTPS único para servicios internos, encargándose de la terminación TLS, la gestión automática de certificados, el control de acceso mediante autenticación externa y la generación de logs útiles para auditoría.
El enfoque descrito prioriza simplicidad operativa, reducción de errores humanos y una separación clara entre la capa de exposición pública y las aplicaciones internas.
¿Qué es Caddy y por qué se utiliza?
Caddy es un servidor web y reverse proxy moderno, escrito en Go, cuyo diseño gira en torno a HTTPS como comportamiento por defecto. A diferencia de otros servidores tradicionales, la gestión de TLS no es un componente añadido, sino una parte central de su arquitectura.
Sus principales características en este contexto son:
- Gestión automática de certificados TLS mediante ACME.
- Renovación de certificados sin intervención manual.
- Configuración declarativa simple y predecible mediante Caddyfile.
- Recargas en caliente sin interrupción de conexiones.
- Integración nativa con sistemas de autenticación externa mediante
forward_auth. - Soporte para validación por DNS challenge, ideal en entornos sin puertos públicos accesibles.
En la práctica, Caddy reduce la complejidad operativa habitual asociada a HTTPS y actúa como frontera clara entre Internet y los servicios internos del stack.
Instalación básica en Debian / Ubuntu
Se recomienda instalar Caddy desde su repositorio oficial para mantener versiones estables y actualizadas:
sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -fsSL https://dl.caddyserver.com/keys/caddy-stable.asc | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.caddyserver.com/stable/ debian/amd64 stable" | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Para otros sistemas o métodos de instalación, se debe consultar la documentación oficial de Caddy.
Puertos y red
Para un funcionamiento estándar con HTTPS automático:
- Puerto 80: utilizado para validaciones ACME HTTP-01 y redirecciones.
- Puerto 443: tráfico HTTPS.
Es necesario redirigir ambos puertos al servidor y permitirlos en el firewall:
sudo ufw allow 80
sudo ufw allow 443
En configuraciones basadas en DNS challenge, el puerto 80 no es estrictamente necesario, pero suele mantenerse por compatibilidad y simplicidad.
Ejemplo básico de Caddyfile
wiki.midominio.com {
reverse_proxy http://192.168.1.10:22300
}
calibre.midominio.com {
reverse_proxy http://192.168.1.10:20980
}
Aspectos clave:
- Un bloque por dominio.
reverse_proxyredirige el tráfico al servicio interno.- Los certificados TLS se solicitan y renuevan automáticamente.
- HTTP se redirige a HTTPS sin configuración adicional.
Configuración avanzada con Authentik y Cloudflare
Bloque global
{
acme_dns cloudflare REPLACE_WITH_YOUR_API_TOKEN
email admin@midominio.com
}
Este bloque define opciones globales:
- Uso de DNS challenge mediante Cloudflare para la emisión de certificados.
- El token debe tener permisos mínimos para modificar registros DNS.
- El correo se utiliza para notificaciones del proveedor ACME.
Bloque reutilizable de Authentik
(authentik) {
reverse_proxy /outpost.goauthentik.io/* http://192.168.1.10:15500
forward_auth http://192.168.1.10:15500 {
uri /outpost.goauthentik.io/auth/caddy
copy_headers X-Authentik-Username X-Authentik-Groups X-Authentik-Email X-Authentik-Name X-Authentik-Uid
}
}
Este bloque define la integración con Authentik:
- El outpost se expone internamente a través de Caddy.
forward_authvalida cada petición antes de llegar al servicio real.- Los headers copiados permiten identificar usuarios y grupos aguas abajo.
El uso de import permite reutilizar esta lógica en múltiples servicios.
Servicios protegidos con logging personalizado
wiki.midominio.com {
import authentik
reverse_proxy http://192.168.1.10:8080
log {
output file /var/log/caddy/wiki-access.log
format transform "{request>headers>X-Forwarded-For>[0]:request>remote_ip} - {user_id} [{ts}] \"{request>method} {request>uri} {request>proto}\" {status} {size}" {
time_format "02/Jan/2006:15:04:05 -0700"
}
}
}
Este patrón:
- Aplica autenticación antes de acceder al servicio.
- Genera logs con formato estilo nginx.
- Prioriza la IP real del cliente.
- Incluye información del usuario autenticado.
El mismo esquema puede repetirse para otros dominios.
Aplicar cambios
Antes de recargar la configuración:
caddy validate --config /etc/caddy/Caddyfile
Si no hay errores:
sudo systemctl reload caddy
La recarga es en caliente y no interrumpe conexiones activas.
Personalización y binarios propios
Para utilizar módulos externos como DNS Cloudflare, puede ser necesario compilar un binario personalizado de Caddy:
Integración con Authentik:
Notas personales
Si Caddy se expone a Internet, es recomendable colocar siempre una capa de autenticación delante de los servicios. La combinación de HTTPS automático, control de acceso centralizado y logging estructurado aporta una base sólida y coherente para exponer aplicaciones de forma segura.
Referencias
Hysteria2: proxy QUIC de alto rendimiento contra bloqueos y restricciones de red
Instalación y configuración inicial
Hysteria2, explicado en cristiano: es un protocolo de transporte basado en QUIC que se disfraza muy bien de tráfico legítimo. Su gracia está en que permite saltarse bloqueos, censura y limitaciones de red, porque cifra y mezcla el tráfico de forma que parece otra cosa. A diferencia de un simple proxy, está pensado para rendir en conexiones jodidas (alto lag, pérdidas de paquetes) y para que sea más difícil de detectar. Además, funciona como una VPN de alto rendimiento: cifra todo el tráfico, lo camufla y mantiene velocidades muy altas incluso en redes con restricciones fuertes. Con Blitz, básicamente automatizas su despliegue y gestión, y con Caddy encima lo vistes con certificados TLS de verdad para que no cante a “certificado cutre autofirmado”.
Requisitos previos
- Sistema: Debian 11+ / Ubuntu 22+
- Arquitectura: x86_64 o ARM64
- RAM: 1 GB mínimo
- Almacenamiento: 10 GB libres
- Red: IPv4/IPv6 compatible
- Acceso: privilegios root
- Dominio: necesario para el uso de Hysteria2 y compatibilidad con clientes como SingBox
- Router: redirección del puerto elegido hacia la IP local del servidor (recomendable usar IP fija)
Instalación base con Blitz
Antes de instalar, actualizar paquetes:
apt update && apt upgrade -y
Ejecutar el instalador:
bash <(curl https://raw.githubusercontent.com/ReturnFI/Blitz/main/install.sh)
Al finalizar, se accede al menú principal.
-
Pulsar 1 para entrar en el menú de Hysteria2.
-
Seleccionar Install and Configure Hysteria2.
-
Introducir un SNI (o pulsar Enter para usar el predeterminado). Aquí lo correcto es poner el dominio propio que apunte al servidor, ya que el SNI es un nombre de host, no una IP. Si se usa Cloudflare, debe desactivarse para que apunte directamente a la IP real.
- Ejemplo válido:
bing.com(sin https:// ni barras). También se puede poner directamente la URL o la IP, siempre que el dominio apunte a la IP del servidor.
- Ejemplo válido:
-
Elegir un puerto de activación (ejemplo: 45443).
Nota: se recomienda el puerto 443 para mayor ocultación, pero si ya está ocupado (por ejemplo, por Caddy), se puede utilizar otro puerto alternativo. Esto reduce un poco la apariencia de tráfico legítimo, aunque sigue siendo funcional. Algunos clientes permiten usar directamente la IP del servidor como SNI, pero esto no es estándar y puede dar problemas con TLS. Siempre se recomienda usar un dominio con certificado válido (por ejemplo, gestionado por Caddy con Let’s Encrypt).
Uso de certificados con Caddy
Para evitar certificados autofirmados, se puede usar Caddy como emisor y aprovechar los certificados de Let’s Encrypt.
Configuración en Caddyfile:
- Caddyfile en Gitea: Caddyfile para Hysteria2
Ruta donde Caddy genera certificados (en baremetal):
/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/
Nota: el detalle de permisos y acceso a esos certificados se documenta en un artículo aparte: Hysteria2 + Caddy: acceso seguro a certificados (ACL + systemd).
Configuración de Hysteria
El servicio corre bajo hysteria-server.service. Su configuración principal se encuentra en /etc/hysteria/config.json.
Configuración base orientativa disponible en Gitea: config_default.json. Esta configuración es la que genera inicialmente el instalador Blitz, sirve como referencia.
- Config modificada (certs Caddy, insecure=false, DNS locales, en mi caso, en el tuyo, puedes elegir los que desees, además, los clientes deben estar configurados para usar DNS remoto): config_modified.json. Esta es la configuración que se recomienda usar, ya que incorpora los ajustes preparados previamente (con los cambios pertinentes, no es para copiar y pegar tal cual, además, debe llamarse config.json).
Flujo de edición rápida
- Editar
/etc/hysteria/config.jsony apuntartls.certytls.keya los de Caddy. - Revisar permisos y traversal del path como en el artículo dedicado.
- Reiniciar servicio y revisar
sudo systemctl status hysteria-server.servicepara localizar el fallo exacto. - Probar conectividad UDP al puerto elegido desde el cliente (por ejemplo con Hiddify, desde Android).
Errores típicos
permission deniedal leer.crt/.key→ revisar artículo de permisos (ACL + systemd).address already in use→ puerto en uso; cambiarlisteno liberar el socket.tls: handshake failure→ SNI del cliente no coincide, o cert/clave no alinean.no such deviceenbindDevice→ interfaz mal escrita; listar conip link.
Enlaces de interés
- Hysteria2 + Caddy: acceso seguro a certificados (ACL + systemd)
- Documentación de Blitz
- Repositorio Blitz en GitHub
- Hiddify App (Android) → cliente multiplataforma (Sing-box, X-ray, TUIC, Hysteria, Reality, Trojan, SSH, etc.). Desde el panel de Blitz se puede generar un QR para escanearlo directamente con la app y validar el funcionamiento.
Notas
- Este artículo ahora solo mantiene lo básico de instalación y configuración. Los detalles de permisos se han movido a su propio artículo para mantener las cosas ordenadas.
PiVPN ( Wireguard )
WireGuard es un protocolo de VPN moderno, rápido y seguro, mientras que PiVPN es una herramienta que facilita su instalación y configuración. En este caso, evitamos el asistente automático y usamos una configuración manual para tener más control.
Requisitos previos
- IP fija pública (o DynDNS bien configurado).
- Puerto UDP (por defecto 51820) abierto y redirigido al servidor.
- Sistema basado en Linux con acceso root.
1. Clonar el repositorio de PiVPN
git clone https://github.com/pivpn/pivpn.git
cd pivpn
2. Preparar la configuración desatendida
cd examples
nano unattended_wireguard_example.conf
Ejemplo de configuración adaptada:
IPv4dev=enp4s0
IPv6dev=enp4s0
install_user=usuario
VPN=wireguard
pivpnNET=10.10.0.0
subnetClass=24
pivpnforceipv6route=1
pivpnforceipv6=0
pivpnenableipv6=0
pivpnNETv6=fd11:5ee:bad:c0de::
subnetClassv6=64
ALLOWED_IPS="0.0.0.0/0, ::/0"
pivpnMTU=1472
pivpnPORT=51820
pivpnDNS1=8.8.8.8
pivpnPERSISTENTKEEPALIVE=25
UNATTUPG=1
3. Ejecutar el instalador con esta configuración
sudo chmod +x ./auto_install/install.sh
sudo bash ./auto_install/install.sh --unattended ./examples/unattended_wireguard_example.conf
4. Personalización opcional (clientes sin root)
Editar el archivo para generar perfiles directamente en /home/usuario/Wireguard:
sudo nano /opt/pivpn/wireguard/makeCONF.sh
Ajustar la variable de destino según sea necesario.
5. Comandos útiles de PiVPN
pivpn -a # Añadir nuevo cliente
pivpn -c # Ver clientes conectados
pivpn -l # Ver todos los clientes
pivpn -qr <cliente> # QR para importar desde móvil
pivpn -r <cliente> # Eliminar cliente
pivpn -off / -on <cliente> # Desactivar / activar
pivpn -d # Modo depuración
pivpn -up # Actualizar PiVPN
pivpn -bk # Backup de la configuración
Conclusión
Instalación manual, limpia y personalizable de WireGuard con PiVPN. Esta configuración permite adaptar rutas, IPs, DNS y estructura de archivos sin depender de automatismos cerrados. Ideal para uso doméstico o autoalojamiento avanzado.
WGDashboard, interfaz web sencilla y funcional para gestionar WireGuard
Introducción
WGDashboard es una interfaz web sencilla y funcional para gestionar WireGuard, permitiendo visualizar conexiones, añadir peers y monitorear la actividad en tiempo real. En este artículo, veremos cómo instalarlo en un servidor con Ubuntu 22.04 LTS o 24.02 LTS sin usar Docker, optimizando el rendimiento de nuestra VPN.
Requisitos previos
Antes de comenzar, asegúrate de que tu sistema cuenta con:
- Ubuntu 22.04 LTS o 24.02 LTS
- WireGuard previamente instalado y configurado
- Privilegios de superusuario (
sudo) - Una IP fija o servicio DDNS para IPs que no sean fijas.
Si aún no tienes WireGuard instalado, puedes hacerlo con:
sudo apt install wireguard -y
Instalación paso a paso
Ejecuta el siguiente comando para actualizar paquetes e instalar las herramientas necesarias:
sudo apt-get update -y && \
sudo apt install wireguard-tools net-tools --no-install-recommends -y
wireguard-tools: Proporciona utilidades esenciales para gestionar WireGuard.net-tools: Incluye herramientas comoifconfigynetstat, útiles para depuración y diagnóstico de red.--no-install-recommends: Evita instalar paquetes adicionales innecesarios.
Clonamos el repositorio oficial de WGDashboard:
git clone https://github.com/donaldzou/WGDashboard.git
Accedemos al directorio de instalación:
cd ./WGDashboard/src
Damos permisos de ejecución al script de instalación:
chmod +x ./wgd.sh
Ejecutamos el instalador de WGDashboard:
./wgd.sh install
Esto descargará y configurará automáticamente los servicios necesarios para que WGDashboard funcione correctamente.
Habilitar el reenvío de paquetes IPv4
Para que WireGuard funcione correctamente, debemos habilitar el reenvío de paquetes IP:
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Aplicamos los cambios:
sudo sysctl -p /etc/sysctl.conf
Configuración de WGDashboard
Para acceder a WGDashboard, asegúrate de que el puerto en el que está configurado (por defecto 10086) está abierto y redirigido correctamente en tu router hacia la IP del servidor donde está instalado WireGuard.
http://<IP_DEL_SERVIDOR>:10086
Si no conoces la IP de tu servidor, puedes obtenerla con:
ip a
Configuración de los peers
Dentro de WGDashboard, en la sección Peer Default Settings, se configuran los valores por defecto para los nuevos clientes de WireGuard:
- DNS: Puedes usar cualquiera. Si tienes Pi-hole o AdGuard Home, pon la IP de tu servidor DNS.
- Endpoint Allowed IPs:
0.0.0.0/0 - MTU:
1420 - Persistent Keepalive:
25(puede depender de si estás detrás de un NAT; en mi caso, lo tengo en60). - Peer Remote Endpoint:
TuDirecciónIP:PuertoUsado(sustituye por tu IP pública y el puerto que redirigiste para WireGuard).
Configuración de la interfaz wg0
Para crear una interfaz de WireGuard (wg0), usa los siguientes ajustes:
- Configuration Name:
wg0(puedes cambiarlo, pero es mejor mantenerlo simple). - Private Key & Public Key: Se generan automáticamente.
- Listen Port: El puerto que tienes redireccionado en el router para tu servidor WireGuard (por defecto,
51820). - IP Address/CIDR:
100.10.0.1/24(puedes modificarlo según tu red).
Opciones avanzadas: Reglas iptables
Para que WGDashboard funcione correctamente, hay cuatro apartados adicionales en la configuración de WireGuard. Asegúrate de aplicar estos cambios:
- PreUp: Dejar en blanco.
- PreDown: Dejar en blanco.
- PostUp:
En caso de no funcionar, prueba con:iptables -w -t nat -A POSTROUTING -o enp4s0 -j MASQUERADEiptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE - PostDown:
En caso de no funcionar, prueba con:iptables -w -t nat -D POSTROUTING -o enp4s0 -j MASQUERADEiptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp4s0 -j MASQUERADE;
Donde enp4s0 es la interfaz de red principal del servidor. Cámbiala si es diferente en tu caso.
Si no tienes conectividad en LAN, añade esta regla adicional:
sudo iptables -t nat -A POSTROUTING -s 100.10.0.0/24 -d 192.168.1.0/24 -j MASQUERADE
Guarda los cambios de forma permanente:
sudo netfilter-persistent save && sudo netfilter-persistent reload
Crear un servicio systemd para WGDashboard
Para que WGDashboard se inicie automáticamente al arrancar el sistema, crearemos un servicio:
Accede a la carpeta src de WGDashboard:
cd WGDashboard/src
Obtén la ruta absoluta del directorio:
pwd
Edita el archivo wg-dashboard.service:
nano wg-dashboard.service
Sustituye <absolute_path_of_WGDashboard_src> por la ruta obtenida. Luego copia el servicio a systemd:
sudo cp wg-dashboard.service /etc/systemd/system/wg-dashboard.service
Habilita y activa el servicio:
sudo chmod 664 /etc/systemd/system/wg-dashboard.service
sudo systemctl daemon-reload
sudo systemctl enable wg-dashboard.service
sudo systemctl start wg-dashboard.service
Verifica que está corriendo correctamente:
sudo systemctl status wg-dashboard.service
Ahora WGDashboard se iniciará automáticamente tras cada reinicio.
Conclusión
Con esta guía, hemos instalado y configurado WGDashboard en Ubuntu, asegurándonos de optimizar su rendimiento sin Docker. Con los ajustes correctos, podemos gestionar nuestra VPN de manera eficiente.
Si necesitas más ajustes o seguridad adicional, revisa la documentación oficial de WGDashboard.
Utilidades
Cronicle: Programador de tareas distribuido
Introducción
Cronicle es un programador de tareas distribuido diseñado para ejecutar trabajos programados o bajo demanda en múltiples servidores desde un punto central. Combina la simplicidad conceptual de cron con una interfaz web, ejecución distribuida y visibilidad completa sobre el estado de las tareas.
Su enfoque lo convierte en una alternativa moderna a crontab cuando se requiere algo más que programación local: control centralizado, estadísticas en tiempo real, logs accesibles desde la interfaz y la posibilidad de escalar la ejecución a varios nodos.
Cronicle está orientado a entornos pequeños y medianos donde se necesita fiabilidad, claridad operativa y bajo overhead, sin introducir complejidad innecesaria.
Requisitos previos
Antes de instalar Cronicle, deben cumplirse los siguientes requisitos:
-
Sistema operativo compatible
- Linux (Ubuntu, Debian, CentOS) o macOS
- Arquitectura POSIX (no compatible con Windows nativo)
-
Node.js (LTS)
Cronicle está desarrollado en Node.js y requiere una versión LTS estable.
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejs -
Permisos de administrador
- Es necesario disponer de permisos de
rooto sudo para la instalación y gestión del servicio.
- Es necesario disponer de permisos de
Guía de instalación
Instalación automática
Cronicle proporciona un instalador automático que descarga la última versión estable e instala el servicio junto con sus dependencias.
curl -s https://raw.githubusercontent.com/jhuckaby/Cronicle/master/bin/install.js | node
El proceso instala Cronicle en:
/opt/cronicle/
Estructura general tras la instalación:
bin/— scripts de control y mantenimientoconf/— configuración principaldata/— definición de tareas, logs y estado
Configuración inicial
Accede al directorio de instalación:
cd /opt/cronicle
Ejecuta el asistente de configuración:
./bin/control.sh setup
Este proceso permite:
- Definir puertos de escucha
- Configurar hostname y entorno
- Inicializar la base de datos interna
La configuración resultante se almacena principalmente en:
/opt/cronicle/conf/config.json
Arranque del servicio
Una vez completada la configuración inicial, inicia el servicio:
./bin/control.sh start
Puedes verificar su estado en cualquier momento con:
./bin/control.sh status
Acceso a la interfaz web
Cronicle expone una interfaz web para la gestión completa del sistema.
-
URL por defecto:
http://<IP_SERVIDOR>:3012 -
Credenciales iniciales:
- Usuario:
admin - Contraseña:
admin
- Usuario:
Se recomienda cambiar la contraseña del usuario administrador tras el primer acceso.
Gestión y administración
Todos los comandos de administración deben ejecutarse desde el directorio de instalación:
cd /opt/cronicle
Comandos habituales:
-
Estado del servicio
./bin/control.sh status -
Detener el servicio
./bin/control.sh stop -
Reiniciar el servicio
./bin/control.sh restart -
Actualizar Cronicle
sudo ./bin/control.sh upgrade
Las actualizaciones conservan la configuración y los datos existentes.
Características principales
-
Ejecución distribuida
Permite ejecutar tareas en múltiples servidores gestionados desde una única interfaz.
-
Interfaz web
Gestión visual de tareas, calendarios, ejecuciones y errores.
-
Logs centralizados
Acceso inmediato a la salida estándar y errores de cada ejecución.
-
Ejecución bajo demanda
Además de tareas programadas, los jobs pueden lanzarse manualmente desde la UI.
-
Bajo overhead
Arquitectura ligera, adecuada para entornos donde no se justifica una plataforma de CI/CD completa.
Limitaciones conocidas
- No incorpora workflows complejos ni dependencias avanzadas entre tareas
- No incluye monitorización de sistema nativa
- En entornos muy grandes puede quedarse corto frente a soluciones más completas
Estas limitaciones son precisamente lo que mantiene a Cronicle como una solución simple, estable y predecible.
Recursos adicionales
RCloneWeb: Configuración de una interfaz web personalizada para RClone
Introducción
RClone incluye una interfaz web propia, pero puede ser algo limitada en funcionalidades y diseño. Si buscas una alternativa más completa y amigable, puedes usar rclone-webui-angular, una interfaz web desarrollada por la comunidad que mejora notablemente la experiencia de gestión.
Características principales
- Diseño más intuitivo y pulido que la interfaz predeterminada.
- Mayor cantidad de opciones y configuraciones.
- Integración con las funcionalidades principales de Rclone.
- Repositorio oficial disponible en GitHub.
Instalación y configuración
Requisitos previos
- Rclone instalado en tu sistema. Puedes consultar la guía oficial de instalación si no lo tienes.
- Acceso root o permisos sudo para configurar servicios en systemd.
Configuración del servicio systemd
Para gestionar la interfaz web de forma automática, crearemos un archivo de servicio. A continuación, se muestra el contenido del archivo con una explicación detallada:
[Unit]
Description=RClone Web GUI
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/rclone rcd --rc-web-gui --rc-user=usuario --rc-pass=password --rc-serve --rc-addr=192.168.1.3:51535 --rc-web-gui-no-open-browser --rc-web-gui-force-update --rc-web-fetch-url="https://s3.yuudi.dev/rwa/embed/version.json"
Restart=on-failure
RestartSec=10
User=usuario
Group=grupo
[Install]
WantedBy=multi-user.target
Explicación del archivo de servicio
[Unit]
Description: Describe brevemente el servicio.After: Asegura que el servicio se inicie después de que la red esté disponible.
[Service]
Type: Define el tipo de servicio como simple.ExecStart: Comando principal que inicia Rclone en modo demonio (rcd) con las siguientes opciones:--rc-web-gui: Activa la interfaz web.--rc-usery--rc-pass: Credenciales de acceso.--rc-serve: Permite servir archivos directamente desde Rclone.--rc-addr: Dirección y puerto de la interfaz web.--rc-web-gui-no-open-browser: Evita que el navegador se abra automáticamente.--rc-web-gui-force-update: Fuerza la descarga de la última versión de la interfaz.--rc-web-fetch-url: URL para descargar los recursos de la interfaz web personalizada.
Restart: Configura el reinicio automático en caso de fallo tras 10 segundos.UseryGroup: Usuario y grupo bajo los cuales se ejecuta el servicio.
[Install]
WantedBy: Indica que el servicio se habilitará en el nivel de ejecución multi-user.target (al arrancar el sistema).
Pasos para implementar el servicio
-
Crear el archivo de servicio:
sudo nano /etc/systemd/system/rclone-web.serviceCopia el contenido proporcionado anteriormente.
-
Recargar la configuración de systemd:
sudo systemctl daemon-reload -
Habilitar el servicio para inicio automático:
sudo systemctl enable rclone-web -
Iniciar el servicio:
sudo systemctl start rclone-web -
Verificar el estado del servicio:
sudo systemctl status rclone-webSi todo está correcto, deberías ver un estado active (running).
Acceso a la interfaz web
http://192.168.1.3:51535
Usa las credenciales configuradas en los parámetros --rc-user y --rc-pass para iniciar sesión.
Notas adicionales
- Asegúrate de que el puerto configurado (
51535) esté abierto en tu firewall o router si necesitas acceso remoto. - Personaliza la dirección, puerto, usuario y contraseña según tus necesidades.