SkyWalker 是一个代理程序,设计用来转换不同的数据格式。
如果要把HTTP代理转化为SOCKS5代理输出,其数据流如下
+--------+ +-----------+ +---------------+
| CLIENT | <=HTTP-PROXY=> | SKYWALKER | <=SOCKS5=> | SOCKS5 SERVER | <=>
+--------+ +-----------+ +---------------+
一个典型的Shadowsocks的local服务如下
+--------+ +-----------+ +------------+
| CLIENT | <=SOCKS5=> | SKYWALKER | <=SHADOWSOCKS=> | SS REMOTE | <=>
+--------+ +-----------+ +------------+
为了达到这种可配置的代理转化效果,Skywalker内部大致被分为两个部分。
一部分用于接收并解析客户端数据,叫作ClientAgent(简称CA)。
另一部分用于接受CA解析完的数据并打包成新的数据格式,并发送给服务器,叫做ServerAgent(简称SA)。
通过实现不同的CA和SA协议,来达到可配置地转化数据协议地能力。
目前
CA支持以下协议
* HTTP PROXY
* SOCKS4
* SOCKS5
* SHADOWSOCKS
* REDIRECT
* VOID
* ECHO
SA支持以下协议
* SOCKS4
* SOCKS5
* SHADOWSOCKS
* DIRECT
* VOID
* ECHO
DIRECT 表示无格式数据,直接把数据发送出去。
注意 在协议转化的过程中,有一个转化方向,那就是从高层协议往低层或者同层协议转化。
比如可以把HTTP代理转化为SOCKS5协议,但是无法把SOCKS5协议转化为HTTP代理协议,因此SA不能实现HTTP代理协议。
类似的还有,DIRECT只能作为SA协议,而不能作为CA协议。
Skywalker 使用 Yaml1.2 作为配置格式。
具体配置方案请参考 example 目录。
在代码目录下执行
- make
与Skywalker配套的一个管理程序叫做forctl,它既可以做作为命令行程序,也可以作为交互程序使用。
可以用于开启和关闭代理、查看代理状态、刷新配置等。
命令 | 说明 | 使用方式 |
---|---|---|
status | 查看当前代理状态 | forctl status <name>... |
info | 查看代理的详细信息 | forctl info <name> |
list | 查看代理当前的链接通道 | forctl list <name> |
reload | 更新配置,将重启服务 | forctl reload -y |
start | 启动代理 | forctl start <name> |
stop | 关闭代理 | forctl stop <name> |
restart | 重启代理 | forctl restart <name> |
quit | 退出skywalker | forctl quit -y |