V2Ray基本使用教程与运行原理

V2Ray基本使用教程与运行原理

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)的对应列表。

1
2
3
4
5
6
7
8
9
10
11
12
{
"log": {},
"api": {},
"dns": {},
"stats": {},
"routing": {},
"policy": {},
"reverse": {},
"inbounds": [],
"outbounds": [],
"transport": {}
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"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 才会使修改的配置生效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"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的原理是一样的。

数据包流程。

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

参考资料

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

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×