Shadowsocks-over-WebSockets

Outline-client v1.15.0+.

In deze handleiding staat stapsgewijs uitgelegd hoe je Shadowsocks-over-WebSockets implementeert. Dit is een krachtige techniek om censuur te omzeilen in omgevingen waar reguliere Shadowsocks-verbindingen zijn geblokkeerd. Door Shadowsocks-verkeer in te kapselen in WebSockets kun je het vermommen als standaard webverkeer. Zo is het beter bestand tegen censuur en beter toegankelijk.

Stap 1: Stel een Outline-server in en voer deze uit

Maak een nieuw config.yaml-bestand met de volgende configuratie:

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

Download de nieuwste outline-ss-server en voer deze uit met de gemaakte configuratie:

outline-ss-server -config=config.yaml

Stap 2: Stel de webserver bloot

Om je WebSocket-webserver openbaar toegankelijk te maken, moet je deze blootstellen aan internet en TLS instellen. Je kunt dit op verschillende manieren doen. Je kunt een lokale webserver gebruiken, zoals Caddy, nginx of Apache (zorg daarbij dat deze een geldig TLS-certificaat heeft). Je kunt ook een tunnelingservice inzetten, zoals Cloudflare Tunnel of ngrok.

Voorbeeld met TryCloudflare

In dit voorbeeld gebruiken we TryCloudflare om te demonstreren hoe je snel een tunnel maakt. Dit is een handige, goed beveiligde manier om je lokale webserver bloot te stellen zonder inkomende poorten te openen.

  1. Download en installeer cloudflared.

  2. Maak een tunnel die wijst naar je lokale webserverpoort:

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

Je krijgt van Cloudflare een subdomein (zoals acids-iceland-davidson-lb.trycloudflare.com) om toegang te krijgen tot je WebSocket-eindpunt en TLS automatisch af te handelen. Noteer dit subdomein, je hebt het later weer nodig.

Stap 3: Maak een dynamische toegangssleutel

Maak een YAML-bestand met de clienttoegangssleutel voor je gebruikers met de indeling voor de configuratie van de toegangssleutel. Voeg het WebSockets-eindpunt toe dat je eerder hebt ingesteld aan de serverzijde:

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

Nadat je het YAML-bestand met de dynamische toegangssleutel hebt gemaakt, moet je zorgen dat je gebruikers er toegang toe hebben. Je kunt het bestand hosten op een statische webhostingservice of het dynamisch genereren. Meer informatie over hoe je dynamische toegangssleutels gebruikt.

Stap 4: Maak verbinding met de Outline-client

Gebruik een van de officiële apps voor de Outline-client (versie 1.15.0+) en voeg de dynamische toegangssleutel die je net hebt gemaakt toe als serverinvoer. Klik op Verbinden om het tunnelen naar je server te starten met de Shadowsocks-over-WebSocket-configuratie.

Gebruik een tool als IPInfo om te controleren of je nu browst op internet via je Outline-server.