shadowsocks-ws 是基于 WebSocket 的 Shadowsocks,既可以部署在 Heroku 和 Railway 等 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 服务器使用的加密方案、密码和端口号分别由环境变量 METHOD
、PASS
和 PORT
决定。目前,shadowsocks-ws 服务器仅支持 chacha20-ietf-poly1305
和 aes-256-gcm
两种加密方案。
作为一个支持反向代理的 Web 服务器,shadowsocks-ws 服务器默认使用根目录下的 index.html
作为网站主页。如果使用环境变量 PROXY
指定了一个网站,shadowsocks-ws 服务器就会成为那个网站的反向代理,从而伪装成那个网站。
Heroku
Railway
获取 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 客户端依赖的第三方库:
git clone https://github.com/totravel/shadowsocks-ws.git
cd shadowsocks-ws
npm i --no-optional
将 shadowsocks-ws 客户端的配置文件的模板 config.json.example
重命名为 config.json
并修改其中的 server
、password
和 method
三个字段。
{
"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
下文根据需要选择性阅读。
- 系统托盘 > 上下文菜单
- 服务器 > 扫描屏幕上的二维码
- 系统代理 > PAC 模式
将配置文件的模板 clash.yaml.example
重命名为 clash.yaml
并修改 cipher
和 password
两个字段。
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
- 配置 > 导入上述配置文件
- 主页 > 打开「系统代理」开关
- 代理 > 规则
执行脚本 ruleset.sh
下载 Clash 规则集。
./ruleset.sh
使用规则集的配置文件的模板为 blacklist.yaml.example
或 whitelist.yaml.example
。它们的用法与 clash.yaml.example
相同。
将手机和电脑连接至同一网络,打开 SagerNet for Android:
- 右上角 > 添加服务器配置 > 扫描二维码
- 修改服务器配置 > 将「服务器」字段由
127.0.0.1
修改为电脑的 IP 地址 - 右下角 > 连接
另外再准备一个配置文件,例如:
{
"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-ws,必须先在本地运行 shadowsocks-ws 客户端,再让常规 Shadowsocks 客户端连接到 shadowsocks-ws 客户端。具体步骤见 客户端配置。
直接在浏览器的地址栏中输入 shadowsocks-ws 服务器的地址并访问。如果可以看到 You're free as a bird!
,就说明服务器已经可以正常访问。
先用浏览器访问服务器,确保服务器可以访问。再修改配置文件中的 nameserver
字段并重试。
有。由于 Shadowsocks 2022 变化较大,需要更多的时间进行开发和测试。
不支持。目前也没有支持 UDP 的计划。
求助和反馈可以在 Issues 版块进行。
讨论和交流可以在 Discussions 版块进行。
- websockets/ws Simple to use, blazing fast and thoroughly tested WebSocket client and server for Node.js
- expressjs/express Fast, unopinionated, minimalist web framework for node.
- chimurai/http-proxy-middleware The one-liner node.js http-proxy middleware for connect, express, next.js and more
- byu-imaal/dohjs DNS over HTTPS client for use in the browser
- Marak/colors get colors in your node.js console
- soldair/qrcode qr code generator
- Shadowsocks for Windows A C# port of shadowsocks
- Clash for Windows clash for windows汉化版. 提供clash for windows的汉化版, 汉化补丁及汉化版安装程序
- Loyalsoldier/clash-rules Clash Premium 规则集(RULE-SET),兼容 ClashX Pro、Clash for Windows 客户端。
- SagerNet for Android The universal proxy toolchain for Android