Shadowsocks sobre WebSockets

Cliente de Outline 1.15.0 y versiones posteriores.

En este instructivo, se ofrece una explicación detallada para ayudarte a implementar Shadowsocks sobre WebSockets, una potente técnica para evitar la censura en entornos donde se bloquean las conexiones comunes de Shadowsocks. Encapsular el tráfico de Shadowsocks en WebSockets puede disfrazarlo como tráfico web, lo que mejora la resiliencia y la accesibilidad.

Paso 1: Configura y ejecuta un servidor de Outline

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

web:
  servers:
    - id: server1
      listen:
        - "127.0.0.1:WEB_SERVER_PORT"

services:
  - listeners:
      - type: websocket-stream
        web_server: server1
        path: "/TCP_PATH"
      - type: websocket-packet
        web_server: server1
        path: "/UDP_PATH"
    keys:
      - id: 1
        cipher: chacha20-ietf-poly1305
        secret: SHADOWSOCKS_SECRET

Descarga la versión más reciente de outline-ss-server y ejecútala con la configuración que creaste:

outline-ss-server -config=config.yaml

Paso 2: Expón el servidor web

Para que tu servidor web WebSocket sea de acceso público, deberás exponerlo a Internet y configurar TLS. Para ello, tienes varias opciones: puedes usar un servidor web local (como Caddy, nginx o Apache) y asegurarte de que tenga un certificado TLS válido, o utilizar un servicio de tunelización como Cloudflare Tunnel o ngrok.

Ejemplo de uso de TryCloudflare

En este ejemplo, usaremos TryCloudflare para crear un túnel rápido, lo que brinda una forma conveniente y segura de exponer servidores web locales sin abrir puertos entrantes.

  1. Descarga e instala cloudflared.

  2. Crea un túnel que apunte al puerto del servidor web local:

    cloudflared tunnel --url http://127.0.0.1:WEB_SERVER_PORT
    

Cloudflare proporcionará un subdominio (p. ej., acids-iceland-davidson-lb.trycloudflare.com) para acceder a tu extremo de WebSocket y controlar TLS automáticamente. Anota este subdominio, ya que lo necesitarás más adelante.

Paso 3: Crea una clave de acceso dinámica

Genera un archivo YAML de clave de acceso de cliente para tus usuarios usando el formato de configuración de claves de acceso y, luego, incluye los extremos de WebSocket previamente configurados en el servidor:

transport:
  $type: tcpudp

  tcp:
    $type: shadowsocks

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

  udp:
    $type: shadowsocks

    endpoint:
      $type: websocket
      url: wss://DOMAIN/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 4: Conecta el servidor con el cliente de Outline

Usa una de las apps 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.