|
|
|
@ -8,39 +8,31 @@
|
|
|
|
|
## 架构 |
|
|
|
|
|
|
|
|
|
### 术语 |
|
|
|
|
* Point:一个 V2Ray 服务器称为 VPoint |
|
|
|
|
* Set:本机上的一组 VPoint |
|
|
|
|
* SuperSet:多机环境中的多个 VSet |
|
|
|
|
* Source:用户所使用的需要翻墙的软件,比如浏览器 |
|
|
|
|
* End:用户需要访问的网站 |
|
|
|
|
* User:一个受到 VPoint 认证的帐号 |
|
|
|
|
* [ID](https://github.com/V2Ray/v2ray-core/blob/master/spec/id.md):全局唯一的 ID,类似于 UUID |
|
|
|
|
|
|
|
|
|
* Point:一个 V2Ray 服务器称为 Point Server |
|
|
|
|
* Set:一组 Point Server,包含多个 Point 进程,由一个 Master 进程统一管理。 |
|
|
|
|
* SuperSet:多机环境中的多个 Set |
|
|
|
|
|
|
|
|
|
### 工作流程 |
|
|
|
|
VPoint 可提收来自 VSource 或其它 VPoint 的请求,并将请求转发至配置中的下一个 VPoint(或 VSet 或 VSuperSet) 或目标网站,然后将所得到的应答回复给请求来源。 |
|
|
|
|
VPoint 采用白名单机制,只接受已认证帐号的请求。 |
|
|
|
|
Point 可接收来自用户或其它 Point 的请求,并将请求转发至配置中的下一个 Point(或 Set 或 SuperSet) 或目标网站,然后将所得到的应答回复给请求来源。 |
|
|
|
|
Point 采用白名单机制,只接受已认证帐号的请求。 |
|
|
|
|
|
|
|
|
|
### 通信协议 |
|
|
|
|
* VPoint 之间默认使用自有 VMess 协议,或第三方自定义协议。 |
|
|
|
|
* VPoint 和客户端之间可使用以下协议: |
|
|
|
|
* Point 之间默认使用自有 VMess 协议,或第三方自定义协议。 |
|
|
|
|
* Point 和客户端之间可使用以下协议: |
|
|
|
|
* HTTP Proxy |
|
|
|
|
* SOCKS 5 Proxy |
|
|
|
|
* SOCKS Proxy |
|
|
|
|
* PPTP / L2TP / SSTP 等 VPN 隧道 |
|
|
|
|
* 其它自定义协议 |
|
|
|
|
* VPoint 和目标网站之间使用以下协议: |
|
|
|
|
* Point 和目标网站之间使用以下协议: |
|
|
|
|
* HTTP / HTTPS |
|
|
|
|
* UDP (DNS) |
|
|
|
|
|
|
|
|
|
#### VMess |
|
|
|
|
VMess 为 V2Ray 的原生协议,设计用于两个 VPoint 之间的通信。[详细设计](https://github.com/V2Ray/v2ray-core/blob/master/spec/vmess.md) |
|
|
|
|
|
|
|
|
|
### User |
|
|
|
|
* 每个 User 有一个 ID |
|
|
|
|
VMess 为 V2Ray 的原生协议,设计用于两个 Point 之间的通信。[详细设计](https://github.com/V2Ray/v2ray-core/blob/master/spec/vmess.md) |
|
|
|
|
|
|
|
|
|
### Point |
|
|
|
|
* 每个 Point 有一个 ID,运行时生成 |
|
|
|
|
* 每个 Point 可使用独立的配置文件,或从 VSet 继承 |
|
|
|
|
* 每个 Point 可使用独立的配置文件,或从 Set 继承 |
|
|
|
|
* 一个 Point 监听主机上的一个特定端口(可配置),用于接收和发送数据 |
|
|
|
|
* 一个 Point 运行于一个独立的进程,可设定其使用的系统帐户 |
|
|
|
|
|
|
|
|
@ -53,36 +45,11 @@ TODO
|
|
|
|
|
## Point 详细设计 |
|
|
|
|
一个 Point 包含五个部分: |
|
|
|
|
* 配置文件处理:读取和解析配置文件 |
|
|
|
|
* 输入:负责与客户端建立连接(如 TCP),接收客户端的消息 |
|
|
|
|
* 控制中心:负责处理事件 |
|
|
|
|
* 加密解密 |
|
|
|
|
* Point 负载均衡 |
|
|
|
|
* Point 进程间通信 |
|
|
|
|
* 输出:负责向客户端发送消息 |
|
|
|
|
* 输入(Inbound):负责与客户端建立连接(如 TCP),接收客户端的消息 |
|
|
|
|
* 输出(Outbound):负责向客户端发送消息 |
|
|
|
|
|
|
|
|
|
### 配置文件 |
|
|
|
|
配置文件使用 JSON / ProtoBuf 兼容格式,定义 TODO |
|
|
|
|
|
|
|
|
|
### 加密 |
|
|
|
|
TODO |
|
|
|
|
|
|
|
|
|
### 任务处理 |
|
|
|
|
TODO |
|
|
|
|
|
|
|
|
|
### 控制中心 |
|
|
|
|
控制中心响应以下事件: |
|
|
|
|
|
|
|
|
|
**INIT** |
|
|
|
|
* 输入:用户 ID |
|
|
|
|
* 输出:如果用户 ID 有效:"OK",否则关闭连接 |
|
|
|
|
|
|
|
|
|
**MSG** |
|
|
|
|
* 输入:VMess 消息 |
|
|
|
|
* 输出:对应的响应消息 |
|
|
|
|
|
|
|
|
|
**END** |
|
|
|
|
* 输入:用户 ID |
|
|
|
|
* 输出:如果用户 ID 有效:关闭连接 |
|
|
|
|
配置文件使用 JSON / ProtoBuf 兼容格式 |
|
|
|
|
|
|
|
|
|
## 编程语言 |
|
|
|
|
暂定为 golang。 |
|
|
|
|