From 26187230a7e022d7f0bca4bee6ee8f588012d2d4 Mon Sep 17 00:00:00 2001 From: V2Ray Date: Tue, 15 Sep 2015 12:04:18 +0200 Subject: [PATCH] simple guide --- README.md | 3 ++ spec/guide.md | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ spec/install.md | 13 ------- spec/v2ray.png | Bin 0 -> 10977 bytes 4 files changed, 97 insertions(+), 13 deletions(-) create mode 100644 spec/guide.md create mode 100644 spec/v2ray.png diff --git a/README.md b/README.md index 077891c4..c317cb4d 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ V2Ray 是一个翻墙工具包,用于简化和复用其它翻墙工具,加 * 支持多用户 * 开放协议支持,兼容 ShadowSocks 和 GoAgent +## 简明教程 +[链接](https://github.com/V2Ray/v2ray-core/blob/master/spec/guide.md) + ## 概要设计 [链接](https://github.com/V2Ray/v2ray-core/blob/master/spec/design.md) diff --git a/spec/guide.md b/spec/guide.md new file mode 100644 index 00000000..176aa00f --- /dev/null +++ b/spec/guide.md @@ -0,0 +1,94 @@ +# V2Ray 简明教程 + +## 工作机制 + +你需要至少两个 Point 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) + +通常 Point A 运行在你自己的电脑,Point B 运行在一台海外的 VPS 中。 + +## 安装 V2Ray Point Server +[安装 V2Ray](https://github.com/V2Ray/v2ray-core/blob/master/spec/install.md) + +## 配置 V2Ray Point Server +### Point A +示例配置保存于 vpoint_socks_vmess.json 文件中,格式如下: +```javascript +{ + "port": 1080, // 监听端口 + "inbound": { + "protocol": "socks", // 传入数据所用协议 + "file": "in_socks.json" // socks 配置文件 + }, + "outbound": { + "protocol": "vmess", // 中继协议 + "file": "out_vmess.json" // vmess 配置文件 + } +} +``` + +另外还需要两个文件,保存于同一文件夹下: + +```javascript +// in_socks.json +{ + "auth": "noauth" // 认证方式,暂时只支持匿名 +} +``` + +```javascript +// out_vmess.json +{ + "vnext": [ + { + "address": "127.0.0.1", // Point B 的 IP 地址 + "port": 27183, // Point B 的监听端口 + "users": [ + {"id": "ad937d9d-6e23-4a5a-ba23-bce5092a7c51"} // 用户 ID,必须包含在 Point B 的配置文件中 + ] + } + ] +} +``` + +### Point B +示例配置保存于 vpoint_vmess_freedom.json 文件中,格式如下: +```javascript +{ + "port": 27183, // 监听端口 + "inbound": { + "protocol": "vmess", // 中继协议 + "file": "in_vmess.json" // vmess 配置文件 + }, + "outbound": { + "protocol": "freedom", // 出口协议,暂时只有这一个,不用改 + "file": "" // 暂无配置 + } +} +``` + +另外还需要 in_vmess.json: +```javascript +// in_vmess.json +{ + "clients": [ + {"id": "ad937d9d-6e23-4a5a-ba23-bce5092a7c51"} // 认可的用户 ID + ] +} +``` + +## 运行 + +Point Server A + +./server --config="vpoint_socks_vmess.json 的绝对路径" + +Point Server B + +./server --config="vpoint_vmess_freedom.json 的绝对路径" + +## 测试服务器可用性: + +curl -v --socks5-hostname 127.0.0.1:1080 https://www.google.com/ + diff --git a/spec/install.md b/spec/install.md index 62491162..78f06b97 100644 --- a/spec/install.md +++ b/spec/install.md @@ -12,17 +12,4 @@ 5. go get github.com/v2ray/v2ray-core 6. go build github.com/v2ray/v2ray-core/release/server -## 运行 - -Socks 5 转发 VMess: - -./server --config=$HOME/work/src/github.com/v2ray/v2ray-core/release/config/vpoint_socks_vmess.json - -VMess 转发最终网站: - -./server --config=$HOME/work/src/github.com/v2ray/v2ray-core/release/config/vpoint_vmess_freedom.json - -测试服务器可用性: - -curl -v --socks5-hostname 127.0.0.1:1080 https://www.google.com/ diff --git a/spec/v2ray.png b/spec/v2ray.png new file mode 100644 index 0000000000000000000000000000000000000000..1f39994e2c8cff51fee8435e53b98281b160405a GIT binary patch literal 10977 zcmd6NcT`hP|7Jo7H6Xo%NEHIorGp?MU6B%`h28>4@4ZPEklvd}4;?{)fHY|;Ep!0^ zfruczg$>_#-?P6x=eN7({cmUH%$@tp^ZCp(b7yYu&7Ih1+Nxk;Mq&T}09JeYSQh}m zMF0T6I6_=3g2Q4;iOs)0)6`SZba2BW|6c_l5cnVI!NJAFnqUJV5iu#43~LJl5#ZtB zVG9h*Y&bYLlvFhTa)>QsX^JZ9a!RV$0v5#PqLQ-YcPOxBJUo1Cj*kz*=0wEA*eYzm zmj4y7w%7s|;pP*-#mC1sN<~deKtPD)i$0VQk&wnB#3UqQQgQ@@L@aFV|FXhL!WJM8 zMDYo*l5VZArySh(8JJkHh7!^W3Xj#8+1P=&xL6t3Dr_rQ4%RIRDJd4jB9GN|NJzn0 z_$~(*%iViIVv_eELRkNL#+GdNII#q3T6$_4I&6RMP*PD)Q40u*{UaPm&&Z4=V+j*$ zhuAzkDa+o?pOKk0x3X1R-x#a2Wng-A`4280-tfXMh=8zv_E+!J&yQn^*j|9i$f;=P z>bu7pd%wMJ>-P$c<>41hEvhlLax$}XrDI^SaCEQk9Bv;*MWy6*fBlhN(R7!C+r=+j zSX}C%?4w7jnpmk=Jx*T130Y;n5s9kWdeVw2HZI=DdGAXQU9Z!N1VqFOYCF

-hvl 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