V2Ray 是 Project V 下的一个工具。Project V 是一个包含一系列构建特定网络环境工具的项目,而 V2Ray 属于最核心的一个。

官方中介绍

Project V 提供了单一的内核和多种界面操作方式。内核(V2Ray)用于实际的网络交互、路由等针对网络数据的处理,而外围的用户界面程序提供了方便直接的操作流程。

V2Ray是一个与 Shadowsocks 类似的代理软件,但设计理念与ss相比甚是复杂。Shadowsocks 功能单一,V2Ray 功能强大。换一个角度来看,Shadowsocks 简单好上手,V2Ray 复杂配置多。

既然 V2Ray 复杂,为什么要用它?

相对来说,V2Ray 有以下优势:

  • 更完善的协议: V2Ray 使用了新的自行研发的 VMess 协议,改正了 Shadowsocks 一些已有的缺点
  • 更强大的性能: 网络性能更好,具体数据可以看 V2Ray 官方博客
  • 更丰富的功能: 以下是部分 V2Ray 的功能

    • mKCP: KCP 协议在 V2Ray 上的实现,不必另行安装 kcptun
    • 动态端口:动态改变通信的端口,对抗对长时间大流量端口的限速封锁
    • 路由功能:可以随意设定指定数据包的流向,去广告、反跟踪都可以
    • 传出代理:类似于 Tor ,将数据包多次转手来避免追踪。
    • 数据包伪装:类似于 Shadowsocks-rss 的混淆,另外对于 mKCP 的数据包也可伪装,伪装常见流量,令识别更困难
    • WebSocket 协议:可以 PaaS 平台搭建V2Ray,通过 WebSocket 代理。也可以通过它使用 CDN 中转,抗封锁效果更好
    • Mux:多路复用,进一步提高科学上网的并发性能

V2ray的安装

配置

V2ray的传入(inbounds)与传出(outbounds)的设计方式

V2ray的传入(inbounds)与传出(outbounds)的设计方式

  • 需要配置至少一个入站协议(Inbound)和一个出站协议(Outbound)才可以正常工作。
  • 当有多个出站协议时,可以配置路由(Routing)来指定某一类流量由某一个出站协议发出。

开始动手

V2Ray 的配置文件为 JSON 格式,配置文件形式如下,客户端和服务器通用一种形式,只是实际的配置不一样。详细的说明文档在官网。每一个V2ray配置文件,都是一组传入(inbounds)与传出(outbounds)的对应列表。

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

以下是服务器配置,将服务器 /etc/v2ray 目录下的 config.json 文件修改成下面的内容,修改完成后要重启 V2Ray 才会使修改的配置生效。

{
  "inbounds": [
    {
      "port": 16823, // 服务器监听端口
      "protocol": "vmess",    // 主传入协议
      "settings": {
        "clients": [
          {
            "id": "b831381d-6324-4d53-ad4f-8cda48b30811",  // 用户 ID,即随机字符串,客户端与服务器必须相同
            "alterId": 64
          }
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",  // 主传出协议
      "settings": {}
    }
  ]
}
  • 相对应的 VMess 传入传出的 id 必须相同,id就是传入与传出组合的标记,对应id即使用对应的传输通道。可以简单理解成服务器与客户端的 id 必须相同。
  • 由于 id 使用的是 UUID 的格式,我们可以使用任何 UUID 生成工具生成 UUID 作为这里的 id。比如 UUID Generator 这个网站,只要一打开或者刷新这个网页就可以得到一个 UUID,如下图。或者可以在 Linux 使用命令 cat /proc/sys/kernel/random/uuid 生成。

如果你使用了基本的客户端,也就是一个正常的运行于命令行的V2ray程序,也需要配置一个config.json。如果你使用了一个图形化的客户端(图形化客户端也是基于一个正常的命令行V2ray程序运行的),则只需要填写对应配置属性即可。

以下是客户端配置,将客户端的 config.json 文件修改成下面的内容,修改完成后要重启 V2Ray 才会使修改的配置生效。

{
  "inbounds": [
    {
      "port": 1080, // 监听端口
      "protocol": "socks", // 入口协议为 SOCKS 5
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"  //socks的认证设置,noauth 代表不认证,由于 socks 通常在客户端使用,所以这里不认证
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess", // 出口协议
      "settings": {
        "vnext": [
          {
            "address": "serveraddr.com", // 服务器地址,请修改为你自己的服务器 IP 或域名
            "port": 16823,  // 服务器端口
            "users": [
              {
                "id": "b831381d-6324-4d53-ad4f-8cda48b30811",  // 用户 ID,必须与服务器端配置相同
                "alterId": 64 // 此处的值也应当与服务器相同
              }
            ]
          }
        ]
      }
    }
  ]
}

无论是客户端还是服务器,配置文件都由两部分内容组成: inbounds和 outbounds。每一个 V2Ra 都是一个节点,inbound是关于如何与上一个节点连接的配置,outbound是关于如何与下一个节点连接的配置。对于第一个节点,inbound与浏览器连接;对于最后一个节点,outbound与目标网站连接。

客户端配置中的inbounds,port为 1080,即V2Ray监听了一个端口1080,协议是socks。这与ssr的原理是一样的。

数据包流程。

{浏览器} <--(socks)--> {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <--(VMess)-->  {V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <--(Internet)--> {目标网站}

参考资料

https://www.v2ray.com/
https://toutyrater.github.io/
以及万能的谷歌

Last modification:December 14th, 2019 at 10:27 pm