Shadowsocks sobre WebSockets

App cliente do Outline v1.15.0+.

Este tutorial mostra em detalhes como implementar o Shadowsocks sobre WebSockets, uma técnica potente para contornar a censura em ambientes onde as conexões normais do Shadowsocks são bloqueadas. Ao encapsular o tráfego do Shadowsocks dentro de WebSockets, você pode disfarçá-lo como tráfego padrão da Web, aumentando a resiliência e a acessibilidade.

Etapa 1: configure e execute um servidor do Outline

Crie um novo arquivo config.yaml com a seguinte configuração:

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

Baixe a versão mais recente do outline-ss-server (em inlgês) e execute-a usando a configuração criada:

outline-ss-server -config=config.yaml

Etapa 2: exponha o servidor da Web

Para tornar seu servidor da Web WebSocket acessível publicamente, é necessário que ele seja exposto à Internet. Também é preciso configurar o TLS (em inglês). Há várias formas de fazer isso. Você pode usar um servidor da Web local, como Caddy, nginx ou Apache, garantindo que ele tenha um certificado TLS válido, ou empregar um serviço de encapsulamento como o Cloudflare Tunnel ou o ngrok (todos os links em inglês).

Exemplo usando o TryCloudflare

Neste exemplo, vamos demonstrar o uso do TryCloudflare (em inglês) para criar um túnel rápido. Essa é uma forma maneira conveniente e segura de expor seu servidor da Web local sem abrir portas de entrada.

  1. Faça o download do cloudflared (em inglês) e instale-o.

  2. Crie um túnel apontando para a porta do seu servidor da Web local:

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

O Cloudflare vai fornecer um subdomínio (por exemplo, acids-iceland-davidson-lb.trycloudflare.com) para acessar seu endpoint WebSocket e gerenciar automaticamente o TLS. Anote esse subdomínio, porque ele será necessário mais tarde.

Etapa 3: crie uma chave de acesso dinâmica

Gere um arquivo YAML de chaves de acesso do cliente para seus usuários com o formato de configuração de chave de acesso e inclua os endpoints do WebSocket que foram configurados no lado do 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

Depois de gerar o arquivo YAML de chaves de acesso dinâmicas, você terá que entregá-lo aos seus usuários. É possível armazenar o arquivo em um serviço estático de hospedagem na Web ou gerá-lo dinamicamente. Saiba mais sobre como usar as chaves de acesso dinâmicas.

Etapa 4: conecte-se com o app cliente do Outline

Use um dos aplicativos oficiais do app cliente do Outline (versões 1.15.0+) e adicione a chave de acesso dinâmica que você criou como uma entrada de servidor. Clique em Conectar para iniciar o encapsulamento para seu servidor usando a configuração Shadowsocks sobre Websocket.

Use uma ferramenta como o IPInfo (em inglês) para verificar se você está navegando na Internet pelo seu servidor Outline.