diff --git a/README.md b/README.md index ecbfa37e5..e5b4fdaf0 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ [![Coverage Status](https://coveralls.io/repos/v2ray/v2ray-core/badge.svg?branch=master&service=github)](https://coveralls.io/github/v2ray/v2ray-core?branch=master) [![GoDoc](https://godoc.org/github.com/v2ray/v2ray-core?status.svg)](https://godoc.org/github.com/v2ray/v2ray-core) -[中文](https://github.com/V2Ray/v2ray-core/blob/master/README.md) | [English](https://github.com/V2Ray/v2ray-core/blob/master/spec/en/README.md) - V2Ray 是一个模块化的代理软件包,它的目标是提供常用的代理软件模块,简化网络代理软件的开发。 -[官方网站](https://www.v2ray.com/) +[官方网站](https://www.v2ray.com/) | [Wiki](https://github.com/v2ray/v2ray.github.io/wiki) + +V2Ray provides building blocks for network proxy development. Read our [Wiki](https://github.com/v2ray/v2ray.github.io/wiki/en-us:Home) for more information. ## License [The MIT License (MIT)](https://raw.githubusercontent.com/v2ray/v2ray-core/master/LICENSE) diff --git a/spec/benchmark.md b/spec/benchmark.md deleted file mode 100644 index 64f090a89..000000000 --- a/spec/benchmark.md +++ /dev/null @@ -1,12 +0,0 @@ -# V2Ray 性能 - -## 主机测试 - -| 测试时间 | 主机商/类型 | 地区 | 主机 CPU | 主机内存 | 主机系统 | Youtube 速度 | 内存 (单用户) | CPU (单用户) | -| -----------|------------------ | ----- |------- | ------- | ------ | ------- | ----------- | ----------- | -| 2015.09.30 | Vultr | 跨洲 | 1 Core | 1024 MB | Debian 64 位 | >4 Mbps | ~10M | < 2% | -| 2015.09.30 | Vultr | 同洲 | 1 Core | 768 MB | Ubuntu 32 位 | >20 Mbps | ~11M | < 20% | -| 2015.09.29 | 搬瓦工 Bandwagon 10G | 同洲 | 1 Core | 256 MB | Cent OS 32 位 (OpenVZ) | >4 Mbps | ~8M | < 5% | -| 2015.09.27 | GCE f1-micro | 跨州 | 1 Core | 600 MB | Debian 64 位 | >4 Mbps | ~9M | < 2% | - -以上测试仅作为参考,具体连接速度可能受到各种因素的影响。 \ No newline at end of file diff --git a/spec/design.md b/spec/design.md deleted file mode 100644 index fcd3978b9..000000000 --- a/spec/design.md +++ /dev/null @@ -1,10 +0,0 @@ -# V2Ray 设计概要 - -## 目标 -* V2Ray 自身提供基础的翻墙功能,单独使用可满足日常需求; -* V2Ray 可被用于二次开发,可为用户提供个性化的翻墙体验,从而也达到难以统一屏蔽之效果; -* V2Ray 为模块化设计,模块之间互相独立。每个模块可单独使用,也可和其它模块搭配使用。 - -## 架构 - -![](https://github.com/V2Ray/v2ray-core/blob/master/spec/v2ray_design.png) diff --git a/spec/develop.md b/spec/develop.md deleted file mode 100644 index ece97ceac..000000000 --- a/spec/develop.md +++ /dev/null @@ -1,49 +0,0 @@ -# 开发指引 - -## 基本 -### 版本控制 -Git - -### Branch -本项目只使用一个 Branch:master。所有更改全部提交进 master,并确保 master 在任一时刻都是可编译可使用的。 - -### 引用其它项目 -* golang - * 产品代码只能使用 golang 的标准库,即名称不包含任何网址的包; - * 测试代码可以使用 golang.org/x/... ; - * 如需引用其它项目请事先创建 Issue 讨论; -* 其它 - * 只要不违反双方的协议(本项目为 MIT),且对项目有帮助的工具,都可以使用。 - - -## 开发流程 - -### 写代码之前 -发现任何问题,或对项目有任何想法,请立即[创建 Issue](https://github.com/V2Ray/v2ray-core/blob/master/spec/issue.md) 讨论之,以减少重复劳动和消耗在代码上的时间。 - -### 修改代码 -* golang - * 请参考 [Effective Go](https://golang.org/doc/effective_go.html); - * 每一次 commit 之前请运行: gofmt -w github.com/v2ray/v2ray-core/ - * 每一次 commit 之前请确保测试通过: go test github.com/v2ray/v2ray-core/... - * 提交 PR 之前请确保新增代码有超过 60% 的代码覆盖率(code coverage)。 -* 其它 - * 请注意代码的可读性 - -### Pull Request -提交 PR 之前请先运行 git pull 以确保 merge 可顺利进行。 - -## 对代码的修改 -### 功能性问题 -请提交至少一个测试用例(test case)来验证对现有功能的改动。 - -### 性能相关 -请提交必要的测试数据来证明现有代码的性能缺陷,或是新增代码的性能提升。 - -### 新功能 -如果新增功能对已有功能不影响,请提供可以开启/关闭的开关(如 flag),并使新功能保持默认关闭的状态。 - -### 其它 -视具体情况而定。 - - diff --git a/spec/donate.md b/spec/donate.md deleted file mode 100644 index adf7d975f..000000000 --- a/spec/donate.md +++ /dev/null @@ -1,15 +0,0 @@ -# 资助 V2Ray 发展 - -## 资助方式 -V2Ray 支持以下资助方式,收到捐赠之后您的昵称将会显示在页面下方。更改昵称请联系 donate@v2ray.com 。 - -### 礼品卡 -请发送礼品卡编码至 donate@v2ray.com -* [Amazon Gift Card](https://www.amazon.com/gp/product/B004LLIKVU/gcrnsts?ie=UTF8&qid=1443538350&ref_=lp_2238192011_1_1&s=gift-cards&sr=1-1) -* iTunes Gift Card - - -## 感谢您的帮助 -* 2015.10.17: Penn G\*\*\*\*\*\* $25 -* 2015.10.02: a\*\*\*\*\*u $25 -* 2015.09.30: s\*\*\*\*\*\*\*@gmail.com $10 diff --git a/spec/en/README.md b/spec/en/README.md deleted file mode 100644 index 8a801d428..000000000 --- a/spec/en/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Project V2Ray - -[![Build Status](https://travis-ci.org/v2ray/v2ray-core.svg?branch=master)](https://travis-ci.org/v2ray/v2ray-core) -[![Coverage Status](https://coveralls.io/repos/v2ray/v2ray-core/badge.svg?branch=master&service=github)](https://coveralls.io/github/v2ray/v2ray-core?branch=master) -[![GoDoc](https://godoc.org/github.com/v2ray/v2ray-core?status.svg)](https://godoc.org/github.com/v2ray/v2ray-core) -![License](https://img.shields.io/github/license/v2ray/v2ray-core.svg) - -[中文](https://github.com/V2Ray/v2ray-core/blob/master/README.md) | [English](https://github.com/V2Ray/v2ray-core/blob/master/spec/en/README.md) - -V2Ray provides building blocks for network proxy, tunnel protocol development. It aims for easy further development of proxy software, to help people fight against internet censorship. - -For now this project focus on defeating [the Great Firewall of China](https://en.wikipedia.org/wiki/Great_Firewall), and thus most documents are provided in Chinese. Internationlization work will be done later. \ No newline at end of file diff --git a/spec/errors.md b/spec/errors.md deleted file mode 100644 index 3ae1a2446..000000000 --- a/spec/errors.md +++ /dev/null @@ -1,37 +0,0 @@ -# 错误信息 - -## 简介 -在日志中可以看到 [Error XXXXXX] 的信息,其中 XXXXXX 表示错误代码,已知的错误代码和解释如下: - - -## 0x0001 Authentication Error -* 原因:未认证用户。 -* 解决:请检查客户端和服务器的用户数据。 - -## 0x0002 Protocol Version Error -* 原因:客户端使用了不正确的协议 -* 解决: - * 如果错误信息为 Invalid version 67 (或 71、80),则表示你的浏览器使用了 HTTP 代理,而 V2Ray 只接受 Socks 代理。 - * 请检查客户端配置。 - -## 0x0003 Corrupted Packet Error -* 原因:网络数据损坏 -* 解决:极有可能你的网络连接被劫持,请更换网络线路或 IP。 - - -## 0x0004 IP Format Error -* 原因:不正确的 IP 地址 -* 解决:请检查客户端软件,如浏览器的配置 - -## 0x0005 Configuration Error -* 原因:配置文件不能正常读取 -* 解决:请检查配置文件是否存在,权限是否合适,内容是否正常 - -## 0x0006 Invalid Operation Error -* 原因:不正确的操作 - - -## 0x03E8 Socks Version 4 -* 原因:客户端使用了 SOCKS 4 协议 -* 解决:升级客户端软件 - diff --git a/spec/guide.md b/spec/guide.md deleted file mode 100644 index 431cb01e6..000000000 --- a/spec/guide.md +++ /dev/null @@ -1,95 +0,0 @@ -# V2Ray 简明教程 - -## 工作机制 - -你需要至少两个 V2Ray Server(设为 A、B)才可以正常穿墙。以网页浏览为例,你的浏览器和 A 以 Socks 5 协议通信,B 和目标网站之间以 HTTP 协议通信,A 和 B 之间使用 V2Ray 的自有协议 [VMess](https://github.com/V2Ray/v2ray-core/blob/master/spec/vmess.md) 通信,如下图: - -![](https://github.com/V2Ray/v2ray-core/blob/master/spec/v2ray.png) - -通常 Server A 运行在你自己的电脑,Server B 运行在一台海外的 VPS 中。 - -## 安装 V2Ray Server -[安装 V2Ray](https://github.com/V2Ray/v2ray-core/blob/master/spec/install.md) - -## 配置 V2Ray Server -### Server A -示例配置保存于 [vpoint_socks_vmess.json](https://github.com/v2ray/v2ray-core/blob/master/release/config/vpoint_socks_vmess.json) 文件中,格式如下: -```javascript -{ - "port": 1080, // 监听端口 - "log" : { - "access": "" // 访问记录,目前只在服务器端有效,这里留空 - }, - "inbound": { - "protocol": "socks", // 传入数据所用协议 - "settings": { - "auth": "noauth", // 认证方式,暂时只支持匿名 - "udp": false, // 如果要使用 UDP 转发,请改成 true - "ip": "127.0.0.1" // 如果 Server A 不是运行在本地,请标明 Server A 的实际 IP 地址,否则 UDP 转发将无法进行。 - } - }, - "outbound": { - "protocol": "vmess", // 中继协议,暂时只有这个 - "settings": { - "vnext": [ - { - "address": "127.0.0.1", // Server B 的 IP 地址,IPv4 或 IPv6,不支持域名 - "port": 27183, // Server B 的监听端口,请更换成其它的值 - "users": [ - // 用户 ID,必须包含在 Server B 的配置文件中。此 ID 将被用于通信的认证,请自行更换随机的 ID,可以使用 https://www.uuidgenerator.net/ 来生成新的 ID。 - {"id": "ad937d9d-6e23-4a5a-ba23-bce5092a7c51"} - ], - "network": "tcp" // 如果要使用 UDP 转发,请改成 "tcp,udp" - } - ] - } - } -} -``` - -### Server B -示例配置保存于 [vpoint_vmess_freedom.json](https://github.com/v2ray/v2ray-core/blob/master/release/config/vpoint_vmess_freedom.json) 文件中,格式如下: -```javascript -{ - "port": 27183, // 监听端口,必须和 Server A 中指定的一致 - "log" : { - "access": "access.log" // 访问记录 - }, - "inbound": { - "protocol": "vmess", // 中继协议,不用改 - "settings": { - "clients": [ - // 认可的用户 ID,必须包含 Server A 中的用户 ID - {"id": "ad937d9d-6e23-4a5a-ba23-bce5092a7c51"} - ], - "udp": false // 如果要使用 UDP 转发,请改成 true - } - }, - "outbound": { - "protocol": "freedom", // 出口协议,不用改 - "settings": {} // 暂无配置 - } -} -``` - -### 其它 -* V2Ray 的用户验证基于时间,请确保 A 和 B 所在机器的系统时间误差在一分钟以内。 -* json 配置文件实际上不支持注释(即“//”之后的部分,在使用时请务必删去)。 - -## 运行 - -Server A - -./server --config="vpoint_socks_vmess.json 的绝对路径" - -Server B - -./server --config="vpoint_vmess_freedom.json 的绝对路径" - -## 测试服务器可用性 - -curl -v --socks5-hostname 127.0.0.1:1080 https://www.google.com/ - -## 调试 - -使用过程中遇到任何问题,请参考[错误信息](https://github.com/V2Ray/v2ray-core/blob/master/spec/errors.md)。 diff --git a/spec/install.md b/spec/install.md deleted file mode 100644 index a7bf88c60..000000000 --- a/spec/install.md +++ /dev/null @@ -1,47 +0,0 @@ -# V2Ray 安装方式 - -## 预编译程序 -发布于 [Release](https://github.com/v2ray/v2ray-core/releases) 中,每周更新,[更新周期见此](https://github.com/V2Ray/v2ray-core/blob/master/spec/roadmap.md)。 - -其中: -* v2ray-linux-32.zip: 适用于 32 位 Linux,各种发行版均可。 -* v2ray-linux-64.zip: 适用于 64 位 Linux,各种发行版均可。 -* v2ray-linux-arm.zip: 适用于 ARMv6 及之后平台的 Linux,如 Raspberry Pi。 -* v2ray-linux-arm64.zip: 适用于 ARMv8 及之后平台的 Linux。 -* v2ray-linux-macos.zip: 适用于 Mac OS X 10.7 以及之后版本。 -* v2ray-windows-32.zip: 适用于 32 位 Windows,Vista 及之后版本。 -* v2ray-windows-64.zip: 适用于 64 位 Windows,Vista 及之后版本。 - -## 编译源文件 - -大概流程,请根据实际情况修改 - -1. 安装 Git: sudo apt-get install git -y -2. 安装 golang: - 1. 下载安装文件: - 1. 64位:curl -o go_latest.tar.gz https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz - 2. 32位:curl -o go_latest.tar.gz https://storage.googleapis.com/golang/go1.5.1.linux-386.tar.gz - 2. sudo tar -C /usr/local -xzf go_latest.tar.gz - 3. export PATH=$PATH:/usr/local/go/bin - 4. export GOPATH=$HOME/work -3. 下载 V2Ray 源文件:go get -u github.com/v2ray/v2ray-core -4. 生成编译脚本:go install github.com/v2ray/v2ray-core/tools/build -5. 编译 V2Ray:$GOPATH/bin/build -6. V2Ray 程序及配置文件会被放在 $GOPATH/bin/v2ray-XXX 文件夹下(XXX 视平台不同而不同) - -### Arch Linux -1. 安装 Git: sudo pacman -S git -2. 安装 golang:sudo pacman -S go - 1. export GOPATH=$HOME/work -3. go get -u github.com/v2ray/v2ray-core -4. go install github.com/v2ray/v2ray-core/tools/build -5. $GOPATH/bin/build - -### Debian / Ubuntu -bash <(curl -s https://raw.githubusercontent.com/v2ray/v2ray-core/master/release/install.sh) - -此脚本会自动安装 git 和 golan 1.5 (如果系统上没有的话,并且需要 root 权限),然后把 v2ray 编译到 $GOPATH/bin/v2ray,新装的 golang 会把 GOPATH 设定到 /v2ray。 - - -## 配置和运行 -[链接](https://github.com/V2Ray/v2ray-core/blob/master/spec/guide.md) diff --git a/spec/issue.md b/spec/issue.md deleted file mode 100644 index f5de0d1b3..000000000 --- a/spec/issue.md +++ /dev/null @@ -1,45 +0,0 @@ -# Issue 指引 - -在新建 Issue 之前请先阅读下面的内容,以提高 Issue 的质量和效率。 - -## 开放分类 -在创建 Issue 的时候可标记为以下分类: - -### Bug -代码的质量问题,可以是功能性(Functionality),稳定性(Reliability)或者性能(Performance)。在 Bug 的内容中请注明下列内容以方便重现: - -* 操作系统:如 Windows 10,Ubuntu 14.04 等,64 位 / 32 位 -* V2Ray 版本:版本号或源码同步日期 -* Golang 版本:如果有的话 -* 问题描述:任何的错误信息,不正常的行为等 -* 日志文件:如果有的话 - -如对软件使用有任何问题也请发到这个类别。 - -请在一个 Issue 中只描述一个问题,如果你遇到多个问题,请分别创建不同的 Issue,以方便讨论和解决。如果合在一起发,将有很高的机率被标记为 Chat 而降低解决问题的优先级。 - -### Chat -聊天或其它相关性不强的内容。标记为 Chat 的 Issue 将在最后回复 7 天后关闭。 - -### Enhancemet -有关新特性的建议,如果是针对现有代码的修改,请详细描述您的建议。 - -## 以下分类仅供管理员使用 -### Announcement -新版本发布、最新动态等公告内容,将于发布之后的 7 日内关闭。。 - -### Duplicate -此 Issue 与之前的某一个 Issue 重复。 - -### Help Wanted -标记为 Help Wanted 的 Issue 接受 Pull Request,一般为新特性的实现,如果您对其中某一个感兴趣,欢迎供献代码。 - -### Invalid -无法重现的 Bug 或没有意义的 Issue。 - -### vLog -用于记录一些 V2Ray 的实现细节,想法等,将于发布之后的 30 日内关闭。 - -### Won't fix -此 Issue 是一个合理的问题,但不影响软件的正常使用,故不修复。 - diff --git a/spec/roadmap.md b/spec/roadmap.md deleted file mode 100644 index bfe160b81..000000000 --- a/spec/roadmap.md +++ /dev/null @@ -1,8 +0,0 @@ -# V2Ray 开发计划 - -## 版本号 -V2Ray 的版本号形如 X.Y.Z,其中 X 表示 Milestone,Y 表示 Release,如 2.3 表示第二个 Milestone 的第三个 Release;Z 仅作为修复紧急 Bug 之后的发布使用,一般不出现。 - -## 周期 -V2Ray 将在每周一发布一个 [Release](https://github.com/v2ray/v2ray-core/releases),每 12 周左右完成一个 Milestone。 - diff --git a/spec/status.md b/spec/status.md deleted file mode 100644 index 515891bd0..000000000 --- a/spec/status.md +++ /dev/null @@ -1,53 +0,0 @@ -# 当前状态 - -**注释** -* S:接近完美 -* A:稳定可用 -* B:默认开启,还在测试期,可能有各种问题 -* C:需要手动开启 -* D:正在调试期,暂不可用 -* E:计划中,欢迎 Pull Request - -**概况** - -| 功能 | 状态 | 备注 | -| --------- | ---- | ---- | -| 多用户支持 | B | | -| 多服务器支持 | B | | -| 负载均衡 | E | | -| 多种加密方式 | E | 暂时只支持 AES-128 | -| 选择性路由 | E | | -| 自定义 DNS 解析 | E | | - -**平台支持** - -| 平台 | 状态 | 备注 | -| --------- | ---- | ---- | -| golang 编译 | A | | -| Windows | B | | -| Mac OS | B | | -| Ubuntu | B | 尚不支持 apt-get 安装 | -| Redhat | B | 尚不支持 yum 安装 | -| OpenWRT | E | | - -**Socks 5 协议** - -| 功能 | 状态 | 备注 | -| --------- | ---- | ---- | -| TCP 连接 | A | | -| UDP 连接 | C | [Issue #3](https://github.com/v2ray/v2ray-core/issues/3) | -| FTP 支持 | E | [Issue #2](https://github.com/v2ray/v2ray-core/issues/2) | - -**[VMess 协议](https://github.com/V2Ray/v2ray-core/blob/master/spec/vmess.md)** - -| 功能 | 状态 | 备注 | -| --------- | ---- | ---- | -| 单一连接 | A | | -| 连接复用 | E | | - -**ShadowSocks 协议** - -| 功能 | 状态 | 备注 | -| --------- | ---- | ---- | -| 单一连接 | E | | - diff --git a/spec/v2ray.png b/spec/v2ray.png deleted file mode 100644 index 83b03c67a..000000000 Binary files a/spec/v2ray.png and /dev/null differ diff --git a/spec/v2ray_design.png b/spec/v2ray_design.png deleted file mode 100644 index d2845c178..000000000 Binary files a/spec/v2ray_design.png and /dev/null differ diff --git a/spec/vmess.md b/spec/vmess.md deleted file mode 100644 index a8092602f..000000000 --- a/spec/vmess.md +++ /dev/null @@ -1,62 +0,0 @@ -# VMess 设计 -## 摘要 -* 版本:1 - -## 格式 -### 数据请求 -认证部分: -* 16 字节:基于时间的 hash(用户 ID),见下文 - -指令部分: -* 1 字节:版本号,目前为 0x1 -* 16 字节:请求数据 IV -* 16 字节:请求数据 Key -* 4 字节:认证信息 V -* 1 字节:指令 - * 0x00:保留 - * 0x01:TCP 请求 - * 0x02:UDP 请求 -* 2 字节:目标端口 -* 1 字节:目标类型 - * 0x01:IPv4 - * 0x02:域名 - * 0x03:IPv6 -* 目标地址: - * 4 字节:IPv4 - * 1 字节长度 + 域名 - * 16 字节:IPv6 -* 4 字节:指令部分前面所有内容的 FNV1a hash - -数据部分 -* N 字节:请求数据 - -其中指令部分经过 AES-128-CFB 加密: -* Key:md5(用户 ID + 'c48619fe-8f02-49e0-b9e9-edf763e17e21') -* IV:md5(X + X + X + X),X = []byte(UserHash 生成的时间) (8 字节, Big Endian) - -数据部分使用 AES-128-CFB 加密,Key 和 IV 在请求数据中 - -### 数据应答 -数据部分 -* 4 字节:认证信息 V -* N 字节:应答数据 - -其中数据部分使用 AES-128-CFB 加密,IV 为 md5(请求数据 IV),Key 为 md5(请求数据 Key) - -## 用户 ID -ID 等价于 [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier),是一个 16 字节长的随机数,它的作用相当于一个令牌(Token)。 - -一个 ID 形如:de305d54-75b4-431b-adb2-eb6b9e546014,几乎完全随机,可以使用任何的 UUID 生成器来生成,比如[这个](https://www.uuidgenerator.net/)。 - -ID 在消息传递过程中用于验证客户端的有效性,只有当服务器认可当前 ID 时,才进行后续操作,否则关闭连接甚至加入黑名单。 - -在多用户环境中,用户帐号应与 ID 分开存放,即用户帐号和 ID 有一对一或一对多的关系,在 V2Ray Server 中,只负责管理 ID,用户帐号(及权限、费用等)由另外的系统管理。 - -在后续版本中,V2Ray Server 之间应有能力进行沟通而生成新的临时 ID,从而减少通讯的可探测性。 - -## 基于时间的用户 ID Hash - -* H = MD5 -* K = 用户 ID (16 字节) -* M = UTC 时间,精确到秒,取值为当前时间的前后 30 秒随机值(8 字节, Big Endian) -* Hash = HMAC(H, K, M)