跳转到正文
文章目录

一、V2Ray的本质与核心功能

1.1 什么是V2Ray

V2Ray是Project V项目的核心工具,本质上是一个模块化的网络代理平台。它不仅仅是简单的代理软件,而是一个功能强大的网络流量处理框架。V2Ray的设计哲学是提供灵活、可扩展的架构,让用户能够根据需求自由组合各种协议和功能模块。

V2Ray的核心能力包括:

  • 协议转换与封装
  • 流量路由与分流
  • 数据加密与混淆
  • 多入站多出站支持
  • 灵活的规则匹配系统

1.2 工作原理

V2Ray采用经典的客户端-服务器架构,但其内部运作远比传统代理复杂。数据流经过多个处理层:接收层(Inbound)接收来自应用的请求,路由层(Router)根据规则决定流量走向,出站层(Outbound)将流量发送到目标或下一跳代理。整个过程中,V2Ray可以对数据进行加密、混淆、分片等处理。

关键特性是其模块化设计。每个功能都是独立模块,可以自由组合。例如,你可以用VMess协议接收流量,通过WebSocket传输,外层套TLS加密,最终通过CDN分发,形成多层防护。

1.3 与其他代理工具的区别

相比Shadowsocks,V2Ray提供了更丰富的协议选择和更复杂的路由能力。Shadowsocks专注于简单高效,而V2Ray追求功能完备和灵活配置。V2Ray支持协议链、动态端口、路径分流等高级特性,适合复杂网络环境。

二、核心配置结构

V2Ray使用JSON格式配置文件,主要包含以下几个顶级对象:

</> JSON
{
  "log": {},
  "api": {},
  "dns": {},
  "routing": {},
  "policy": {},
  "inbounds": [],
  "outbounds": [],
  "transport": {},
  "stats": {},
  "reverse": {}
}

2.1 日志配置(log)

日志模块控制V2Ray的运行信息输出,对调试和监控至关重要。

</> JSON
{
  "log": {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  }
}

参数说明:

  • access: 访问日志路径,记录所有连接信息,设为空字符串则输出到stdout
  • error: 错误日志路径,记录运行错误
  • loglevel: 日志级别,可选debug、info、warning、error、none,debug会输出最详细信息但影响性能

实际使用中,生产环境建议使用warning级别,开发调试时用debug。日志文件会快速增长,需要配置logrotate定期清理。

2.2 入站连接(inbounds)

入站配置定义V2Ray如何接收来自客户端应用的连接。

SOCKS代理入站

</> JSON
{
  "inbounds": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true,
        "ip": "127.0.0.1"
      },
      "tag": "socks-in"
    }
  ]
}

SOCKS是最常用的本地代理协议,几乎所有应用都支持。这里配置了无认证的SOCKS5服务器,监听本地1080端口,同时支持UDP流量。tag是标签,用于路由规则中引用此入站。

HTTP代理入站

</> JSON
{
  "port": 8080,
  "protocol": "http",
  "settings": {
    "timeout": 0,
    "accounts": [
      {
        "user": "username",
        "pass": "password"
      }
    ],
    "allowTransparent": false
  },
  "tag": "http-in"
}

HTTP代理更适合浏览器使用,支持用户认证。timeout为0表示无超时限制。accounts数组可配置多个用户,省略则无需认证。

VMess入站(服务端)

</> JSON
{
  "port": 16823,
  "protocol": "vmess",
  "settings": {
    "clients": [
      {
        "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
        "alterId": 0,
        "email": "user@example.com",
        "level": 0
      }
    ]
  },
  "streamSettings": {
    "network": "tcp"
  },
  "tag": "vmess-in"
}

VMess是V2Ray原创协议,提供强加密和防重放攻击。id是UUID格式的用户标识,必须与客户端完全一致。alterId是额外ID数量,新版本推荐设为0。level代表用户等级,影响策略配置。

