V2Ray规则配置指南:提升你的网络自由度
V2Ray 是一款功能强大且高度灵活的网络代理工具,其核心优势之一便是其精妙的路由机制。通过对路由规则的精细化配置,用户能够实现对网络流量的精准控制,例如区分国内外流量、绕过特定网站、甚至阻止广告,从而显著提升网络使用的自由度、安全性和效率。本指南将深入探讨 V2Ray 的路由规则配置方法。
1. V2Ray 路由机制概述
V2Ray 的路由功能允许用户根据预设的规则,将不同的网络连接导向不同的出站代理(outbound)。当一个入站连接(inbound)进入 V2Ray 后,V2Ray 会依据配置文件中 routing 部分定义的规则列表,从上到下逐一进行匹配。一旦有规则匹配成功,该连接就会被路由到该规则所指定的出站代理。
核心配置位于 V2Ray 配置文件的 routing 字段中,它是一个对象,通常包含以下主要部分:
json
{
"routing": {
"domainStrategy": "IPIfNonMatch", // 域名解析策略
"rules": [
// 路由规则数组
],
"balancers": [] // 负载均衡器 (V2Ray 4.4+), 用于在多个出站之间分配流量
}
}
domainStrategy (域名解析策略)
此字段定义了 V2Ray 处理域名解析的策略,对路由的准确性至关重要。主要有三种选项:
"AsIs": (默认值) V2Ray 仅使用原始域名进行路由匹配。如果域名没有匹配任何规则,V2Ray 不会尝试解析其 IP 地址。"IPIfNonMatch": 当域名没有匹配任何规则时,V2Ray 会尝试将域名解析为 IP 地址(A 或 AAAA 记录),然后使用解析到的 IP 地址再次尝试匹配所有规则。如果一个域名有多个 IP 地址,V2Ray 会尝试所有这些 IP 地址。请注意,解析到的 IP 仅用于路由决策,实际流量仍会发送到原始域名地址。"IPOnDemand": 只要遇到基于 IP 的规则,V2Ray 就会立即解析域名为 IP 地址进行匹配。
在大多数情况下,"IPIfNonMatch" 是一个推荐的策略,因为它能够在域名规则不匹配时提供更准确的 IP 匹配能力,尽管额外的解析过程可能会稍慢。
2. 路由规则 (rules 数组)
rules 字段是一个数组,其中每个元素都是一个 RuleObject,定义了一条具体的路由规则。V2Ray 会按照数组中规则的顺序从上到下进行匹配。
一个典型的 RuleObject 结构及其关键字段说明如下:
json
{
"type": "field", // 规则类型,通常为 "field"
"outboundTag": "proxy", // (必需) 匹配成功后流量导向的出站代理标签
"domain": ["example.com", "geosite:cn"], // 域名匹配规则列表
"ip": ["192.168.1.0/24", "geoip:cn"], // IP 地址匹配规则列表
"port": "80-100", // 端口匹配规则,可以是单个端口或范围
"network": "tcp", // 网络协议类型,如 "tcp", "udp"
"source": ["192.168.0.0/16"], // 源 IP 地址匹配规则列表
"user": ["myuser"], // 用户 ID 匹配规则列表
"inboundTag": ["tag-in"], // 入站代理标签匹配规则列表
"protocol": ["http"] // 应用层协议匹配规则列表,如 "http", "tls"
}
关键字段详解:
outboundTag: (必需) 当规则匹配成功时,连接将被路由到具有此标签的出站代理。这是每条规则的最终目的。domain: 用于匹配目标域名。ip: 用于匹配目标 IP 地址。port: 用于匹配目标端口,可以是单个端口(如"80")、多个端口(如"80,443")或端口范围(如"80-100")。network: 用于匹配连接的网络协议,例如"tcp"、"udp"。source: 用于匹配连接的源 IP 地址。user: 当配合某些入站协议(如dokodemo-door)时,可以匹配特定用户。inboundTag: 用于匹配来自特定入站代理的连接。protocol: 用于匹配应用层协议,例如"http"、"tls"、"bittorrent"等。
3. 规则类型详解
3.1 域名匹配 (domain)
domain 字段支持多种匹配模式,提供了极大的灵活性:
- 精确匹配: 直接写域名,例如
"v2ray.com"。这只会匹配v2ray.com,不会匹配www.v2ray.com。 - 子域名匹配: 使用
domain:前缀,例如"domain:v2ray.com"。这将匹配v2ray.com及其所有子域名,如www.v2ray.com、blog.v2ray.com。 - 完整域名匹配: 使用
full:前缀,例如"full:www.google.com"。与精确匹配类似,但更明确。 - 关键词匹配: 使用
keyword:前缀,例如"keyword:google"。只要域名中包含 “google” 就会匹配。 - 正则表达式匹配: 使用
regexp:前缀,例如"regexp:\\.google\\."。使用 Go 语言的正则表达式语法。 - 预定义域名列表 (
geosite:): V2Ray 提供了geosite.dat文件,其中包含了按国家或服务分类的域名列表。- 例如:
"geosite:cn"匹配所有中国大陆的网站。 "geosite:google"匹配所有 Google 相关的网站。"geosite:geolocation-!cn"匹配所有非中国大陆的网站。"geosite:category-ads"匹配广告域名。geosite列表还可以包含属性,例如geosite:google@ads可以匹配 Google 相关的广告域名。
- 例如:
- 外部域名列表 (
ext:): 允许从外部文件加载域名列表。例如"ext:file:tag",其中file是资源目录中的文件名,tag是文件中的标签。
重要提示: 在 V2Ray 规则中,* 不作为通配符使用。如果需要匹配子域名,请务必使用 domain: 前缀。
3.2 IP 地址匹配 (ip)
ip 字段支持以下匹配模式:
- CIDR 格式: 例如
"192.168.0.0/16",用于匹配一个 IP 地址段。 - 预定义 IP 列表 (
geoip:): V2Ray 提供了geoip.dat文件,其中包含了按国家或类型分类的 IP 地址段。- 例如:
"geoip:cn"匹配所有中国大陆的 IP 地址。 "geoip:private"匹配私有网络 IP 地址。"geoip:geolocation-!cn"匹配所有非中国大陆的 IP 地址。
- 例如:
4. geosite.dat 和 geoip.dat
geosite.dat 和 geoip.dat 是 V2Ray 用于路由判断的两个重要数据文件。它们包含了大量的域名和 IP 地址信息,极大地简化了规则配置,避免了用户手动维护庞大列表的麻烦。
geosite.dat: 包含按国家、服务或类别划分的域名列表。geoip.dat: 包含按国家或类型划分的 IP 地址段。
这些文件通常随 V2Ray 核心一同发布。为了获得更全面和及时的规则,社区也维护了增强版的数据文件,例如 Loyalsoldier/v2ray-rules-dat,用户可以自行选择使用。
5. 配置示例
以下是一些常见的 V2Ray 路由规则配置示例,帮助您理解如何实际应用这些规则。
示例 1: 简单直连/代理分流(国内外流量分流)
将中国大陆 IP 和域名直连,其他所有流量通过代理。
json
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private", "geoip:cn"], // 私有网络和中国大陆 IP 直连
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"], // 中国大陆域名直连
"outboundTag": "direct"
},
{
"type": "field",
"outboundTag": "proxy" // 其他所有流量走代理
}
]
},
"outbounds": [
{
"protocol": "freedom", // freedom 出站用于直连
"settings": {},
"tag": "direct"
},
{
"protocol": "vmess", // 你的代理出站配置
"settings": {
// ... 你的VMess或其他代理配置
},
"tag": "proxy"
}
// ... 其他出站配置
]
}
示例 2: 阻止广告和特定网站
将广告域名和特定网站(例如 example.com)导向 blackhole 出站,以达到阻止访问的目的。
json
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["geosite:category-ads", "domain:example.com"], // 阻止广告和 example.com
"outboundTag": "block" // 导向 blackhole 出站
},
{
"type": "field",
"ip": ["geoip:private", "geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"outboundTag": "proxy"
}
]
},
"outbounds": [
{
"protocol": "blackhole", // blackhole 出站用于阻止流量
"settings": {},
"tag": "block"
},
{
"protocol": "freedom", // freedom 出站用于直连
"settings": {},
"tag": "direct"
},
{
"protocol": "vmess", // 你的代理出站配置
"settings": {
// ... 你的VMess或其他代理配置
},
"tag": "proxy"
}
// ... 其他出站配置
]
}
6. 注意事项
- 规则顺序至关重要: V2Ray 路由规则是按顺序匹配的。一旦某个连接匹配成功一条规则,后续的规则将不再生效。因此,更具体或需要优先处理的规则应放置在规则列表的前面。
domain和ip同时使用: 如果一条规则同时包含domain和ip字段,那么只有当连接同时满足这两个条件时,该规则才会匹配成功。- 通配符的限制: V2Ray 的
domain规则中,*不具备通配符功能。若要匹配子域名,请务必使用domain:前缀。
通过深入理解和灵活运用 V2Ray 的路由规则,您可以根据自身的特定需求,定制高度个性化的网络流量策略,从而实现更高级别的网络自由度、安全性和效率。不断尝试和优化您的配置,将 V2Ray 的强大功能发挥到极致。