-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
101 lines (65 loc) · 2.94 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
SkyWalker
==============
### 介绍
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](http://www.yaml.org/spec/1.2/spec.html) 作为配置格式。
具体配置方案请参考 ***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` |
### 截图
![start](https://github.com/raw/hitoshii/skywalker/master/screenshot/screenshot1.png?raw=true)
![control](https://github.com/raw/hitoshii/skywalker/master/screenshot/screenshot2.png?raw=true)