Skip to content

JiayinDeng/shadowsocks-ws

Repository files navigation

Shadowsocks over WebSocket

Build Status License GitHub last commit

shadowsocks-ws 是基于 WebSocket 的 Shadowsocks,既可以部署在 HerokuRailway 等 PaaS 平台,也可以部署在常规的 VPS 上。

        socks5            tcp               websocket                tcp
client <------> ss-local <---> ss-ws-local <-- gfw --> ss-ws-remote <---> target
                encrypt                                decrypt

shadowsocks-ws 客户端(ss-ws-local)和 shadowsocks-ws 服务器(ss-ws-remote)之间使用 WebSocket 协议进行通信。shadowsocks-ws 客户端只负责转发经过加密的流量,须配合 Shadowsocks for Windows 等常规 Shadowsocks 客户端(ss-local)使用。shadowsocks-ws 服务器不仅是一个 Shadowsocks 服务器,还是一个支持反向代理的 Web 服务器,可以伪装成某个网站。

环境要求

服务器部署

作为一个 Shadowsocks 服务器,shadowsocks-ws 服务器使用的加密方案、密码和端口号分别由环境变量 METHODPASSPORT 决定。目前,shadowsocks-ws 服务器仅支持 chacha20-ietf-poly1305aes-256-gcm 两种加密方案。

作为一个支持反向代理的 Web 服务器,shadowsocks-ws 服务器默认使用根目录下的 index.html 作为网站主页。如果使用环境变量 PROXY 指定了一个网站,shadowsocks-ws 服务器就会成为那个网站的反向代理,从而伪装成那个网站。

PaaS

Heroku

Deploy

Railway

Deploy on Railway

VPS

获取 shadowsocks-ws 的代码,安装 shadowsocks-ws 服务器依赖的第三方库:

git clone https://github.com/totravel/shadowsocks-ws.git
cd shadowsocks-ws
npm i

设置 shadowsocks-ws 服务器使用的加密方案、密码和端口号:

export METHOD=aes-256-gcm
export PASS=secret
export PORT=80

如有需要,可以设置反向代理的目标网站:

export PROXY='https://github.com'

生成并启动 shadowsocks-ws 服务器:

npm run build
npm start

客户端配置

用户需要在本地同时运行 shadowsocks-ws 客户端和常规 Shadowsocks 客户端。

shadowsocks-ws 客户端

获取 shadowsocks-ws 的代码,安装 shadowsocks-ws 客户端依赖的第三方库:

git clone https://github.com/totravel/shadowsocks-ws.git
cd shadowsocks-ws
npm i --no-optional

将 shadowsocks-ws 客户端的配置文件的模板 config.json.example 重命名为 config.json 并修改其中的 serverpasswordmethod 三个字段。

{
  "nameserver": "https://doh.opendns.com/dns-query",
  "server": "https://*.up.railway.app/",
  "server_address": [],
  "local_address": "127.0.0.1",
  "local_port": 8787,
  "password": "secret",
  "method": "aes-256-gcm",
  "timeout": 5000,
  "show_qrcode": true,
  "show_url": false
}

如果 server 字段的主机部分不是一个 IP 地址,而是一个主机名,shadowsocks-ws 客户端就会自动进行 DNS 查询。如果服务器的 IP 地址已知并且已经用 server_address 字段一一列出,shadowsocks-ws 客户端就不会进行 DNS 查询。

nameserver 字段的值必须是 DoH 服务器的地址。下列取值供参考:

  • DNSPod https://doh.pub/dns-query
  • AliDNS https://dns.alidns.com/dns-query
  • 360DNS https://doh.360.cn/dns-query
  • IPv6 DNS https://dns.ipv6dns.com/dns-query
  • Quad9 https://dns10.quad9.net/dns-query
  • Cisco OpenDNS https://doh.opendns.com/dns-query
  • Cloudflare https://1.1.1.1/dns-query
  • Cloudflare https://1.0.0.1/dns-query
  • AT&T https://dohtrial.att.net/dns-query
  • IIJ https://public.dns.iij.jp/dns-query
  • AdGuard https://unfiltered.adguard-dns.com/dns-query
  • bebasdns https://dns.bebasid.com/dns-query
  • AlekBergNl https://dnsnl.alekberg.net/dns-query
  • AlekBergSE https://dnsse.alekberg.net/dns-query
  • adfree https://adfree.usableprivacy.net/query
  • Control D https://freedns.controld.com/p0
  • Cloudflare https://cloudflare-dns.com/dns-query

启动 shadowsocks-ws 客户端:

npm run local

常规 Shadowsocks 客户端

下文根据需要选择性阅读。

Shadowsocks for Windows

打开 Shadowsocks for Windows

  1. 系统托盘 > 上下文菜单
    1. 服务器 > 扫描屏幕上的二维码
    2. 系统代理 > PAC 模式

Clash for Windows

将配置文件的模板 clash.yaml.example 重命名为 clash.yaml 并修改 cipherpassword 两个字段。

proxies:
  - name: "ss1"
    type: ss
    server: 127.0.0.1
    port: 8787
    cipher: aes-256-gcm
    password: "secret"

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - ss1

rules:
  - GEOIP,LAN,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

打开 Clash for Windows

  1. 配置 > 导入上述配置文件
  2. 主页 > 打开「系统代理」开关
  3. 代理 > 规则
获取和使用规则集

执行脚本 ruleset.sh 下载 Clash 规则集

./ruleset.sh

使用规则集的配置文件的模板为 blacklist.yaml.examplewhitelist.yaml.example。它们的用法与 clash.yaml.example 相同。

SagerNet for Android

将手机和电脑连接至同一网络,打开 SagerNet for Android

  1. 右上角 > 添加服务器配置 > 扫描二维码
  2. 修改服务器配置 > 将「服务器」字段由 127.0.0.1 修改为电脑的 IP 地址
  3. 右下角 > 连接

shadowsocks-rust

另外再准备一个配置文件,例如:

{
  "server": "127.0.0.1",
  "server_port": 8787,
  "password": "secret",
  "method": "aes-256-gcm",
  "local_address": "127.0.0.1",
  "local_port": 1080
}

然后用如下命令启动 shadowsocks-rust

./sslocal -c config.json --log-without-time

常见问题

用常规 Shadowsocks 客户端连接 shadowsocks-ws 服务器失败?

不能直接用常规 Shadowsocks 客户端连接 shadowsocks-ws 服务器。要使用 shadowsocks-ws,必须先在本地运行 shadowsocks-ws 客户端,再让常规 Shadowsocks 客户端连接到 shadowsocks-ws 客户端。具体步骤见 客户端配置

如何确认 shadowsocks-ws 服务器已经部署成功并且可以正常访问?

直接在浏览器的地址栏中输入 shadowsocks-ws 服务器的地址并访问。如果可以看到 You're free as a bird!,就说明服务器已经可以正常访问。

shadowsocks-ws 客户端提示所有 IP 地址都连接超时?

先用浏览器访问服务器,确保服务器可以访问。再修改配置文件中的 nameserver 字段并重试。

有支持 Shadowsocks 2022 的计划吗?

有。由于 Shadowsocks 2022 变化较大,需要更多的时间进行开发和测试。

shadowsocks-ws 支持 UDP 代理吗?

不支持。目前也没有支持 UDP 的计划。

求助和反馈

求助和反馈可以在 Issues 版块进行。

讨论和交流

讨论和交流可以在 Discussions 版块进行。

鸣谢

许可协议

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published