index.html

V2Ray 全套配置

Word count: 2kReading time: 9 min
2018/09/16 Share

Project V 是一款功能强大的路由、代理工具,可以按照规则方便地对流量进行过滤、导向。
它可以做到:

  • 多端口多协议监听
  • 动态端口通讯
  • 多协议上游代理
  • 上游代理负载均衡
  • 多用户配置
  • 按照域名、IP、协议、用户等规则进行路由/屏蔽
  • 多路复用
  • 支持API
  • 支持TCP/KCP/Websocket/HTTP等传输方式
  • 支持订阅

详情请见Project V 官方网站

官方已经给出了详细的配置文档,并且有一份白话文教程,所以本文不再赘述各种模块的配置。(撰写本文的目的绝不是为了阻止 我的木头脑袋过段时间又忘了配置方法然后又要满世界找教程 这种事情发生。)

方案简介

境外代理服务器上的Project V监听本地Websocket,通过nginx将访问domain.com/v2ray_ws的https流量转发到本地V2Ray服务。
国内的中转服务器同样使用Project V中转,通过TCP动态端口向客户端提供服务。
见下图

代理服务器配置

代理服务器上的配置很简单,只需要无脑的把流量通过freedom发出去就可以了。
因为流量是通过nginx转发来的,所以安全起见只监听127.0.0.1。
path可以设置为/assets/files或者/phpMyAdmin等。

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
{
"log": {
"loglevel": "warning"
},
/* 监听nginx传入本地1984端口的流量 */
"inbound": {
"port": 1984,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "version-1-UUID can be generated at www.uuidgenerator.net/version1",
"alterId": 64,
"email": "[email protected]"
}
],
"disableInsecureEncryption": true
},
/* 设置WebSocket */
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/v2ray_ws"
}
}
},
/* 出口设置为Freedom */
"outbound": {
"protocol": "freedom",
"settings": {}
}
}