2.3 出站连接(outbounds)

出站配置定义流量如何发送到目标服务器或下一跳。

直连出站

</> JSON
{
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
    }
  ]
}

freedom协议表示直接连接,不经过任何代理。这是最基础的出站,通常作为默认路由或国内流量出口。

VMess出站(客户端)

</> JSON
{
  "protocol": "vmess",
  "settings": {
    "vnext": [
      {
        "address": "server.example.com",
        "port": 16823,
        "users": [
          {
            "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
            "alterId": 0,
            "security": "auto",
            "level": 0
          }
        ]
      }
    ]
  },
  "streamSettings": {
    "network": "tcp",
    "security": "none"
  },
  "tag": "proxy"
}

vnext数组支持配置多个服务器实现负载均衡。address可以是域名或IP。security参数控制加密方式,auto表示自动选择,可选aes-128-gcm、chacha20-poly1305等。

Shadowsocks出站

</> JSON
{
  "protocol": "shadowsocks",
  "settings": {
    "servers": [
      {
        "address": "ss.example.com",
        "port": 8388,
        "method": "aes-256-gcm",
        "password": "your-password",
        "level": 0
      }
    ]
  },
  "tag": "ss-proxy"
}

V2Ray可以作为Shadowsocks客户端,连接SS服务器。method支持多种加密算法,推荐使用AEAD加密如aes-256-gcm或chacha20-ietf-poly1305。

Blackhole出站

</> JSON
{
  "protocol": "blackhole",
  "settings": {
    "response": {
      "type": "http"
    }
  },
  "tag": "block"
}

黑洞出站直接丢弃流量,常用于广告过滤。response类型可以是http或none,http会返回HTTP 403响应,none则直接断开连接。

2.4 路由配置(routing)

路由是V2Ray最强大的功能之一,可以实现精确的流量分流。

</> JSON
{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "domainMatcher": "hybrid",
    "rules": [
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:cn",
          "geoip:private"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:category-ads-all"
        ],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "protocol": ["bittorrent"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "port": "0-65535",
        "outboundTag": "proxy"
      }
    ]
  }
}

参数详解:

domainStrategy 域名解析策略:

  • AsIs: 使用域名直接匹配,不解析IP
  • IPIfNonMatch: 当域名规则不匹配时才解析IP进行匹配
  • IPOnDemand: 优先使用IP规则匹配,需要时才用域名

domainMatcher 域名匹配算法:

  • linear: 线性匹配,简单但较慢
  • hybrid: 混合匹配,使用AC自动机和正则,性能更好

规则类型:

域名规则支持多种格式:

  • "domain:example.com" 匹配该域名及所有子域名
  • "full:www.example.com" 完全匹配
  • "regexp:.cn$" 正则表达式匹配
  • "geosite:cn" 使用预定义的域名集合

IP规则同样灵活:

  • "1.2.3.4" 单个IP
  • "10.0.0.0/8" CIDR格式
  • "geoip:cn" 地理位置IP库

路由规则按顺序匹配,第一条匹配的规则生效。上面的配置实现了:国内域名和IP直连,广告域名拦截,BT流量直连,其他流量走代理。

2.5 DNS配置

DNS配置影响域名解析行为,对分流效果至关重要。

</> JSON
{
  "dns": {
    "hosts": {
      "domain:v2ray.com": "www.vicemc.net",
      "geosite:category-ads-all": "127.0.0.1"
    },
    "servers": [
      {
        "address": "https://1.1.1.1/dns-query",
        "domains": [
          "geosite:geolocation-!cn"
        ]
      },
      {
        "address": "223.5.5.5",
        "domains": [
          "geosite:cn"
        ],
        "expectIPs": [
          "geoip:cn"
        ]
      },
      "8.8.8.8",
      "localhost"
    ],
    "queryStrategy": "UseIPv4",
    "disableCache": false,
    "disableFallback": false
  }
}

