v2ray配置

先说感受吧:内容太多了,发现把所有的协议看下来没什么意义,就抓住其中几个协议,比如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
streamSettingsStreamSettingsObject:底层传输配置
tag: string:此入站连接的标识,用于在其它的配置中定位此连接。当其不为空时,其值必须在所有 tag 中唯一
sniffingSniffingObject尝试探测流量的类型
allocateAllocateObject端口分配设置


所以一个完整的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 中唯一。
streamSettingsStreamSettingsObject:底层传输配置
proxySettingsProxySettingsObject出站代理配置。当出站代理生效时,此出站协议的 streamSettings 将不起作用。

一个完整的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"
}
outboundTag: string: 对应一个额外 出站连接配置 的标识

balancerTag: string: 对应一个负载均衡器的标识。balancerTag 和 outboundTag 须二选一。当同时指定时,outboundTag 生效





v2ray协议列表
  • 名称:blackhole
  • 类型:出站协议
Blackhole(黑洞)是一个出站数据协议,它会阻碍所有数据的出站,配合 路由(Routing) 一起使用,可以达到禁止访问某些网站的效果.

  • 名称:vmess
  • 类型:入站 / 出站

VMess 是一个加密传输协议,它分为入站和出站两部分,通常作为 V2Ray 客户端和服务器之间的桥梁。

VMess 依赖于系统时间,请确保使用 V2Ray 的系统 UTC 时间误差在 90 秒之内,时区无关。在 Linux 系统中可以安装ntp服务来自动同步系统时间。

VMess 的配置分为两部分,InboundConfigurationObjectOutboundConfigurationObject,分别对应入站和出站协议配置中的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
}