下面是第一台服务器(v1.domain.com)上nginx的配置样例。
location与Project V上path一致。

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
# Websocket
server {
listen 80;
listen [::]:80;
server_name v1.domain.com;
location /v2ray_ws {
proxy_redirect off;
proxy_pass http://127.0.0.1:1984;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}

# Websocket with TLS
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl on;
ssl_certificate /etc/path_to_cert/domain.com/fullchain.pem;
ssl_certificate_key /etc/path_to_cert/live/domain.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name v1.domain.com;
location /v2ray_ws {
proxy_redirect off;
proxy_pass http://127.0.0.1:1984;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}

中转服务器配置

国内中转机上的Project V配置如下。
其中服务端口为1984,通过范围在1234-5678的动态端口以TCP方式与客户端通信。这里我认为没有必要使用nginx反代,我觉得国内机器本身不会被封,所以没有必要做这种伪装。
若客户端使用的用户为[email protected],则流量路由至v1上游代理;若用户为[email protected],则流量路由至v2上游代理;如果用户为[email protected],则流量通过这台中转服务器代理,起到国内加速作用。
在中转这里通过https连接代理v1,用http连接代理v2,这两种方式除端口外唯一的区别是"security": "tls"这项参数。

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
{
"log": {
"loglevel": "warning"
},
/* 为VMess传入定义三个用户,之后路由分流会用到 */
"inbound": {
"port": 1984,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "version-1-UUID",
"alterId": 64,
"email": "[email protected]"
},
{
"id": "version-1-UUID",
"alterId": 64,
"email": "[email protected]"
},
{
"id": "version-1-UUID",
"alterId": 64,
"email": "[email protected]"
}
],
"disableInsecureEncryption": true,
/* 使用动态端口与客户端通信 */
"detour": {
"to": "dynamicPort"
}
}
},
"inboundDetour": [
/* 额外传入配置,服务于上文设置的动态端口 */
{
"protocol": "vmess",
"port": "1234-5678",
"tag": "dynamicPort",
"settings": {
"default": {
"level": 1,
"alterId": 32
}
},
"allocate": {
"strategy": "random",
"concurrency": 4,
"refresh": 3
}
}
],
/* 默认用户直接传出,加速 */
"outbound": {
"protocol": "freedom",
"settings": {}
},
"outboundDetour": [
/* 代理服务器1传出设置 */
{
"protocol": "vmess",
"mux": {
"enabled": true
},
"settings": {
"vnext": [
{
"address": "v1.domain.com",
"port": 443,
"users": [
{
"id": "version-1-UUID of V2Ray in v1.domain.com",
"alterId": 64,
"security": "auto"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"wsSettings": {
"path": "/v2ray_ws"
}
},
"tag": "vmess_0"
},
/* 代理服务器2传出配置 */
{
"protocol": "vmess",
"mux": {
"enabled": true
},
"settings": {
"vnext": [
{
"address": "v2.domain.com",
"port": 80,
"users": [
{
"id": "version-1-UUID of V2Ray in v2.domain.com",
"alterId": 64,
"security": "auto"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/v2ray_ws"
}
},
"tag": "vmess_1"
}
],
"routing": {
"strategy": "rules",
"settings": {
/* 按照接入的用户不同分配到不同的服务器,若用户为[email protected]则通过该中转直连(加速) */
"rules": [
{
"type": "field",
"user": "[email protected]",
"outboundTag": "vmess_0"
},
{
"type": "field",
"user": "[email protected]",
"outboundTag": "vmess_1"
}
]
}
}
}

中转服务器也可以通过socat、HaProxy或iptables进行无脑转发,这样客户端只要依墙外代理服务器信息填写即可,但这样国内中转就没法做加速服务器使用,也没有办法实现在中转处分流或过滤。
如果使用nginx转发TCP流量,可以在/etc/nginx/nginx.conf中添加以下配置。
关于stream的更多参数可见官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
stream {
#v2ray-1
server {
listen 19840;
proxy_pass v1.domain.com:1984;
proxy_connect_timeout 10s;
}
#v2ray-2
server {
listen 19841;
proxy_pass v2.domain.com:1984;
proxy_connect_timeout 10s;
}
}

客户端配置

以下为客户端配置。
通过inboundDetour可以同时监听端口1081(SOCKS5)和端口1082(HTTP),并支持iptables透明代理的传入流量(端口10800),若有需要还可以追加。
假设本地还有SS客户端监听1080,SSR客户端监听1084,也可通过Project V按规则将流量路由至本地代理。

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
{
"log":{
"loglevel":"warning"
},
/* 默认传入监听1081 socks5 */
"inbound":{
"protocol":"socks",
"port":1081,
"listen":"0.0.0.0", // 允许局域网流量
"settings":{
"auth":"noauth",
"udp":true,
"ip":"127.0.0.1"
}
},
"inboundDetour":[
/* 监听1082 HTTP */
{
"protocol":"http",
"port":1082,
"listen":"0.0.0.0", // 允许局域网流量
"settings":{

}
},
/* 监听10800 iptables透明代理 */
{
"protocol":"dokodemo-door",
"port":10800,
"listen":"0.0.0.0",
"settings":{
"network":"tcp,udp",
"timeout":30,
"followRedirect":true
}
}
],
/* 默认传出规则,使用用户1连接中转服务器,流量通过代理服务器1 */
"outbound":{
"tag":"proxied",
"protocol":"vmess",
"mux":{
"enabled":true,
"concurrency":8
},
"settings":{
"vnext":[
{
"address":"bounce.domain.com",
"port":1984,
"users":[
{
"id":"version-1-UUID of [email protected] in bounce server",
"alterId":64,
"security":"auto"
}
]
}
]
}
},
"outboundDetour":[
/* 额外传出规则:直连 */
{
"protocol":"freedom",
"settings":{

},
"tag":"direct"
},
/* 额外传出规则:阻断 */
{
"protocol":"blackhole",
"tag":"block"
},
/* 额外传出规则:使用用户2连接中转服务器,流量通过代理服务器2 */
{
"tag":"backup-v2ray",
"protocol":"vmess",
"mux":{
"enabled":true,
"concurrency":8
},
"settings":{
"vnext":[
{
"address":"bounce.domain.com",
"port":1984,
"users":[
{
"id":"version-1-UUID of [email protected] in bounce server",
"alterId":64,
"security":"auto"
}
]
}
]
}
},
/* 额外传出规则:通过用户[email protected]连接中转,流量通过中转服务直连 */
{
"tag":"speedup",
"protocol":"vmess",
/* 开启Mux */
"mux":{
"enabled":true,
"concurrency":8
},
"settings":{
"vnext":[
{
"address":"bounce.domain.com",
"port":1984,
"users":[
{
"id":"version-1-UUID of [email protected] in bounce server",
"alterId":64,
"security":"auto"
}
]
}
]
}
},
/* 额外传出规则:使用本地SSR代理 */
{
"tag":"ssr-local",
"protocol":"socks",
"settings":{
"servers":[
{
"address":"127.0.0.1",
"port":1084
}
]
}
},
/* 额外传出规则:使用本地SS代理 */
{
"tag":"ss-local",
"protocol":"socks",
"settings":{
"servers":[
{
"address":"127.0.0.1",
"port":1080
}
]
}
}
],
/* 路由规则 */
"routing":{
"strategy":"rules",
"settings":{
"domainStrategy":"AsIs",
"rules":[
/* 以下域名强行代理 */
{
"type":"field",
"ip":null, // 如果填入了ip和domain,意为匹配域名且IP都同时在列表中的目标
"domain":[
"domain:proxied.domain.com", // `domain:`表示匹配域名及其子域名
"domain:another.proxied.domain.moe"
],
"outboundTag":"proxied"
},
/* DNS直连 */
{
"type":"field",
"port":53,
"network":"udp",
"outboundTag":"direct"
},
/* 以下域名屏蔽(可配置去广告) */
{
"type":"field",
"domain":[
"domain:block.example.com"
],
"outboundTag":"block"
},
/* 以下IP地址直连 */
{
"type":"field",
"ip":[
"geoip:private", // 局域网私有地址
"geoip:cn" // 中国大陆IP
]
"outboundTag":"direct"
},
/* 以下域名直连 */
{
"type":"field",
"domain":[
"geosite:cn", // 中国大陆网站
"geosite:speedtest", //Speedtest服务器
"domain:direct.example.com"
],
"outboundTag":"direct"
},
/* 以下域名通过代理加速访问 */
{
"type":"field",
"domain":[
"domain:speedup.example.com"
],
"outboundTag":"speedup"
},
/* 以下域名通过本地SSR访问 */
{
"type":"field",
"domain":[
"domain:proxied-by-ssr.example.com"
],
"outboundTag":"ssr-local"
},
/* 以下域名通过本地SS访问 */
{
"type":"field",
"domain":[
"domain:proxied-by-ss.example.com"
],
"outboundTag":"ss-local"
}
]
}
}
}


EOF

CATALOG
  1. 1. 方案简介
  2. 2. 代理服务器配置
  3. 3. 中转服务器配置
  4. 4. 客户端配置