hosts 静态域名映射,可实现域名重定向或广告屏蔽。

servers DNS服务器列表,支持配置不同域名使用不同DNS:

  • 国外域名用DoH(DNS over HTTPS)避免污染
  • 国内域名用国内DNS保证解析速度
  • expectIPs用于DNS验证,如果解析结果不在指定IP范围则认为被污染

queryStrategy 查询策略:

  • UseIP: 同时查询A和AAAA记录
  • UseIPv4: 仅查询A记录
  • UseIPv6: 仅查询AAAA记录

DNS防污染是科学上网的关键环节。合理配置可以避免解析到错误IP,提高连接成功率。

2.6 传输层配置(streamSettings)

传输层决定数据如何封装和传输,影响性能和隐蔽性。

TCP传输

</> JSON
{
  "streamSettings": {
    "network": "tcp",
    "security": "none",
    "tcpSettings": {
      "header": {
        "type": "http",
        "request": {
          "version": "1.1",
          "method": "GET",
          "path": ["/"],
          "headers": {
            "Host": ["www.example.com"],
            "User-Agent": [
              "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
            ],
            "Accept-Encoding": ["gzip, deflate"],
            "Connection": ["keep-alive"]
          }
        }
      }
    }
  }
}

TCP是最基础的传输方式,延迟低性能好。http伪装可以让流量看起来像普通HTTP请求,增加隐蔽性。header配置需要合理,避免特征过于明显。

WebSocket传输

</> JSON
{
  "streamSettings": {
    "network": "ws",
    "security": "tls",
    "wsSettings": {
      "path": "/v2ray",
      "headers": {
        "Host": "www.example.com"
      }
    },
    "tlsSettings": {
      "serverName": "www.example.com",
      "allowInsecure": false,
      "alpn": ["http/1.1"],
      "certificates": [
        {
          "certificateFile": "/path/to/cert.pem",
          "keyFile": "/path/to/key.pem"
        }
      ]
    }
  }
}

WebSocket非常适合配合TLS使用,流量完全符合HTTPS标准。path可以自定义,增加识别难度。tlsSettings中,allowInsecure为false表示严格验证证书,生产环境必须如此。alpn(Application-Layer Protocol Negotiation)指定支持的应用层协议。

HTTP/2传输

</> JSON
{
  "streamSettings": {
    "network": "h2",
    "security": "tls",
    "httpSettings": {
      "host": ["www.example.com"],
      "path": "/v2ray"
    },
    "tlsSettings": {
      "serverName": "www.example.com",
      "alpn": ["h2"]
    }
  }
}

HTTP/2具有多路复用特性,性能优于WebSocket,但必须配合TLS使用。浏览器的HTTP/2流量可以与V2Ray流量混合,进一步提高隐蔽性。

QUIC传输

</> JSON
{
  "streamSettings": {
    "network": "quic",
    "security": "none",
    "quicSettings": {
      "security": "aes-128-gcm",
      "key": "your-encryption-key",
      "header": {
        "type": "wechat-video"
      }
    }
  }
}

QUIC基于UDP,在网络切换时表现更好,移动端优势明显。header伪装可以模拟微信视频通话等流量特征。但QUIC的UDP流量在某些网络环境可能被限制。

gRPC传输

</> JSON
{
  "streamSettings": {
    "network": "grpc",
    "security": "tls",
    "grpcSettings": {
      "serviceName": "GunService",
      "multiMode": true
    },
    "tlsSettings": {
      "serverName": "www.example.com",
      "alpn": ["h2"]
    }
  }
}

gRPC是新兴的传输方式,基于HTTP/2,性能出色。serviceName需要服务端客户端一致。multiMode启用多路复用,提高并发性能。gRPC流量特征与正常API调用无异,隐蔽性极佳。

2.7 策略配置(policy)

策略控制不同用户的权限和资源使用。

