mirror of
https://github.com/v2fly/v2ray-examples.git
synced 2025-01-18 22:09:29 +08:00
1360 lines
50 KiB
JSON
1360 lines
50 KiB
JSON
/*
|
||
I'm a Dune fan, so let me be your Maud Dib and guide you through the v2ray config for V5.
|
||
|
||
|
||
✦✦✦ Updateds Logs ✦✦✦
|
||
所有的配置基于 v2fly/v2ray-core v5.19.0,且给出的配置与案例经过实操验证可行,除了 services 下的一些流量统计的服务没有测试是否可以。
|
||
|
||
2024.9.**
|
||
dns.staticHosts 配置写法案例;
|
||
注释的完善,DNS 写法的完善;
|
||
DNS expectIPs 确实已经不支持;
|
||
DNS 全局配置注释完善。
|
||
|
||
添加 Inbounds 和 Outbounds 的模板,被注释状态;
|
||
添加 dokodemo 相关入站配置,可用性尚不可知,有待验证;
|
||
添加一个出站配置案例,完善一个出站的所有配置参数和注释;
|
||
节点添加链式代理和多路复用;
|
||
节点添加更多的参数,streamSettings.securitySettings { nextProtocol,disableSystemRoot };
|
||
节点添加更多的参数,Mux,Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 Mux.Cool。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配;
|
||
添加 dns-out 出站;
|
||
添加 loopback 出站配置,不知干嘛的;
|
||
添加被注释的常规 balancer 对应的路由模块;
|
||
添加被注释的订阅管理器对应的路由模块;
|
||
添加透明代理时 DNS 路由和出站的相关配置;
|
||
出站配置中 proxySettings 测试无效,再找找案例试试;
|
||
balancingRule 测试成功。
|
||
|
||
添加常规的 balancingRule 配置,以及订阅管理器对应的 balancingRule 模块,目前只剩订阅管理器测试没成功;
|
||
添加订阅管理,配置了对应的路由等等;
|
||
V2Ray 内置了一些服务来补充 V2Ray 的主要功能,添加了对应的服务配置。
|
||
|
||
dns-out 配置的完善;
|
||
dokodemo-door 配置的完善;
|
||
balancer 功能在 xray 和 v2ray V4 版本中正常,但是 v2ray V5 版本中会奔溃;
|
||
balancingRule 功能如果没有生效的话,至少会选择默认的出站方式;
|
||
完善 v2ray WebSocket maxEarlyData 的配置,用于减少连接建立的时间;
|
||
添加 commander 入站,对应的路由,以及 services.commander 模块,功能暂且不明;
|
||
完善 services 中的服务配置,目前还有 services.policy.level.timeout 语法有问题;
|
||
Tun 模式配置的修复以及测试运行成功,sniffingSettings 一个常规错误,destinationOverride 一个语法错误。无法正确解析Tun sniffing config中的destOverride。根本原因是services部分的配置使用了raw json,没有经过类似InboundConfig中的检查和转换,因此destOverride字段实际应为destinationOverride,这与文档记载不符;
|
||
对应一个负载均衡器的标识。balancerTag 和 tag 须二选一。当同时指定时,balancerTag 生效;
|
||
完善 services 里各个项目的注释。
|
||
|
||
对于每一个连接,路由将根据这些规则从上到下依次进行判断,当遇到第一个生效规则时,即将这个连接转发至它所指定的 outboundTag或 balancerTag。当没有匹配到任何规则时,流量默认由第一个 outbound 发出;
|
||
完成所有配置的搭配和组合;
|
||
拼图的最后一块,代理链的设置。代理链设置后,只有能访问,就是成功了;
|
||
V2Ray 提供了代理转发功能,利用它可以实现中转(在没有中转服务器操作权限的情况下);
|
||
使用代理转发可以实现由一个 Shadowsocks 服务器或者 V2Ray(VMess) 服务器来中转你的网络流量,并且中转服务器只能看到你加密的数据而不知道原始的数据是什么;
|
||
性能:链式代理使用了多个节点,可能会造成延时、带宽等网络性能问题,并且客户端对每一个加解密的次数取决于代理链的长度,理论上也会有一定的影响;
|
||
安全:代理转发会一定程度上提高安全性,但安全取决于最弱一环,并不意味着代理链越长就会越安全。如果你需要匿名,请考虑成熟的匿名方案。 另外,使用了代理转发 streamSettings 会失效,即只能是非 TLS、无 HTTP 伪装的 TCP 传输协议;
|
||
实测得到的数据为:开启前置代理后,proxy 如果转发给 vmess+ws,vmess+ws 接受的数据完全加密,并不知道访问的数据是什么,只能看到需要转发给 proxy 的地址和端口,落地 IP 还是 proxy 的地址;
|
||
数据的加密和转发的流程应该是:浏览器 -> 客户端 proxy 协议加密 -> 客户端 vmess+ws 协议加密 -> 服务端 vmess+ws 协议解密 -> 服务端 proxy 协议解密 -> 目标服务器;
|
||
修复 backgroundObservatory 和 burstObservatory 配置项,加强了对这两个参数的理解和应用。
|
||
|
||
*/
|
||
// emmm~ 本配置只是作为 v2ray jsonv5 写法的参考,尝试尽量把各个功能配置写法展现出来,如果日常使用,请先自行精简。(DNS 、路由)
|
||
// 修复了上一个版本的问题,完善一些功能:DNS 地址、IP 语法导致匹配问题,freedom 协议的功能完善,流量嗅探等等
|
||
// 启动命令
|
||
// v2ray run -c configv5-example.json -format=jsonv5
|
||
//
|
||
//
|
||
// 官方案例中使用的自签 tls 证书方法
|
||
// openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -days 3650 -nodes -keyout doubleclick.net.key -out doubleclick.net.pem -subj "/CN=doubleclick.net" -addext "subjectAltName=DNS:doubleclick.net"
|
||
//
|
||
// "pinned_peer_certificate_chain_sha256" 参数需要生成的 certChainHash
|
||
//
|
||
// ./v2ray tls certChainHash --cert doubleclick.net.pem
|
||
// vdUnuqSt/i/fEtTlPxY8trQVsPfliIj0d/+gqOCL1Jg=
|
||
//
|
||
// openssl x509 -noout -fingerprint -sha256 -in doubleclick.net.pem
|
||
// sha256 Fingerprint=BD:D5:27:BA:A4:AD:FE:2F:DF:12:D4:E5:3F:16:3C:B6:B4:15:B0:F7:E5:88:88:F4:77:FF:A0:A8:E0:8B:D4:98
|
||
//
|
||
//
|
||
{
|
||
"log": {
|
||
"access": {
|
||
"type": "Console",
|
||
"level": "Info"
|
||
},
|
||
"error": {
|
||
"type": "Console",
|
||
"level": "Info"
|
||
}
|
||
/*
|
||
// 日常使用
|
||
"access": {
|
||
"type": "Console",
|
||
"level": "Info"
|
||
},
|
||
"error": {
|
||
"type": "Console",
|
||
"level": "Info"
|
||
}
|
||
//
|
||
//
|
||
// 测试使用
|
||
"access": {
|
||
"type": "File",
|
||
"level": "Debug",
|
||
"path": "logaccess.log"
|
||
},
|
||
"error": {
|
||
"type": "File",
|
||
"level": "Debug",
|
||
"path": "logerror.log"
|
||
}
|
||
//
|
||
//
|
||
// type: "None" | "Console" | "File"
|
||
// "None":日志将被丢弃。
|
||
// "Console":日志将被输出到标准输出。
|
||
// "File":日志将被输出到一个文件。
|
||
//
|
||
//
|
||
// path: string
|
||
// 日志的文件路径,其值是一个合法的文件路径, 例如 "/tmp/v2ray/_error.log" (Linux) 或 "C:\\Temp\\v2ray\\_error.log" (Windows)。
|
||
//
|
||
//
|
||
// level: "Debug" | "Info" | "Warning" | "Error" | "None"
|
||
// 日志等级,默认值为 "Warning"。
|
||
// "Debug":详细的调试性信息。同时包含所有 "Info" 内容
|
||
// "Info":V2Ray 在运行时的状态,不影响正常使用。同时包含所有 "Warning" 内容。
|
||
// "Warning":V2Ray 可能遇到了一些问题,通常是外部问题,不影响 V2Ray 的正常运行,但有可能影响用户的体验。同时包含所有 "Error" 内容。
|
||
// "Error":V2Ray 遇到了无法正常运行的问题,需要立即解决。
|
||
// "None":不记录任何内容。
|
||
"access": {
|
||
"type": "File",
|
||
"level": "Error",
|
||
"path": "/var/log/v2ray/logaccess.log"
|
||
},
|
||
"error": {
|
||
"type": "File",
|
||
"level": "Info",
|
||
"path": "/var/log/v2ray/logerror.log"
|
||
}
|
||
*/
|
||
},
|
||
"dns": {
|
||
"staticHosts": [
|
||
//
|
||
//
|
||
// type: "Full" | "Subdomain" | "Keyword" | "Regex"
|
||
// domain: string,与 type 所对应的 domain 值。以下为 type 与domain 的对应关系:
|
||
// Full:当此域名完整匹配目标域名时,该规则生效。例如 v2ray.com 匹配 v2ray.com 但不匹配 www.v2ray.com。
|
||
// Regex:当 domain 所表示的正则表达式匹配目标域名时,该规则生效。例如 \.goo.*\.com$ 匹配 www.google.com、fonts.googleapis.com,但不匹配 google.com。
|
||
// Subdomain (推荐):当此域名是目标域名或其子域名时,该规则生效。例如 v2ray.com 匹配 www.v2ray.com、v2ray.com,但不匹配 xv2ray.com。
|
||
// Keyword:当此字符串匹配目标域名中任意部分,该规则生效。比如 sina.com 可以匹配 sina.com、sina.com.cn、www.sina.com 和 www.sina.company,但不匹配 sina.cn。
|
||
// 与 domain 匹配后返回的是:
|
||
// ip,匹配的域名所映射的 IP 地址列表。
|
||
// proxiedDomain,如指定 proxiedDomain,匹配的域名将直接使用该域名的查询结果,类似于 CNAME。
|
||
// 如果同时指定了 ip 和 proxiedDomain,将优先生效 proxiedDomain。
|
||
//
|
||
//
|
||
{
|
||
"type": "Full",
|
||
"domain": "services.gfe.nvidia.com",
|
||
"ip": [
|
||
"127.0.0.1"
|
||
]
|
||
},
|
||
{
|
||
"type": "Full",
|
||
"domain": "dns.google",
|
||
"ip": [
|
||
"8.8.8.8",
|
||
"8.8.4.4"
|
||
]
|
||
},
|
||
{
|
||
"type": "Full",
|
||
"domain": "cloudflare.com",
|
||
"ip": [
|
||
"1.1.1.1",
|
||
"1.0.0.1"
|
||
]
|
||
},
|
||
{
|
||
"type": "Full",
|
||
"domain": "cloudflare.com",
|
||
"proxiedDomain": "api.v2fly.org"
|
||
}
|
||
],
|
||
//
|
||
//
|
||
// V5 的 DNS 请求逻辑和 V4 的匹配完全类似。先按照命中 prioritizedDomain 依次请求,如果请求失败,则根据命中 prioritizedDomain 的顺序下一个继续请求,直到成功。如果都返回为空,则进入 fallback 请求。
|
||
// DNS 地址的写法,写错会导致程序使用到时奔溃。
|
||
// "223.5.5.5"
|
||
// "tcp://223.5.5.5:53"
|
||
// "tcp+local://223.5.5.5:53"
|
||
// "https://1.1.1.1/dns-query"
|
||
// "https+local://223.5.5.5/dns-query"
|
||
// "https+local://a.b.c.d:8443/my-dns-query"
|
||
// "quic+local://dns.adguard.com"
|
||
// localhost:使用本机预设的 DNS 配置
|
||
// FakeDNS:使用 V2Ray 内建的 FakeDNS 服务器。
|
||
//
|
||
//
|
||
"nameServer": [
|
||
{
|
||
"address": {
|
||
"address": "8.8.8.8"
|
||
}
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "1.1.1.1"
|
||
}
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "tcp+local://8.8.8.8:53"
|
||
}
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "https://dns.google/dns-query"
|
||
}
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "localhost"
|
||
},
|
||
"prioritizedDomain": [
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": ".cn"
|
||
},
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": "weibo.cn"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "baidu"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "sohu"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "citic"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "xn--"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "unicom"
|
||
},
|
||
{
|
||
"type": "Regex",
|
||
"domain": "^[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.(com\\.cn|net\\.cn|org\\.cn|edu\\.cn|gov\\.cn|cn)$"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "tcp+local://223.5.5.5:53"
|
||
},
|
||
"prioritizedDomain": [
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": ".cn"
|
||
},
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": "weibo.cn"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "baidu"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "sohu"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "citic"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "xn--"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "unicom"
|
||
},
|
||
{
|
||
"type": "Regex",
|
||
"domain": "^[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.(com\\.cn|net\\.cn|org\\.cn|edu\\.cn|gov\\.cn|cn)$"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "119.29.29.29",
|
||
"port": 53
|
||
},
|
||
"skipFallback": false,
|
||
"prioritizedDomain": [
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": ".cn"
|
||
},
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": "weibo.cn"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "baidu"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "sohu"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "citic"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "xn--"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "unicom"
|
||
},
|
||
{
|
||
"type": "Regex",
|
||
"domain": "^[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.(com\\.cn|net\\.cn|org\\.cn|edu\\.cn|gov\\.cn|cn)$"
|
||
}
|
||
]
|
||
/*
|
||
"expectIPs": [{"code": "cn"}]
|
||
*/
|
||
},
|
||
{
|
||
"address": {
|
||
// "network": "udp",
|
||
"address": "1.1.1.1",
|
||
"port": 53
|
||
},
|
||
"clientIp": "1.1.1.1",
|
||
"skipFallback": false,
|
||
"prioritizedDomain": [
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": "youtube.com"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "google"
|
||
}
|
||
]
|
||
/*
|
||
"expectIPs": [
|
||
{
|
||
"countryCode": "cn",
|
||
"cidr": [
|
||
{
|
||
"ipAddr": "119.29.0.0",
|
||
"prefix": 16
|
||
}
|
||
],
|
||
"inverseMatch": true
|
||
},
|
||
{
|
||
"filePath": "geoip.dat",
|
||
"code": "private"
|
||
}
|
||
]
|
||
*/
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "119.29.29.29"
|
||
}
|
||
},
|
||
{
|
||
"address": {
|
||
"address": "https://1.1.1.1/dns-query"
|
||
// "port": 53
|
||
},
|
||
"clientIp": "1.1.1.1",
|
||
"skipFallback": true,
|
||
// prioritizedDomain
|
||
// type: "Full" | "Subdomain" | "Keyword" | "Regex"
|
||
//
|
||
//
|
||
// domain: string
|
||
// Full:当此域名完整匹配目标域名时,该规则生效。例如 v2ray.com 匹配 v2ray.com 但不匹配 www.v2ray.com。
|
||
// Regex:当 domain 所表示的正则表达式匹配目标域名时,该规则生效。例如 \.goo.*\.com$ 匹配 www.google.com、fonts.googleapis.com,但不匹配 google.com。
|
||
// Subdomain (推荐):当此域名是目标域名或其子域名时,该规则生效。例如 v2ray.com 匹配 www.v2ray.com、v2ray.com,但不匹配 xv2ray.com。
|
||
// Keyword:当此字符串匹配目标域名中任意部分,该规则生效。比如 sina.com 可以匹配 sina.com、sina.com.cn、www.sina.com 和 www.sina.company,但不匹配 sina.cn。
|
||
//
|
||
//
|
||
"prioritizedDomain": [
|
||
{
|
||
"type": "Subdomain",
|
||
"domain": "youotube.com"
|
||
},
|
||
{
|
||
"type": "Keyword",
|
||
"domain": "gooogle"
|
||
}
|
||
],
|
||
/*
|
||
"ExpectIPs": [
|
||
{
|
||
"cidr": [
|
||
{
|
||
"ipAddr": "119.29.0.0",
|
||
"prefix": 16
|
||
}
|
||
],
|
||
"inverseMatch": true
|
||
},
|
||
{
|
||
"filePath": "geoip.dat",
|
||
"code": "private"
|
||
}
|
||
],
|
||
*/
|
||
"fakeDns": {
|
||
"pools": [
|
||
{
|
||
"ipPool": "198.18.0.0/15",
|
||
"lruSize": 65535
|
||
},
|
||
{
|
||
"ipPool": "fc00::/18",
|
||
"lruSize": 65535
|
||
}
|
||
]
|
||
},
|
||
"tag": "CloudFlareDNS",
|
||
"queryStrategy": "USE_IP4",
|
||
"cacheStrategy": "CacheEnabled",
|
||
"fallbackStrategy": "Enabled"
|
||
}
|
||
],
|
||
"fakeDns": {
|
||
"pools": [
|
||
{
|
||
"ipPool": "198.18.0.0/15",
|
||
"lruSize": 65535
|
||
},
|
||
{
|
||
"ipPool": "fc00::/18",
|
||
"lruSize": 65535
|
||
}
|
||
]
|
||
},
|
||
// "clientIp": "1.2.3.4", // 此功能需要 DNS 服务器支持 EDNS Client Subnet,用于 DNS 查询时通知 DNS 服务器,客户端所在的地理位置(不能是私有 IP 地址)。不建议全局通知 "1.2.3.4",会导致返回为空。
|
||
"domainMatcher": "mph",
|
||
"queryStrategy": "USE_IP4", // "USE_IP" | "USE_IP4" | "USE_IP6"
|
||
"cacheStrategy": "CacheEnabled", // "CacheEnabled" | "CacheDisabled"
|
||
"disableCache": false, // bool,默认为 false
|
||
"fallbackStrategy": "Enabled", // "Enabled" | "Disabled" | "DisabledIfAnyMatch",DNS 回退(fallback)查询策略。默认为 Enabled,即启用 DNS 回退(fallback)查询。Disabled 为禁用 DNS 回退(fallback)查询。DisabledIfAnyMatch 为在 DNS 服务器的优先匹配域名列表命中时禁用 DNS 回退(fallback)查询。
|
||
"disableFallback": false, // bool,禁用 DNS 回退(fallback)查询。默认为 false,即为不禁用。详情见 DNS 处理流程。 (v5.2.0+ 弃用)
|
||
// "disableFallbackIfMatch": false, // bool,禁用在 DNS 服务器的优先匹配域名列表命中时执行 DNS 回退(fallback)查询。 (v5.2.0+ 弃用)
|
||
"tag": "dns"
|
||
},
|
||
"inbounds": [
|
||
/*
|
||
Inbounds 入站模板
|
||
{
|
||
"listen": "",
|
||
"port": "",
|
||
"protocol": "vmess",
|
||
"settings": {},
|
||
"sniffing": {},
|
||
"streamSettings": {},
|
||
"tag": ""
|
||
}
|
||
*/
|
||
{
|
||
"tag": "socks",
|
||
"protocol": "socks",
|
||
"settings": {
|
||
"udpEnabled": true,
|
||
"address": "127.0.0.1",
|
||
"packetEncoding": "Packet" // Packet 模式适合于实时性要求高的应用:如 VoIP、在线游戏等。需要保证连接稳定的应用:如远程桌面、文件传输等。需要穿透 NAT 的应用:如 P2P 应用。None 模式适合于:对连接稳定性要求不高的应用。需要灵活配置路由路径的应用。
|
||
},
|
||
"port": 7830,
|
||
"listen": "127.0.0.1",
|
||
"sniffing": {
|
||
"enabled": true,
|
||
"destOverride": [
|
||
"http",
|
||
"tls"
|
||
],
|
||
"metadataOnly": true
|
||
}
|
||
},
|
||
{
|
||
"tag": "http",
|
||
"protocol": "http",
|
||
"settings": {},
|
||
"port": 7831,
|
||
"listen": "127.0.0.1",
|
||
"sniffing": {
|
||
"enabled": true,
|
||
"destOverride": [
|
||
"http",
|
||
"tls"
|
||
],
|
||
"metadataOnly": true
|
||
}
|
||
},
|
||
{
|
||
"tag": "dokodemo-door",
|
||
"protocol": "dokodemo-door",
|
||
"settings": {
|
||
"address": "127.0.0.1",
|
||
"port": 65535,
|
||
"networks": [
|
||
"tcp,udp"
|
||
],
|
||
"followRedirect": false // 当值为 true 时,Dokodemo door 会识别出由 iptables 转发而来的数据,并转发到相应的目标地址。
|
||
},
|
||
"port": 19829,
|
||
"listen": "127.0.0.1",
|
||
"sniffing": {
|
||
"enabled": true,
|
||
"destOverride": [
|
||
"http",
|
||
"tls"
|
||
],
|
||
"metadataOnly": true
|
||
},
|
||
"streamSettings": {
|
||
"sockopt": {
|
||
"tproxy": "tproxy"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"tag": "commander",
|
||
"protocol": "dokodemo-door",
|
||
"settings": {
|
||
"address": "127.0.0.1",
|
||
"port": 65535,
|
||
"networks": [
|
||
"tcp"
|
||
]
|
||
},
|
||
"port": 19629,
|
||
"listen": "127.0.0.1"
|
||
}
|
||
],
|
||
"outbounds": [
|
||
/*
|
||
{
|
||
"tag": "proxy",
|
||
"protocol": "vmess",
|
||
"settings": {
|
||
"address": "1.1.1.1",
|
||
"port": 10000,
|
||
"uuid": "adc27dd2-e7f9-41e8-a01d-2573e257564f"
|
||
},
|
||
"streamSettings": {
|
||
"transport": "ws", // 传输层协议名称,mKCP、TCP、WebSocket、gRPC、QUIC、meek、httpupgrade、Hysteria2
|
||
"transportSettings": { // 传输层协议设置
|
||
"path": "/ws"
|
||
},
|
||
"security": "tls", // 传输层安全协议,TLS,uTLS,none,xray 还有 reality。uTLS 仅在 TCP 和 WebSocket 中支持。
|
||
"securitySettings": { // 传输层安全协议设定
|
||
"serverName": "你的域名.com", // 指定服务器端证书的域名,在连接由 IP 建立时有用。当目标连接由域名指定时,比如在 Socks 入站时接收到了域名,或者由 Sniffing 功能探测出了域名,这个域名会自动用于 serverName,无须手动配置。
|
||
"next_protocol": ["h2", "http/1.1"], // h2 会出错,一个字符串数组,指定了 TLS 握手时指定的 ALPN 数值。默认值为 ["h2", "http/1.1"]。
|
||
"disable_system_root": false, // 是否禁用操作系统自带的 CA 证书。默认值为 false。当值为 true 时,V2Ray 只会使用 certificates 中指定的证书进行 TLS 握手。当值为 false 时,V2Ray 只会使用操作系统自带的 CA 证书进行 TLS 握手。
|
||
"allow_insecure_if_pinned_peer_certificate": true, // 此选项将在 pinnedPeerCertificateChainSha256 被设置时禁用 TLS 证书验证。如果 pinnedPeerCertificateChainSha256 没有被设置,本选项会被忽略。
|
||
"pinned_peer_certificate_chain_sha256": [ // 使用 Base64 标准编码格式表示的远程服务器的证书链的SHA256散列值。在设置后,远程服务器的证书链的散列值必须为列表中的数值之一。此数值可以通过以下命令生成: ./v2ray tls certChainHash --cert <cert.pem> (v5.18.0+)
|
||
"qwertyuiomnbgvc/x="
|
||
]
|
||
}
|
||
},
|
||
"proxySettings": {
|
||
"tag": "链式代理节点的 tag", // 当指定另一个出站连接的标识时,此出站连接发出的数据,将被转发至所指定的出站连接发出。
|
||
"transportLayer": true // 是否启用传输层转发支持。在启用后,此出站连接的传输层协议将保持生效(如果传输层协议支持)。如果不启用此选项, 在转发时传输层协议将失效,只能使用默认的 TCP 传输协议。
|
||
},
|
||
"sendThrough": "1.2.3.4", // 用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 "0.0.0.0"。
|
||
"mux": {
|
||
"domainStrategy": "AsIs", // [ "AsIs" | "UseIP" | "UseIP4" | "UseIP6" ]
|
||
"enabled": true,
|
||
"concurrency": 8 // 最大并发连接数。最小值 1,最大值 1024,默认值 8。如果填负数,如 -1,则不加载 Mux 模块。此数值表示了一个 TCP 连接上最多承载的 Mux 连接数量。当客户端发出了 8 个 TCP 请求,而 concurrency=8 时,V2Ray 只会发出一条实际的连接,客户端的 8 个请求全部由这条连接传输。
|
||
}
|
||
}
|
||
//
|
||
"streamSettings": {
|
||
{
|
||
"mark": 0, // 一个整数。当其值非零时,在出站连接上标记 SO_MARK。仅适用于 Linux 系统。需要 CAP_NET_ADMIN 权限。
|
||
"tcpFastOpen": false, // 是否启用 TCP Fast Open。当其值为 true 时,强制开启 TFO;当其值为 false 时,强制关闭 TFO;当此项不存在时,使用系统默认设置。可用于入站出站连接。
|
||
"tcpFastOpenQueueLength": 4096, // number 入站连接的 TCP Fast Open 队列长度,默认值为 4096,仅在 Linux 中可用。
|
||
"tproxy": "off", // 是否开启透明代理(仅适用于 Linux)。"redirect":使用 Redirect 模式的透明代理。支持 TCP 和 UDP 连接。"tproxy":使用 TProxy 模式的透明代理。支持 TCP 和 UDP 连接。"off":关闭透明代理。透明代理需要 Root 或 CAP_NET_ADMIN 权限。当 Dokodemo-door 中指定了 followRedirect,且 sockopt.tproxy 为空时,sockopt.tproxy 的值会被设为 "redirect"。
|
||
"tcpKeepAliveInterval": 0, // TCP 保持活跃的数据包的发送间隔,以秒为单位(仅适用于 Linux)。0 代表保持默认值。
|
||
"bindToDevice": "eth0", // 将连接绑定到指定的网络设备(Linux: v5.0.6+, Windows/Darwin: v5.2.0+)。
|
||
"mptcp": false // 是否启用多路径TCP(仅适用于Linux)。true 打开 MPTCP 。如果另一端的主机不支持 MPTCP,MPTCP 将回退为普通 TCP。
|
||
}
|
||
}
|
||
*/
|
||
/*
|
||
Outbounds 出站模板
|
||
{
|
||
"protocol": "vmess",
|
||
"proxySettings": {},
|
||
"sendThrough": "1.2.3.4",
|
||
"settings": {},
|
||
"streamSettings": {},
|
||
"mux": {
|
||
"concurrency": 8,
|
||
"enabled": false
|
||
},
|
||
"tag": "demo"
|
||
}
|
||
*/
|
||
{
|
||
"tag": "proxy", // 运行在 xray 的 vmess + ws +tls ,需要通过 v2ray 固定不安全的证书。 ./v2ray tls certChainHash --cert 证书.crt
|
||
"protocol": "vmess",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"port": 100000,
|
||
"uuid": "0000000-0000000-0000000-0000000-0000000"
|
||
},
|
||
"streamSettings": {
|
||
"transport": "ws",
|
||
"transportSettings": {
|
||
"path": "/0000000000000000000000000000"
|
||
},
|
||
"security": "tls",
|
||
"securitySettings": {
|
||
"serverName": "0000000.com",
|
||
"allow_insecure_if_pinned_peer_certificate": true,
|
||
"pinned_peer_certificate_chain_sha256": [
|
||
"00000000000000"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
// 一个链式代理案例,注意:落地 IP 还是 proxy 的,容易造成理解错误,代理链设置后,只要能访问,就是成功了。
|
||
{
|
||
"tag": "proxy_链式代理",
|
||
"protocol": "vmess",
|
||
"settings": {
|
||
"address": "1.1.1.1",
|
||
"port": 10000,
|
||
"uuid": "adc27dd2-e7f9-41e8-a01d-2573e257564f"
|
||
},
|
||
"streamSettings": {
|
||
"transport": "ws",
|
||
"transportSettings": {
|
||
"path": "/ws"
|
||
}
|
||
},
|
||
"proxySettings": {
|
||
"tag": "UDA_hysteria2",
|
||
"transportLayer": true
|
||
}
|
||
}
|
||
// 负载均衡配置开始,这里提供两种方案,一个本地 outbounds 中的节点通过筛选进行负载均衡,另一个为订阅管理器筛选。同时如果多个节点,类似下面的案例的话,建议把节点 tag 使用固定的开头方便筛选。
|
||
{
|
||
"tag": "UDA_hysteria2", // h2_h2
|
||
"protocol": "hysteria2",
|
||
"settings": {
|
||
"server": [
|
||
{
|
||
"address": "0.0.0.0",
|
||
"port": 100000
|
||
}
|
||
]
|
||
},
|
||
"streamSettings": {
|
||
"security": "tls",
|
||
"securitySettings": {
|
||
"allow_insecure_if_pinned_peer_certificate": true,
|
||
"pinned_peer_certificate_chain_sha256": [
|
||
"000000000000000000000"
|
||
],
|
||
"server_name": "00000000000000.com"
|
||
},
|
||
"transport": "hysteria2",
|
||
"transportSettings": {
|
||
"congestion": {
|
||
"type": "bbr"
|
||
},
|
||
"password": "000000000000000000000",
|
||
"use_udp_extension": true
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"tag": "UDA_vmess+ws",
|
||
"protocol": "vmess",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"port": 100000,
|
||
"uuid": "0000000-0000000-0000000-0000000-0000000"
|
||
},
|
||
"streamSettings": {
|
||
"transport": "ws",
|
||
"transportSettings": {
|
||
"path": "/000000000000000000000"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"tag": "UDA_vmess+ws+tls",
|
||
"protocol": "vmess",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"port": 100000,
|
||
"uuid": "0000000-0000000-0000000-0000000-0000000"
|
||
},
|
||
"streamSettings": {
|
||
"security": "tls",
|
||
"securitySettings": {
|
||
"allow_insecure_if_pinned_peer_certificate": true,
|
||
"pinned_peer_certificate_chain_sha256": [
|
||
"000000000000000000000000000000000000000000"
|
||
],
|
||
"server_name": "000000000000000000000.com"
|
||
},
|
||
"transport": "ws",
|
||
"transportSettings": {
|
||
"path": "/000000000000000000000000000000000000000000"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"tag": "UDA_vmess+tls+hy2",
|
||
"protocol": "vmess",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"port": 100000,
|
||
"uuid": "0000000-0000000-0000000-0000000-0000000"
|
||
},
|
||
"streamSettings": {
|
||
"security": "tls",
|
||
"securitySettings": {
|
||
"server_name": "0000000000000.com",
|
||
"allow_insecure_if_pinned_peer_certificate": true,
|
||
"pinned_peer_certificate_chain_sha256": [
|
||
"000000000000000000000000000000000000000000"
|
||
]
|
||
},
|
||
"transport": "hysteria2",
|
||
"transportSettings": {
|
||
"congestion": {
|
||
"type": "bbr"
|
||
},
|
||
"password": "000000000000000000000000000000000000000000",
|
||
"use_udp_extension": true
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"tag": "balancer_shadowsocks",
|
||
"protocol": "shadowsocks",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"method": "aes-256-gcm",
|
||
"port": "100000",
|
||
"password": "000000000000000000000000000000000000000000"
|
||
}
|
||
},
|
||
{
|
||
"tag": "balancer_shadowsocks",
|
||
"protocol": "shadowsocks",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"method": "aes-256-gcm",
|
||
"port": "100000",
|
||
"password": "000000000000000000000000000000000000000000"
|
||
}
|
||
},
|
||
{
|
||
"tag": "balancer_shadowsocks",
|
||
"protocol": "shadowsocks",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"method": "aes-256-gcm",
|
||
"port": "100000",
|
||
"password": "000000000000000000000000000000000000000000"
|
||
}
|
||
},
|
||
{
|
||
"tag": "balancer_shadowsocks",
|
||
"protocol": "shadowsocks",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"method": "aes-256-gcm",
|
||
"port": "100000",
|
||
"password": "000000000000000000000000000000000000000000"
|
||
}
|
||
},
|
||
{
|
||
"tag": "balancer_shadowsocks",
|
||
"protocol": "shadowsocks",
|
||
"settings": {
|
||
"address": "0.0.0.0",
|
||
"method": "aes-256-gcm",
|
||
"port": "100000",
|
||
"password": "000000000000000000000000000000000000000000"
|
||
}
|
||
},
|
||
{
|
||
"tag": "direct",
|
||
"protocol": "freedom",
|
||
"settings": {},
|
||
"mux": {
|
||
"domainStrategy": "UseIp", // [ "AsIs" | "UseIP" | "UseIP4" | "UseIP6" ]
|
||
"enabled": false,
|
||
"concurrency": 8
|
||
}
|
||
},
|
||
{
|
||
"tag": "dns-out",
|
||
"protocol": "dns",
|
||
"settings": {},
|
||
"proxySettings": {
|
||
"tag": "proxy"
|
||
}
|
||
},
|
||
{
|
||
"tag": "block",
|
||
"protocol": "blackhole"
|
||
},
|
||
{
|
||
"tag": "loopback-out",
|
||
"protocol": "loopback",
|
||
"settings": {
|
||
"inboundTag": "loopback-in"
|
||
}
|
||
}
|
||
],
|
||
//
|
||
//
|
||
// GeoIP
|
||
// cidr
|
||
//
|
||
// code: string
|
||
// filePath: string
|
||
//
|
||
// inverseMatch : true | false (上面两个的通用参数)
|
||
//
|
||
// CIDRObject
|
||
// ipAddr: string
|
||
// prefix: number
|
||
//
|
||
// GeoDomain
|
||
// domain : DomainObject
|
||
// code: string
|
||
// filePath: string
|
||
//
|
||
// DomainObject
|
||
// type : "Plain" | "Regex" | "RootDomain" | "Full"
|
||
// Plain:纯字符串匹配模式,当匹配目标域名中任意部分时,该规则生效。比如 sina.com 可以匹配 sina.com、sina.com.cn、sina.company 和 www.sina.com,但不匹配 sina.cn。
|
||
// Regex:正则表达式匹配模式,当正则表达式匹配目标域名时,该规则生效。例如 \.goo.*\.com$ 匹配 www.google.com、fonts.googleapis.com,但不匹配 google.com。
|
||
// RootDomain:根域名匹配模式,当域名是目标域名或其子域名时,该规则生效。例如 v2ray.com 匹配 www.v2ray.com、v2ray.com,但不匹配 xv2ray.com。
|
||
// Full:完整匹配模式,当域名完整匹配目标域名时,该规则生效。例如 v2ray.com 匹配 v2ray.com 但不匹配 www.v2ray.com。
|
||
//
|
||
//
|
||
/*
|
||
// 常规 balancer 对应的路由模块
|
||
{
|
||
"balancingTag": "balancer",
|
||
"networks": "tcp,udp"
|
||
}
|
||
// 订阅管理器对应的路由模块
|
||
{
|
||
"balancingTag": "subscriptions",
|
||
"networks": "tcp,udp"
|
||
},
|
||
{
|
||
"tag": "commander",
|
||
"inboundTag": [
|
||
"commander"
|
||
]
|
||
}
|
||
*/
|
||
/*
|
||
{
|
||
// "tag": "proxy",
|
||
"balancingTag": "subscriptions",
|
||
"inboundTag": [
|
||
"http"
|
||
]
|
||
},
|
||
{
|
||
// "tag": "proxy",
|
||
"balancingTag": "balancerout",
|
||
"inboundTag": [
|
||
"socks"
|
||
]
|
||
},
|
||
{
|
||
"tag": "commander",
|
||
"inboundTag": [
|
||
"commander"
|
||
]
|
||
},
|
||
*/
|
||
"router": {
|
||
"domainStrategy": "IpIfNonMatch", // AsIs | UseIp | IpIfNonMatch | IpOnDemand
|
||
"rule": [
|
||
{
|
||
"tag": "dns-out", // 防火墙重定向类型透明代理时的 dns 劫持
|
||
"domainMatcher": "mph",
|
||
"portList": "53",
|
||
"networks": "udp"
|
||
},
|
||
{
|
||
"tag": "block", // 网络流量类型 bittorrent 直连
|
||
"domainMatcher": "mph", // protocol
|
||
"protocol": [
|
||
"bittorrent"
|
||
]
|
||
},
|
||
{
|
||
"tag": "block", // 全匹配去广告 + 关键词匹配去广告
|
||
"domainMatcher": "mph", // domain
|
||
"domain": [
|
||
{
|
||
"type": "Full",
|
||
"value": "discovery.razerapi.com"
|
||
},
|
||
{
|
||
"type": "Full",
|
||
"value": "services.gfe.nvidia.com"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "googleads"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "wlmonitor"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "block", // geosite数据库匹配去广告
|
||
"domainMatcher": "mph", // domain
|
||
"geoDomain": [
|
||
{
|
||
"code": "category-httpdns",
|
||
"filePath": "geosite.dat"
|
||
},
|
||
{
|
||
"code": "category-ads-all",
|
||
"filePath": "geosite.dat"
|
||
}
|
||
]
|
||
},
|
||
// 下面这个为融合写法,日常可以选择上面分开的,或者下面这个融合的。贴一下仓库佬友 shanoaice 去年的总结,不知道是否还准确,自行判断。https://github.com/v2fly/v2ray-core/issues/2518
|
||
// domain 与 geoDomain 有分开的配置项,而 ip-cidr 和 geoip 没有分开来的配置项
|
||
// domain 尽管可以单独写,但 geoDomain 的 GeoDomain 配置中也可以写 Domain 匹配
|
||
// geoip 有 inverseMatch 选项,但 geoDomain 没有
|
||
// domainMatcher 选项被放在了每一条规则单独的 RuleObject 里,而不是放在顶层的 service.router 中(像 v4 配置文件一样),单独对每一条规则配置 domainMatcher 意义不大,至少需要提供一个在顶层中提供默认值的方法,可以允许在每条 RuleObject 里单独 override
|
||
{
|
||
"tag": "block", // geosite数据库匹配 + domain 类型的全匹配和关键词匹配混合写法去广告
|
||
"domainMatcher": "mph", // domain
|
||
"geoDomain": [
|
||
{
|
||
"code": "category-httpdns",
|
||
"filePath": "geosite.dat"
|
||
},
|
||
{
|
||
"code": "category-ads-all",
|
||
"filePath": "geosite.dat"
|
||
},
|
||
{
|
||
"domain": [
|
||
{
|
||
"type": "Full",
|
||
"value": "discovery.razerapi.com"
|
||
},
|
||
{
|
||
"type": "Full",
|
||
"value": "services.gfe.nvidia.com"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "googleads"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "wlmonitor"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "proxy", // 根域名匹配模式代理 + 关键词匹配代理
|
||
// 对应一个负载均衡器的标识。balancerTag 和 outboundTag 须二选一。当同时指定时,outboundTag 生效。
|
||
"balancingTag": "balancerout",
|
||
"domainMatcher": "mph", // domain
|
||
"domain": [
|
||
{
|
||
"type": "RootDomain",
|
||
"value": "linux.do"
|
||
},
|
||
{
|
||
"type": "RootDomain",
|
||
"value": "v2ex.com"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "youtube"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "google"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "proxy", // geosite数据库匹配代理
|
||
"domainMatcher": "mph", // domain
|
||
"geoDomain": [
|
||
{
|
||
"code": "google",
|
||
"filePath": "geosite.dat"
|
||
},
|
||
{
|
||
"code": "tld-!cn",
|
||
"filePath": "geosite.dat"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "proxy", // cidr 匹配, cidr 需要在 geoip 下面才行。prefix 为 CIDR 地址计算IP地址范围,一般指定某个 IP,32即可。
|
||
"domainMatcher": "mph", // geoip
|
||
"geoip": [
|
||
{
|
||
"code": "google"
|
||
},
|
||
{
|
||
"cidr": [
|
||
{
|
||
"ipAddr": "8.8.4.4", // "prefix" 需要填写,否则导致 IP 匹配出问题。
|
||
"prefix": 32
|
||
},
|
||
{
|
||
"ipAddr": "8.8.8.8",
|
||
"prefix": 32
|
||
},
|
||
{
|
||
"ipAddr": "1.1.1.1",
|
||
"prefix": 32
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "proxy", // geoip数据库匹配代理 + geoip数据库匹配反转代理
|
||
"domainMatcher": "mph", // geoip
|
||
"geoip": [
|
||
{
|
||
"code": "google",
|
||
"filePath": "geoip.dat"
|
||
},
|
||
{
|
||
"code": "telegram",
|
||
"filePath": "geoip.dat"
|
||
},
|
||
{
|
||
"inverseMatch": true,
|
||
"code": "cn",
|
||
"filePath": "geoip.dat"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "direct", // 根域名匹配模式直连 + 关键词匹配直连
|
||
"domainMatcher": "mph", // domain
|
||
"domain": [
|
||
{
|
||
"type": "RootDomain",
|
||
"value": "bilibili.com"
|
||
},
|
||
{
|
||
"type": "RootDomain",
|
||
"value": "ixigua.com"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "moutai"
|
||
},
|
||
{
|
||
"type": "Plain",
|
||
"value": "tracker"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "direct", // geosite数据库匹配直连
|
||
"domainMatcher": "mph", // geoDomain
|
||
"geoDomain": [
|
||
{
|
||
"code": "cn",
|
||
"filePath": "geosite.dat"
|
||
},
|
||
{
|
||
"code": "tld-cn",
|
||
"filePath": "geosite.dat"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "direct", // cidr 匹配, cidr 需要在 geoip 下面才行。prefix 为 CIDR 地址计算IP地址范围,一般指定某个 IP,32即可。
|
||
"domainMatcher": "mph", // geoip
|
||
"geoip": [
|
||
{
|
||
"code": "private"
|
||
},
|
||
{
|
||
"cidr": [
|
||
{
|
||
"ipAddr": "223.5.5.5",
|
||
"prefix": 32
|
||
},
|
||
{
|
||
"ipAddr": "119.29.29.29",
|
||
"prefix": 32
|
||
},
|
||
{
|
||
"ipAddr": "114.114.114.114",
|
||
"prefix": 32
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "direct", // geoip数据库匹配直连
|
||
"domainMatcher": "mph", // geoip
|
||
"geoip": [
|
||
{
|
||
"code": "private",
|
||
"filePath": "geoip.dat"
|
||
},
|
||
{
|
||
"code": "cn",
|
||
"filePath": "geoip.dat"
|
||
}
|
||
]
|
||
}
|
||
/*
|
||
{
|
||
"tag": "proxy",
|
||
"portList": "53,443,1000-2000" // portList
|
||
},
|
||
{
|
||
"tag": "proxy",
|
||
"networks": "tcp,udp" // networks
|
||
},
|
||
{
|
||
"tag": "direct",
|
||
"domainMatcher": "mph", // sourceGeoip
|
||
"sourceGeoip": [
|
||
{
|
||
"code": "cn",
|
||
"filePath": "geoip.dat"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"tag": "proxy",
|
||
"sourcePortList": "53,443,1000-2000" // sourcePortList
|
||
},
|
||
{
|
||
"tag": "direct",
|
||
"domainMatcher": "mph", // protocol
|
||
"protocol": [
|
||
"bittorrent"
|
||
]
|
||
}
|
||
*/
|
||
],
|
||
"balancingRule": [
|
||
// random 不需要添加 backgroundObservatory 或者 burstObservatory 配置项。
|
||
// leastPing 根据连接观测结果选择延迟最小的匹配到的出站代理,需要添加 backgroundObservatory 配置项。
|
||
// leastLoad 根据连接观测结果选择最稳定的出站代理,需要添加 burstObservatory 配置项。
|
||
// 订阅管理器对应的 balancingRule 模块;
|
||
{
|
||
"tag": "ShellPersonal",
|
||
"outbound_selector": [
|
||
"shellpersonal_"
|
||
],
|
||
"strategy": "random", // "random" | "leastping" | "leastload",进行负载均衡的策略类型,当没有匹配到任何规则时,流量默认由第一个 outbound 发出。random 默认值。随机选择匹配到的出站代理。roundRobin 按顺序选择匹配到的出站代理(V5 不支持这个参数)。leastPing 根据连接观测结果选择延迟最小的匹配到的出站代理。需要添加 observatory 配置项。leastLoad 根据连接观测结果选择最稳定的出站代理。需要添加 burstObservatory 配置项。
|
||
"fallbackTag": "proxy" // 如果负载均衡器无法选出合适的 outbound,则使用这个配置项指定的 outbound。
|
||
},
|
||
{
|
||
"tag": "PersonalShell",
|
||
"outbound_selector": [
|
||
"personalshell_"
|
||
],
|
||
"strategy": "random",
|
||
"fallbackTag": "proxy"
|
||
},
|
||
// 常规 balancingRule 模块;
|
||
{
|
||
"tag": "UDAOUT",
|
||
"outbound_selector": [
|
||
"UDA_"
|
||
],
|
||
"strategy": "leastload"
|
||
},
|
||
{
|
||
"tag": "balancerout",
|
||
"outbound_selector": [
|
||
"balancer_"
|
||
],
|
||
"strategy": "leastping"
|
||
}
|
||
]
|
||
},
|
||
"services": {
|
||
// ✦✦✦ 连接观测组件 ✦✦✦
|
||
// 连接观测组件使用 HTTPing 的方式探测出站代理的连接状态。观测结果可以被其他组件使用,如负载均衡器。目前有 backgroundObservatory (后台连接观测)和 burstObservatory (并发连接观测)两种。按需选择其中之一就行。
|
||
// 连接状态观测配置,负载均衡功能需要搭配该模块才行,V4 没有类似的配置搭配,leastping 和 leastload 这两个策略是需要配置连接观测来决定路由策略的。
|
||
"backgroundObservatory": { // 后台连接观测服务,通过定时指定的出站连接建立连接来确定出站代理的状态。
|
||
"subject_selector": [ // 用于 leastping,一个字符串数组,其中每一个字符串将用于和出站协议标识的前缀匹配。在以下几个出站协议标识中:[ "a", "ab", "c", "ba" ],"subjectSelector": ["a"] 将匹配到 [ "a", "ab" ]。
|
||
"UDA_",
|
||
"balancer_"
|
||
],
|
||
"probe_interval": 5000000000, // "5s",发起探测的间隔。每经过这个时间,就会对一个服务器进行服务器状态检测。时间格式为数字+单位,比如"10s", "2h45m",支持的时间单位有 ns, us, ms, s, m, h, 分别对应纳秒、微秒、毫秒、秒、分、时。
|
||
// 如果默写节点设置后无法负载均衡,可能在于那些节点无法 PING 通 probeUrl 的地址,采用了最终默认的出站策略。修改下面 probeUrl 的地址,或者直接删掉采用官方默认的参数即可。
|
||
"probeUrl": "http://www.qualcomm.cn/generate_204" // 用于检测连接状态的网址。默认会使用内构的连接状态检测地址。✦✦✦ 此目标地址的服务器可以推断出您使用了本程序。如果您使用了第三方提供的服务器,该服务器的运营商可能基于此信息作出不利于您的决定,如展示更多验证码,拒绝服务或封禁您的帐号。✦✦✦
|
||
},
|
||
"burstObservatory": { // 并发连接观测服务,用于 leastLoad 根据连接观测结果选择最稳定的出站代理。
|
||
"subjectSelector": [ // 用于 leastload,一个字符串数组,其中每一个字符串将用于和出站协议标识的前缀匹配。在以下几个出站协议标识中:[ "a", "ab", "c", "ba" ],"subjectSelector": ["a"] 将匹配到 [ "a", "ab" ]。
|
||
"UDA_",
|
||
"balancer_"
|
||
],
|
||
"pingConfig": {
|
||
"timeout": 5000000000, // "5000ms" // Ping 超时时间, 时间格式为数字+单位,比如"10s", "2h45m"。。
|
||
"interval": 60000000000, // "60s" // 在指定时间内探测全部匹配的出站代理,每个出站代理探测 sampling + 1 次。时间格式为数字 + 单位,比如 "10s", "2h45m",支持的时间单位有 ns, us, ms, s, m, h, 分别对应纳秒、微秒、毫秒、秒、分、时。
|
||
"connectivity": "http://www.msftncsi.com/ncsi.txt", // 连接检查 URL,用于检测本地网络连通性的网址,空字符串表示不检测本地网络连通性。
|
||
"samplingCount": 20, // 保留的最近 Ping 结果的数量。
|
||
"destination": "http://www.gstatic.com/generate_204" // 用于探测出站代理连接状态的网址。这个网址应该返回 HTTP 204 成功状态码。
|
||
}
|
||
},
|
||
"subscription": {
|
||
// 订阅管理器自动刷新出站信息并将它们转换为出站实例。 (v5.13.0+)
|
||
// 订阅源的地址,目前有两种收到支持的发地址。
|
||
// HTTP(S) 地址 : 通过 HTTP(S) 即 「超文本传输协议」或 「超文本传输安全协议」下载订阅文档。
|
||
// DataURL : 链接本身即为订阅文档。文档类型需为 "application/vnd.v2ray.subscription-singular" 才会被接受。
|
||
/*
|
||
The default time to fetch subscription document again. This time is not strictly honored.
|
||
Subscription Manager will
|
||
1. Check ImportSources from time to time to download subscription documents
|
||
2. Parse subscription documents with Subscription Container parsing components. The subscription documents will then be converted into individual server definitions.
|
||
3. Try to parse the server definitions as standardized outbound format one by one, if fails, try to convert the document into outbound format with Subscription Converter.
|
||
4. Compare the successfully converted server definition set with the servers already instanced as outbounds, and apply the difference. Only the modified server will have their Outbound Handlers recreated.
|
||
*/
|
||
"imports": [
|
||
{
|
||
"name": "ShellPersonal", // 机场提供的订阅
|
||
"url": "",
|
||
"tag_prefix": "shellpersonal_subscription", // 创建的订阅的出站实例前缀。
|
||
"importUsingTag": "proxy", // 指定下载订阅文档的出站代理标志。
|
||
"default_expire_seconds": 3600 // 默认的订阅过期时间。
|
||
},
|
||
{
|
||
"name": "PersonalShell", // 自建的订阅
|
||
"url": "",
|
||
"tag_prefix": "personalshell_subscription",
|
||
"importUsingTag": "proxy",
|
||
"default_expire_seconds": 3600
|
||
}
|
||
]
|
||
},
|
||
"stats": {},
|
||
"policy": {
|
||
"system": {
|
||
"stats": {
|
||
"inboundUplink": false,
|
||
"inboundDownlink": false,
|
||
"outboundUplink": false,
|
||
"outboundDownlink": false
|
||
}
|
||
},
|
||
"level": {
|
||
"0": {
|
||
"timeout": {
|
||
/*
|
||
"handshake": 4,
|
||
"connectionIdle": 300,
|
||
"uplinkOnly": 2,
|
||
"downlinkOnly": 5
|
||
*/
|
||
},
|
||
"stats": {
|
||
"userUplink": false,
|
||
"userDownlink": false
|
||
},
|
||
"buffer": {
|
||
"connection": -1
|
||
}
|
||
}
|
||
}
|
||
},
|
||
// 浏览器转发模块
|
||
// 对此 浏览器转发(browser dialer)应运而生。用户在自己的浏览器中打开一个页面至 localhost:8080,这个页面利用原生 JS 充当 Xray 的网络栈,与代理服务端建立 TLS,HTTP 连接。
|
||
// https://xtls.github.io/config/features/browser_dialer.html
|
||
"browser": {
|
||
"listenAddr": "127.0.0.1",
|
||
"listenPort": 4837
|
||
},
|
||
"commander": {
|
||
"tag": "commander",
|
||
"name": [
|
||
"observatory"
|
||
]
|
||
}
|
||
/*
|
||
// 虚拟网卡模式,仅 Linux amd64 and arm64 支持。
|
||
// 目前仅支持 amd64 以及 arm64 架构下的 Linux 操作系统,Tun 是一个接受网络层数据包的服务,输入进入操作系统 tun 接口的数据包会被转换为一般数据流被传出代理处理。 (v5.9.0+)
|
||
// 该功能已经实际测试运行成功。
|
||
"tun": {
|
||
"name": "tun0",
|
||
"mtu": 1500, // tun 网络适配器的最大传输单元。建议设置为 1500。
|
||
"tag": "tun", // 生成的流量的入站流量标签。
|
||
"ips": [
|
||
{
|
||
"ip": [192, 18, 0, 1],
|
||
"prefix": 24
|
||
}
|
||
],
|
||
"routes": [
|
||
{
|
||
"ip": [0, 0, 0, 0],
|
||
"prefix": 0
|
||
}
|
||
],
|
||
"enablePromiscuousMode": true, // 是否开启混杂模式。建议设置为 true。
|
||
"enableSpoofing": true, // 是否开启 IP 欺骗。建议设置为 true。
|
||
"packetEncoding": "None", // ["None" | "Packet"],UDP 包的编码方式,默认为 None。当此值为 None 时,UDP 连接将根据其目标地址(地址和端口映射)被分成流。当此值为 Packet 时,来自单个源连接的 UDP 连接将被编码为 UDP 数据包地址连接,并通过受支持的出站作为端点独立映射 UDP 连接恢复到其原始形式。这种 UDP 行为也被称为 FullCone 或 NAT1。
|
||
"sniffingSettings": { // tun 入站连接的流量探测设置。流量探测允许路由根据连接的内容和元数据转发连接。(v5.11.0+)
|
||
"enabled": true,
|
||
"destinationOverride": [
|
||
"http",
|
||
"tls",
|
||
"quic",
|
||
"fakedns",
|
||
"fakedns+others"
|
||
],
|
||
"metadataOnly": true
|
||
}
|
||
}
|
||
*/
|
||
}
|
||
} |