HTTPS automático con Caddy

En esta guía, se explica cómo usar Caddy, un servidor web potente y fácil de usar, para mejorar la configuración del servidor de Outline. Las funciones de HTTPS automático de Caddy y su configuración flexible lo convierten en una excelente opción para entregar servidores de Outline, sobre todo cuando se utiliza el transporte con WebSocket.

¿Qué es Caddy?

Caddy es un servidor web de código abierto conocido por su facilidad de uso, HTTPS automático y compatibilidad con diversos protocolos. Simplifica la configuración de servidores web y ofrece funciones como las siguientes:

  • HTTPS automático: Caddy obtiene y renueva automáticamente los certificados TLS, lo que garantiza conexiones seguras.
  • Compatibilidad con HTTP/3: Caddy es compatible con el protocolo HTTP/3 más reciente para brindar un tráfico web más rápido y eficiente.
  • Complementos: Caddy puede extenderse con complementos para ofrecer diversas funciones, como proxy inverso y balanceo de cargas.

Paso 1: Requisitos

Paso 2: Configura el dominio

Antes de iniciar Caddy, asegúrate de que tu nombre de dominio esté correctamente configurado para que apunte a la dirección IP de tu servidor.

  • Configura los registros A y AAAA: Accede a tu proveedor de DNS y configura los registros A y AAAA de tu dominio para que apunten a las direcciones IPv4 e IPv6 de tu servidor, respectivamente.
  • Verifica los registros DNS: Comprueba que tus registros DNS estén correctamente configurados con una búsqueda autorizada.

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

Paso 3: Crea y ejecuta una compilación personalizada de Caddy

Con xcaddy, puedes compilar un objeto binario personalizado de caddy que incluya el módulo principal del servidor de Outline y otros módulos de extensión del 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/Jigsaw-Code/outline-ss-server/outlinecaddy

Paso 4: Configura y ejecuta el servidor de 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

Esta configuración representa una estrategia de Shadowsocks sobre WebSockets. Hay un servidor web que escucha en el puerto 443 y acepta tráfico de TCP y UDP encapsulado con Shadowsocks en las rutas TCP_PATH y UDP_PATH, respectivamente.

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

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

Puedes encontrar más ejemplos de configuración en nuestro repo de GitHub, outline-ss-server/outlinecaddy.

Paso 5: Crea 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 y, luego, incluye los extremos de WebSocket previamente configurados en el 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 clave de acceso dinámica, debes enviárselo a los usuarios. Puedes alojar el archivo en un servicio de hosting web estático o generarlo dinámicamente. Obtén más información para usar claves de acceso dinámicas.

Paso 6: Conecta el servidor con el cliente de Outline

Usa una de las aplicaciones oficiales del cliente de Outline (versión 1.15.0 como mínimo) y agrega la clave de acceso dinámica que acabas de crear como entrada de servidor. Haz clic en Conectar para iniciar una tunelización hacia el servidor utilizando la configuración de Shadowsocks sobre WebSocket.

Usa una herramienta como IPInfo para verificar que ahora estás navegando por Internet a través del servidor de Outline.