</> JSON
{
  "policy": {
    "levels": {
      "0": {
        "handshake": 4,
        "connIdle": 300,
        "uplinkOnly": 2,
        "downlinkOnly": 5,
        "statsUserUplink": true,
        "statsUserDownlink": true,
        "bufferSize": 512
      }
    },
    "system": {
      "statsInboundUplink": true,
      "statsInboundDownlink": true,
      "statsOutboundUplink": true,
      "statsOutboundDownlink": true
    }
  }
}

levels 用户级别配置:

  • handshake: 握手超时时间(秒)
  • connIdle: 连接空闲超时(秒)
  • uplinkOnly: 上行空闲超时
  • downlinkOnly: 下行空闲超时
  • bufferSize: 缓冲区大小(KB),影响内存占用和性能

system 系统级别统计开关,启用后可以通过API查询流量统计。

三、高级配置技巧

3.1 多出站负载均衡

</> JSON
{
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {"address": "server1.com", "port": 443, "users": [...]},
          {"address": "server2.com", "port": 443, "users": [...]},
          {"address": "server3.com", "port": 443, "users": [...]}
        ]
      },
      "tag": "proxy"
    }
  ]
}

在单个出站配置多个服务器,V2Ray会自动进行负载均衡。可以提高可用性,单个服务器故障时自动切换。

3.2 链式代理

</> JSON
{
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {...},
      "tag": "proxy1",
      "proxySettings": {
        "tag": "proxy2"
      }
    },
    {
      "protocol": "shadowsocks",
      "settings": {...},
      "tag": "proxy2"
    }
  ]
}

proxySettings让一个出站通过另一个出站连接,实现代理链。可以组合不同协议,增加安全性和隐蔽性,但会增加延迟。

3.3 动态端口

</> JSON
{
  "inbounds": [
    {
      "protocol": "vmess",
      "port": 10000,
      "settings": {
        "clients": [...],
        "detour": {
          "to": "vmess-detour"
        }
      },
      "tag": "vmess-in"
    },
    {
      "protocol": "vmess",
      "port": "10001-10100",
      "tag": "vmess-detour",
      "settings": {},
      "allocate": {
        "strategy": "random",
        "refresh": 5,
        "concurrency": 8
      }
    }
  ]
}

动态端口通过detour指向端口范围,定期更换端口号。strategy为random表示随机选择,refresh是刷新间隔(分钟),concurrency是并发端口数。这种方式可以对抗端口封锁,但配置较复杂。

3.4 透明代理

</> JSON
{
  "inbounds": [
    {
      "port": 12345,
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "followRedirect": true
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "tag": "transparent"
    }
  ]
}

dokodemo-door协议可以接收重定向流量,配合iptables实现全局透明代理。sniffing启用流量探测,destOverride让V2Ray能识别HTTP和TLS协议,提取真实目标地址。

iptables规则示例:

</> BASH
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 12345

3.5 反向代理

</> JSON
{
  "reverse": {
    "bridges": [
      {
        "tag": "bridge",
        "domain": "internal.example.com"
      }
    ],
    "portals": [
      {
        "tag": "portal",
        "domain": "internal.example.com"
      }
    ]
  }
}

反向代理让公网服务器访问内网机器,实现内网穿透。bridge运行在内网,主动连接到portal(公网服务器)。访问portal的流量会转发到bridge,再由bridge转发到内网目标。

四、实战配置案例

4.1 客户端完整配置

</> JSON
{
  "log": {
    "loglevel": "warning"
  },
  "dns": {
    "servers": [
      {
        "address": "https://1.1.1.1/dns-query",
        "domains": ["geosite:geolocation-!cn"]
      },
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"],
        "expectIPs": ["geoip:cn"]
      },
      "localhost"
    ]
  },
  "inbounds": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "udp": true
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "tag": "socks-in"
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "server.example.com",
            "port": 443,
            "users": [
              {
                "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
                "alterId": 0,
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/v2ray"
        },
        "tlsSettings": {
          "serverName": "server.example.com",
          "allowInsecure": false
        }
      },
      "tag": "proxy"
    },
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "domain": ["geosite:category-ads-all"],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn", "geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "udp",
        "port": "443",
        "outboundTag": "block"
      },
      {
        "type": "field",
        "protocol": ["bittorrent"],
        "outboundTag": "direct"
      }
    ]
  }
}

