V2ray 是继 ShadowSocks 后又一个蓬勃发展、欣欣向荣的代理利器,目前支持多种传输协议。现在可以使用它设置 MTProto 协议,搭建 Telegram 的内部代理服务器,实现无需打开其他突破网络封锁的客户端即可正常通讯的目的。
v2ray 的代理原理和配置项的关系如下图:
p.s.上图为 v2ray v4.0 之前的代理原理图。v2ray v4.1+ 合并了输入输出配置项:
inbounds = inbound + inboundDetour
outbounds = outbound + outboundDetour
- 为便于理解,你可以将上图
inbound
、inboundDetour
视为各种不同的代理方式,全部定义在新版配置文件的 inbounds
配置项中,outbounds
亦同理。
v2ray 的的配置格式都是相同的,理论上不区分客户端和服务端,客户端和服务器通用一种形式,只是实际的配置不一样。
v2ray 配置文件的配置项有以下几个部分:
{
"log": {},
"api": {},
"dns": {},
"stats": {},
"routing": {},
"policy": {},
"reverse": {},
"inbounds": [],
"outbounds": [],
"transport": {}
}
我们重点关注其中传入、传出和路由配置,即:inbounds
、outbounds
、routing
。
inbounds
和 outbounds
定义多种不同的传入、传出方式。
- 自定义不同的传入和传出方式,然后用路由(
routing
)进行绑定,就可以实现定制化代理。
下面举几个栗子:
- 仅用来突破网络封锁:客户端
outbounds
设置一个 VMess 协议传出、服务端 inbounds
设置一个 VMess 协议传入,服务端 outbounds
设置一个 freedom 方式传出。这样,客户端与服务端将使用 VMess 协议加密流量突破网络封锁,而服务端访问被封锁网站没有特殊加密,使用正常网络传输协议。
- 服务端配置其他的传入、传出协议实现不同于的传输需求。比如服务端添加一组 MTProto 协议对应的传入、传出方式,即可以使用 Telegram 内部代理。或者使用 shadowsocks 协议传入,再用 vmess 协议传出给下一个服务端,实现多级代理等等。
- 多种传入、传出方式可以共存,打上标签(
tag
)以后,用路由(routing
)实现自由绑定,所以仅使用 v2ray 就可实现多种方式的传输需求,比如同时支持 VMess、Shadowsocks、MTProto、Socks 协议进行通讯。v2ray 支持多种协议,发挥你的创造性去使用吧。
v2ray 的官方手册提供了不完整的样例配置
1
2
3
4
5
6
7
8
9
10
|
"inbounds": [
{
"tag": "tg-in",
"port": 443,
"protocol": "mtproto",
"settings": {
"users": [{"secret": "b0cbcef5a486d9636472ac27f8e11a9d"}]
}
}
]
|
传出代理:
1
2
3
4
5
6
7
|
"outbounds": [
{
"tag": "tg-out",
"protocol": "mtproto",
"settings": {}
}
]
|
路由:
1
2
3
4
5
6
7
8
9
10
11
|
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"tg-in"
],
"outboundTag": "tg-out"
}
]
}
|
这里提供一个主要使用 VMess 协议突破网络封锁,额外支持 MTProto 协议实现 Telegram 内部代理的配置文件,其中:
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
|
{
"inbounds": [
{
"port": 填写 VMess 协议监听端口,
,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "填写UUID,不要去掉引号",
"level": 1,
"alterId": 64
}
]
}
},
{
"tag": "tg-in",
"listen": "0.0.0.0",
"port": 填写 MTProto 协议监听端口,
"protocol": "mtproto",
"settings": {
"users": [
{
"secret": "填写用户密钥,不要去掉引号"
}
]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
},
{
"tag": "tg-out",
"protocol": "mtproto",
"settings": {}
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "blocked"
},
{
"type": "field",
"inboundTag": [
"tg-in"
],
"outboundTag": "tg-out"
}
]
}
}
|
将服务器的 IP 地址、配置的 MTProto 协议监听端口、用户密钥填入 Telegram 的代理设置中即可使用。或者使用构造链接在 Telegram 内部打开进行自动设置:
https://t.me/proxy?server=服务器IP地址&port=服务器MTProto协议监听端口&secret=用户密钥
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
|
{
"inbounds": [
{
"port": 1082,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false,
"ip": "127.0.0.1"
}
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"users": [
{
"alterId": 64,
"security": "auto",
"id": "填写 UUID 与服务端一致,不要去掉引号"
}
],
"port": 服务端 VMess 协议监听端口,
"address": "服务端 IP 地址,可以去掉引号",
}
]
}
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
}
]
},
"log": {
"loglevel": "warning"
}
}
|
参考链接:
v2ray 配置文件格式
让 Telegram 连接 V2ray 服务端 mtproxy 协议