先说感受吧:内容太多了,发现把所有的协议看下来没什么意义,就抓住其中几个协议,比如socks和vmess(vless还没看),谨记:vps服务器端的v2ray的inbounds接受来自其他客户端(可能是某台PC上的V2ray 、可能是某台手机上的支持v2ray的vpn客户端)的请求。
主要参考这个文章
outbound/outboundDetour 传出配置: outbound与outboundDetour都是传出配置,即客户端使用,区别是outbound是唯一的主传出配置接口,outboundDetour可以使用多个传出方式。
v2ray多文件配置参考这里
启动时可以使用-config指定配置文件,或者使用简写-c也可以。如:
./v2ray -config server.json 或者: ./v2ray -c server.json
如果有多个文件的话 ,可以多次指定配置文件,或者把文件放到一个文件夹内,然后用-confdir指定这个文件夹,程序会按文件名顺序读取目录内的 .json文件
多次指定配置文件: ./v2ray -c base.json -c vmess.json -c http.json -c socks.json
或者指定一个配置文件的文件夹: ./v2ray -confdir ./conf/
v2ray配置文件格式:
{
"log": {},
"api": {},
"dns": {},
"routing": {},
"policy": {},
"inbounds": [],
"outbounds": [],
"transport": {},
"stats": {},
"reverse": {},
"fakedns": [],
"browserForwarder": {},
"observatory": {}
}
入站连接用于接收从客户端(浏览器或上一级代理服务器)发来的数据,可用的协议请见协议列表。
InboundObject 对应配置文件中 inbounds 项的一个子元素
{
"listen": "127.0.0.1",
"port": 1080,
"protocol": "协议名称",
"settings": {},
"streamSettings": {},
"tag": "标识",
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
],
"metadataOnly": false
},
"allocate": {
"strategy": "always",
"refresh": 5,
"concurrency": 3
}
}
在配置文件中应该这么配置inbounds:
{
"inbounds": [InboundObject1,InboundObject2]
}
listen
: address: 监听地址,只允许 IP 地址,默认值为 "0.0.0.0"
,表示接收所有网卡上的连接。除此之外,必须指定一个现有网卡的地址port
: number | "env:variable" | string: 端口 :- 整型数值:实际的端口号。
- 环境变量:以
"env:"
开头,后面是一个环境变量的名称,如"env:PORT"
。V2Ray 会以字符串形式解析这个环境变量。 - 字符串:可以是一个数值类型的字符串,如
"1234"
;或者一个数值范围,如"5-10"
表示端口 5 到端口 10,这 6 个端口。
当只有一个端口时,V2Ray 会在此端口监听入站连接。当指定了一个端口范围时,取决于 allocate
设置
protocol
: string: 连接协议名称,可选的值见协议列表。settings
: InboundConfigurationObject :具体的配置内容,视协议不同而不同。详见每个协议中的 InboundConfigurationObject
tag
: string:此入站连接的标识,用于在其它的配置中定位此连接。当其不为空时,其值必须在所有 tag
中唯一所以一个完整的Inbounds应该是:
{
"inbounds": [
{
"listen": "127.0.0.1", //监听地址,只允许 IP 地址,默认值为 "0.0.0.0",表示接收所有网卡上的连接
"port": 1080,
"protocol": "协议名称", //连接协议名称,可选的值见协议列表
"settings": {},//协议具体的配置内容,详见每个协议中的 InboundConfigurationObject
"streamSettings": { //底层传输配置
},
"tag": "标识", //此入站连接的标识,用于在其它的配置中定位此连接
"sniffing": { //尝试探测流量的类型
"enabled": true, //是否开启流量探测。
"destOverride": [ //当流量为指定类型时,按其中包括的目标地址重置当前连接的目标
"http",
"tls"
],
"metadataOnly": false
},
"allocate": { //端口分配设置
"strategy": "always", //端口分配策略
"refresh": 5, //随机端口刷新间隔,单位为分钟
"concurrency": 3 //随机端口数量,最小为 1,最大值为port范围的三分之一。建议值为 3
}
}
]
}
出站连接用于向远程网站或下一级代理服务器发送数据,可用的协议请见协议列表
OutboundObject 对应配置文件中 outbounds 项的一个子元素。
{
"sendThrough": "0.0.0.0",
"protocol": "协议名称",
"settings": {},
"tag": "标识",
"streamSettings": {},
"proxySettings": {
"tag": "another-outbound-tag",
"transportLayer": false
},
"mux": {}
}
sendThrough
: address: 用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 "0.0.0.0"
protocol
: string:连接协议名称,可选的值见协议列表。settings
: OutboundConfigurationObject:具体的配置内容,视协议不同而不同。详见每个协议中的 OutboundConfigurationObject
。tag
: string:此出站连接的标识,用于在其它的配置中定位此连接。当其值不为空时,必须在所有 tag 中唯一。一个完整的outbounds配置是:
{
"outbounds": [
{
"sendThrough": "0.0.0.0", //用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 "0.0.0.0"
"protocol": "协议名称", //连接协议名称,可选的值见协议列表
"settings": {}, //具体的配置内容,视协议不同而不同。详见每个协议中的 OutboundConfigurationObject
"tag": "标识",
"streamSettings": {
},
"proxySettings": { //出站代理配置。当出站代理生效时,此出站协议的 streamSettings 将不起作用
"tag": "another-outbound-tag",
"transportLayer": false
},
"mux": {}
}
]
}
V2Ray 内建了一个路由模块,可以将入站数据按需求由不同的出站连接发出,以达到按需代理的目的。这一功能的常见用法是分流国内外流量。V2Ray 可以通过内部机制判断不同国家或地区的流量,然后将它们发送到不同的出站代理
RoutingObject:
RoutingObject
对应配置文件的 routing
项。{
"domainStrategy": "AsIs",
"domainMatcher": "mph",
"rules": [],
"balancers": []
}
domainStrategy
: "AsIs" | "IPIfNonMatch" | "IPOnDemand": 域名解析策略。AsIs
:只使用域名进行路由选择,默认值;IPIfNonMatch
:当域名没有匹配任何基于域名的规则时,将域名解析成 IP(A 记录或 AAAA 记录),进行基于 IP 规则的匹配;- 当一个域名有多个 IP 地址时,会尝试匹配所有的 IP 地址,直到其中一个与某个 IP 规则匹配为止;
- 解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名。
IPOnDemand
:当匹配时碰到任何基于 IP 的规则,立即将域名解析为 IP 进行匹配。
domainMatcher
: "linear" | "mph": 选择要使用的域名匹配算法。linear
:使用线性匹配算法,默认值;mph
:使用最小完美散列(minimal perfect hash)算法(v4.36.1+)。- 测试数据约 17 万条,匹配速度提升约 30%,内存占用减少约 15%
rules
: [RuleObject]: 对应一个数组,数组中每一项是一个规则。对于每一个连接,路由将根据这些规则依次进行判断,当一个规则生效时,即将这个连接转发至它所指定的 outboundTag
(或 balancerTag
,V2Ray 4.4+)。当没有匹配到任何规则时,流量默认被转发至第一个 outbound
。balancers
: [ BalancerObject ] : (V2Ray 4.4+)一个数组,数组中每一项是一个负载均衡器的配置。当一个规则指向一个负载均衡器时,V2Ray 会通过此负载均衡器选出一个 outbound
,然后由它转发流量RuleObject:
{
"domainMatcher": "mph",
"type": "field",
"domains": [
"baidu.com",
"qq.com",
"geosite:cn",
"ext:customizedGeoSiteFile.dat:cn"
],
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"fc00::/7",
"fe80::/10",
"geoip:cn",
"geoip:!cn",
"ext:customizedGeoIPFile.dat:cn",
"ext:customizedGeoIPFile.dat:!cn",
"ext-ip:customizedGeoIPFile.dat:cn",
"ext-ip:customizedGeoIPFile.dat:!cn"
],
"port": "53,443,1000-2000",
"sourcePort": "53,443,1000-2000",
"network": "tcp",
"source": [
"10.0.0.1"
],
"user": [
"love@v2ray.com"
],
"inboundTag": [
"tag-vmess"
],
"protocol": [
"http",
"tls",
"bittorrent"
],
"attrs": "attrs[':method'] == 'GET'",
"outboundTag": "direct",
"balancerTag": "balancer"
}
balancerTag
: string: 对应一个负载均衡器的标识。balancerTag
和 outboundTag
须二选一。当同时指定时,outboundTag
生效v2ray协议列表
- 名称:
blackhole
- 类型:出站协议
- 名称:
vmess
- 类型:入站 / 出站
VMess 是一个加密传输协议,它分为入站和出站两部分,通常作为 V2Ray 客户端和服务器之间的桥梁。
VMess 依赖于系统时间,请确保使用 V2Ray 的系统 UTC 时间误差在 90 秒之内,时区无关。在 Linux 系统中可以安装ntp
服务来自动同步系统时间。
VMess 的配置分为两部分,InboundConfigurationObject
和OutboundConfigurationObject
,分别对应入站和出站协议配置中的settings
项
OutboundConfigurationObject
{
"vnext": [
{
"address": "127.0.0.1",
"port": 37192,
"users": [
{
"id": "27848739-7e62-4138-9fd3-098a63964b6b",
"alterId": 0,
"security": "auto",
"level": 0
}
]
}
]
}
InboundConfigurationObject
{
"clients": [
{
"id": "27848739-7e62-4138-9fd3-098a63964b6b",
"level": 0,
"alterId": 0,
"email": "love@v2ray.com"
}
],
"default": {
"level": 0,
"alterId": 0
},
"detour": {
"to": "tag_to_detour"
},
"disableInsecureEncryption": false
}