这是典型的客户端配置,实现了国内外分流、广告过滤、防DNS泄露。WebSocket+TLS伪装成HTTPS流量,安全性和隐蔽性都很好。

4.2 服务端完整配置

</> JSON
{
  "log": {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "port": 443,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
            "alterId": 0,
            "level": 0,
            "email": "user1@example.com"
          },
          {
            "id": "e55c8d17-2c89-40a0-a43d-68f3e7b61b28",
            "alterId": 0,
            "level": 0,
            "email": "user2@example.com"
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/v2ray"
        },
        "tlsSettings": {
          "certificates": [
            {
              "certificateFile": "/etc/v2ray/cert.pem",
              "keyFile": "/etc/v2ray/key.pem"
            }
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    },
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "blocked"
      }
    ]
  },
  "policy": {
    "levels": {
      "0": {
        "handshake": 4,
        "connIdle": 300,
        "uplinkOnly": 2,
        "downlinkOnly": 5
      }
    }
  }
}

服务端配置相对简单,主要负责接收客户端连接并转发流量。支持多用户,通过不同UUID区分。阻止访问内网IP防止被利用攻击内网。

五、性能优化与安全建议

5.1 性能优化

缓冲区大小:根据网络环境调整bufferSize,高带宽环境可以增大到1024KB或更高。

DNS缓存:保持disableCache为false,减少DNS查询次数。

Mux多路复用:

</> JSON
{
  "mux": {
    "enabled": true,
    "concurrency": 8
  }
}

在出站配置中启用mux可以减少TCP握手次数,提高并发性能,特别适合高延迟网络。

选择合适的加密算法:aes-128-gcm在有硬件加速时性能最好,chacha20-poly1305在移动设备上更优。

5.2 安全建议

定期更换UUID和端口:避免长期使用相同配置被识别。

使用有效TLS证书:自签名证书容易被检测,使用Let's Encrypt等免费证书。

流量伪装:WebSocket+TLS+CDN是目前最安全的组合,流量完全符合HTTPS标准。

限制连接数:在policy中设置合理的超时和并发限制,防止资源耗尽。

日志管理:定期清理日志文件,避免敏感信息泄露和磁盘空间耗尽。

防火墙配置:仅开放必要端口,使用fail2ban等工具防止暴力破解。

六、故障排查

6.1 连接失败

检查顺序:服务端是否运行 → 端口是否开放 → 证书是否有效 → UUID是否匹配 → 时间是否同步(VMess对时间敏感,误差不能超过90秒)。

使用v2ray -test -config config.json测试配置文件语法。

6.2 速度慢

可能原因:服务器带宽不足、路由不佳、加密算法性能差、mux配置不当。尝试更换传输协议,调整缓冲区大小,启用或禁用mux测试效果。

6.3 流量特征被识别

升级到最新版本,使用WebSocket+TLS+CDN,配置合理的HTTP头,避免使用默认路径和端口。考虑使用gRPC或其他新传输方式。

结语

V2Ray是功能强大的网络工具,其灵活性和可扩展性提供了几乎无限的可能。本文介绍了从基础到高级的各类配置,但实际使用中还需要根据具体网络环境和需求进行调整。掌握V2Ray的核心原理和配置逻辑后,你可以设计出最适合自己的方案。记住,没有完美的配置,只有最适合当前场景的配置。持续学习和实践是精通V2Ray的唯一途径。

评论

搜索站内内容

输入关键词开始搜索