v2ray-examples/v5/General/configv5-example.json

1360 lines
50 KiB
JSON
Raw Permalink Normal View History

/*
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 { nextProtocoldisableSystemRoot }
MuxMux TCP TCP Mux.CoolMux 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 configdestOverrideservices使raw jsonInboundConfigdestOverridedestinationOverride
balancerTag tag balancerTag
services
outboundTag balancerTag outbound
访
V2Ray
使 Shadowsocks V2Ray(VMess)
使
使 streamSettings TLS HTTP TCP
proxy vmess+wsvmess+ws 访 proxy IP proxy
-> proxy -> vmess+ws -> vmess+ws -> proxy ->
backgroundObservatory burstObservatory
*/
2024-09-14 22:33:01 +01:00
// emmm~ 本配置只是作为 v2ray jsonv5 写法的参考尝试尽量把各个功能配置写法展现出来如果日常使用请先自行精简。DNS 、路由)
2024-09-15 12:57:32 +01:00
// 修复了上一个版本的问题完善一些功能DNS 地址、IP 语法导致匹配问题freedom 协议的功能完善,流量嗅探等等
2024-09-14 22:33:01 +01:00
// 启动命令
// v2ray run -c configv5-example.json -format=jsonv5
2024-09-15 12:57:32 +01:00
//
//
// 官方案例中使用的自签 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
//
//
2024-09-14 22:33:01 +01:00
{
"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。
//
//
2024-09-14 22:33:01 +01:00
{
"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"
}
],
2024-09-15 12:57:32 +01:00
//
//
// 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 服务器。
2024-09-15 12:57:32 +01:00
//
//
2024-09-14 22:33:01 +01:00
"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": {
2024-09-15 12:57:32 +01:00
"address": "tcp+local://223.5.5.5:53"
2024-09-14 22:33:01 +01:00
},
"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": {
2024-09-15 12:57:32 +01:00
"address": "119.29.29.29",
2024-09-14 22:33:01 +01:00
"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+ 弃用)
2024-09-14 22:33:01 +01:00
"tag": "dns"
},
"inbounds": [
/*
Inbounds
{
"listen": "",
"port": "",
"protocol": "vmess",
"settings": {},
"sniffing": {},
"streamSettings": {},
"tag": ""
}
*/
2024-09-14 22:33:01 +01:00
{
"tag": "socks",
"protocol": "socks",
"settings": {
"udpEnabled": true,
"address": "127.0.0.1",
"packetEncoding": "Packet" // Packet 模式适合于实时性要求高的应用:如 VoIP、在线游戏等。需要保证连接稳定的应用如远程桌面、文件传输等。需要穿透 NAT 的应用:如 P2P 应用。None 模式适合于:对连接稳定性要求不高的应用。需要灵活配置路由路径的应用。
2024-09-14 22:33:01 +01:00
},
"port": 7830,
2024-09-15 12:57:32 +01:00
"listen": "127.0.0.1",
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
],
"metadataOnly": true
}
2024-09-14 22:33:01 +01:00
},
{
"tag": "http",
"protocol": "http",
"settings": {},
"port": 7831,
2024-09-15 12:57:32 +01:00
"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"
2024-09-14 22:33:01 +01:00
}
],
"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", // 传输层安全协议TLSuTLSnonexray 还有 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 。如果另一端的主机不支持 MPTCPMPTCP 将回退为普通 TCP。
}
}
*/
/*
Outbounds
{
"protocol": "vmess",
"proxySettings": {},
"sendThrough": "1.2.3.4",
"settings": {},
"streamSettings": {},
"mux": {
"concurrency": 8,
"enabled": false
},
"tag": "demo"
}
*/
2024-09-14 22:33:01 +01:00
{
"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 使用固定的开头方便筛选。
2024-09-14 22:33:01 +01:00
{
"tag": "UDA_hysteria2", // h2_h2
2024-09-14 22:33:01 +01:00
"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",
2024-09-14 22:33:01 +01:00
"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",
2024-09-14 22:33:01 +01:00
"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",
2024-09-14 22:33:01 +01:00
"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",
2024-09-14 22:33:01 +01:00
"protocol": "shadowsocks",
"settings": {
"address": "0.0.0.0",
"method": "aes-256-gcm",
"port": "100000",
"password": "000000000000000000000000000000000000000000"
}
},
{
"tag": "direct",
"protocol": "freedom",
2024-09-15 12:57:32 +01:00
"settings": {},
"mux": {
"domainStrategy": "UseIp", // [ "AsIs" | "UseIP" | "UseIP4" | "UseIP6" ]
"enabled": false,
"concurrency": 8
}
2024-09-14 22:33:01 +01:00
},
{
"tag": "dns-out",
"protocol": "dns",
"settings": {},
"proxySettings": {
"tag": "proxy"
}
},
2024-09-14 22:33:01 +01:00
{
"tag": "block",
"protocol": "blackhole"
},
{
"tag": "loopback-out",
"protocol": "loopback",
"settings": {
"inboundTag": "loopback-in"
}
2024-09-14 22:33:01 +01:00
}
],
//
//
// 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"
]
},
*/
2024-09-14 22:33:01 +01:00
"router": {
"domainStrategy": "IpIfNonMatch", // AsIs | UseIp | IpIfNonMatch | IpOnDemand
"rule": [
{
"tag": "dns-out", // 防火墙重定向类型透明代理时的 dns 劫持
"domainMatcher": "mph",
"portList": "53",
"networks": "udp"
},
2024-09-14 22:33:01 +01:00
{
"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",
2024-09-14 22:33:01 +01:00
"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地址范围一般指定某个 IP32即可。
"domainMatcher": "mph", // geoip
"geoip": [
{
"code": "google"
},
{
"cidr": [
{
2024-09-15 12:57:32 +01:00
"ipAddr": "8.8.4.4", // "prefix" 需要填写,否则导致 IP 匹配出问题。
2024-09-14 22:33:01 +01:00
"prefix": 32
},
{
"ipAddr": "8.8.8.8",
"prefix": 32
},
{
2024-09-15 12:57:32 +01:00
"ipAddr": "1.1.1.1",
"prefix": 32
2024-09-14 22:33:01 +01:00
}
]
}
]
},
{
"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地址范围一般指定某个 IP32即可。
"domainMatcher": "mph", // geoip
"geoip": [
{
"code": "private"
},
{
"cidr": [
{
2024-09-15 12:57:32 +01:00
"ipAddr": "223.5.5.5",
2024-09-14 22:33:01 +01:00
"prefix": 32
},
{
"ipAddr": "119.29.29.29",
"prefix": 32
},
{
2024-09-15 12:57:32 +01:00
"ipAddr": "114.114.114.114",
"prefix": 32
2024-09-14 22:33:01 +01:00
}
]
}
]
},
{
"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"
}
]
2024-09-14 22:33:01 +01:00
},
"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 的网络栈,与代理服务端建立 TLSHTTP 连接。
// 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
}
}
*/
}
2024-09-14 22:33:01 +01:00
}