Shadowsocks-over-WebSockets

Outline 用戶端 1.15.0 以上版本。

本教學課程將詳述 Shadowsocks-over-WebSockets 的實作步驟,使您能在一般 Shadowsocks 連線受阻的環境中有效規避審查。其原理是將 Shadowsocks 流量封裝在 WebSocket 中,偽裝成標準網路流量,進而提升抗封鎖能力與存取性。

步驟 1:設定並執行 Outline 伺服器

建立新的 config.yaml 檔案並加入以下設定:

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

下載最新的 outline-ss-server,並使用已建立的設定執行,如下所示:

outline-ss-server -config=config.yaml

步驟 2:公開網路伺服器

為了讓大眾能存取您的 WebSocket 網路伺服器,您需要將伺服器公開至網際網路並設定 TLS。您可以選擇使用 CaddynginxApache 等本機網路伺服器,並確保該伺服器具備有效的 TLS 憑證;或是運用 Cloudflare Tunnelngrok 等通道服務。

使用 TryCloudflare 的示例

我們將以 TryCloudflare 為例,示範如何建立快速通道。這個方法既便利又安全,讓您無需開放傳入通訊埠,即可公開本機網路伺服器。

  1. 下載並安裝 cloudflared

  2. 建立指向本機網路伺服器通訊埠的通道,如下所示:

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

Cloudflare 會提供一個子網域 (例如 acids-iceland-davidson-lb.trycloudflare.com),用於存取您的 WebSocket 端點並自動處理 TLS。請記下這個子網域,後續設定將會用到。

步驟 3:建立動態存取金鑰

使用存取金鑰設定格式為使用者產生用戶端存取金鑰 YAML 檔案,並納入先前在伺服器端設定的 WebSocket 端點,如下所示:

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

產生動態存取金鑰 YAML 檔案後,您需要將檔案提供給使用者,比如將檔案託管於靜態網站代管服務,或動態產生檔案。進一步瞭解如何使用動態存取金鑰

步驟 4:使用 Outline 用戶端連線

使用官方 Outline 用戶端應用程式 (1.15.0 以上版本),將新建立的動態存取金鑰新增為伺服器項目。點選「連線」,即可使用 Shadowsocks-over-Websocket 設定建立的通道連線至您的伺服器。

您可以使用類似 IPInfo 的工具,確認目前是否透過 Outline 伺服器瀏覽網際網路。