Saltar al contenido principal

HTTPS automático con Caddy

En esta guía se explica cómo utilizar Caddy, un servidor web potente y fácil de usar, para mejorar la configuración de tu servidor de Outline. Las funciones HTTPS automáticas y la configuración flexible de Caddy la convierten en una opción excelente para ofrecer tu servidor de Outline, especialmente cuando se usa un transporte de WebSocket.

¿Qué es Caddy?​

Caddy es un servidor web de software libre conocido por su facilidad de uso, sus HTTPS automáticas y su compatibilidad con varios protocolos. Permite simplificar la configuración de servidores web y ofrece características como las siguientes:

  • HTTPS automáticas: Caddy obtiene y renueva automáticamente los certificados TLS para asegurar que las conexiones sean seguras.

  • Compatibilidad con HTTP/3: Caddy admite el protocolo HTTP/3 más reciente para proporcionar un tráfico web más rápido y eficiente.

  • Ampliable con complementos: Caddy puede ampliarse mediante complementos para admitir diversas funciones, como los proxys inversos y el balanceo de carga.

Paso 1: Requisitos previos​

Paso 2: Configuración de tu dominio​

Antes de empezar a usar Caddy, comprueba que el nombre de tu dominio se haya configurado correctamente de forma que dirija a la dirección IP de tu servidor.

  • Configura registros A o AAAA: inicia sesión en tu proveedor de DNS y configura registros A y AAAA para que tu dominio dirija a las direcciones IPv4 e IPv6 de tu servidor, respectivamente.

  • Verifica los registros DNS: verifica que tus registros DNS estén correctamente configurados mediante una búsqueda autorizada:

curl "https://cloudflare-dns.com/dns-query?name=<DOMAIN_NAME>&type=A" \
-H "accept: application/dns-json"

Paso 3: Desarrollo y ejecución de una compilación personalizada de Caddy​

Si usas xcaddy, puedes desarrollar un binario caddy personalizado que incluya el módulo de servidores principales de Outline y otros módulos de extensiones de servidor necesarios.

xcaddy build \
# The example uses a YAML config, so include a YAML config adapter module.
--with github.com/iamd3vil/caddy_yaml_adapter \
# The Outline core server module.
--with github.com/OutlineFoundation/outline-ss-server/outlinecaddy

Paso 4: Configuración y ejecución del servidor Caddy con Outline​

Crea un archivo config.yaml con la siguiente configuración:

apps:
http:
servers:
server1:
listen:
- ":443"
routes:
- match:
- host:
- <DOMAIN_NAME>
- path:
- /<TCP_PATH>
handle:
- handler: websocket2layer4
type: stream
connection_handler: ss1
- match:
- host:
- <DOMAIN_NAME>
- path:
- /<UDP_PATH>
handle:
- handler: websocket2layer4
type: packet
connection_handler: ss1
outline:
shadowsocks:
replay_history: 10000
connection_handlers:
- name: ss1
handle:
handler: shadowsocks
keys:
- id: user-1
cipher: chacha20-ietf-poly1305
secret: <SHADOWSOCKS_SECRET>
Important

Mantén el elemento path en secreto para evitar comprobaciones. Este elemento actúa como un endpoint secreto. Se recomienda usar una ruta larga y generada de forma aleatoria.

Esta configuración se corresponde con una estrategia de Shadowsocks a través de WebSockets con un servidor web que escucha en el puerto 443, mientras se acepta el tráfico envuelto de Shadowsocks de TCP y UDP en las rutas TCP_PATH y UDP_PATH, respectivamente.

Ejecuta el servidor de Caddy ampliado con Outline usando la configuración creada:

caddy run --config config.yaml --adapter yaml --watch
nota

En el ejemplo se usa YAML porque se lee mejor y lo pone más fácil para hacer anotaciones, pero también puedes utilizar JSON (el lenguaje de configuración nativo de Caddy). Si optas por esta última opción, puedes hacer ejecuciones sin la marca --adapter yaml y retirar la dependencia del adaptador de YAML en el paso de desarrollo y ejecución.

Puedes encontrar más configuraciones de ejemplo en nuestro repositorio de GitHub outline-ss-server/outlinecaddy.

Paso 5: Creación de una clave de acceso dinámica​

Genera un archivo YAML de clave de acceso de cliente para tus usuarios utilizando el formato de configuración avanzada e incluye los endpoints de WebSocket que has definido previamente del lado del servidor:

transport:
$type: tcpudp

tcp:
$type: shadowsocks

endpoint:
$type: websocket
url: wss://<DOMAIN_NAME>/<TCP_PATH>
cipher: chacha20-ietf-poly1305
secret: <SHADOWSOCKS_SECRET>

udp:
$type: shadowsocks

endpoint:
$type: websocket
url: wss://<DOMAIN_NAME>/<UDP_PATH>
cipher: chacha20-ietf-poly1305
secret: <SHADOWSOCKS_SECRET>

Después de generar el archivo YAML de la clave de acceso dinámica, debes enviárselo a tus usuarios. Puedes alojar el archivo en un servicio de alojamiento web estático o generarlo de forma dinámica. Más información sobre cómo usar claves de acceso dinámicas

Paso 6: Conexión con el cliente de Outline​

Utiliza una de las aplicaciones oficiales de cliente de Outline (versiones 1.15.0 y posteriores) y añade la clave de acceso dinámica que acabas de crear como entrada de servidor. Haz clic en Conectar para empezar la tunelización a tu servidor usando la configuración de Shadowsocks a través de Websocket.

Utiliza una herramienta como IPInfo para verificar que tienes acceso a Internet mediante tu servidor de Outline.