本文作者:zhujue

V2Ray 配置指南-应用篇

zhujue 2023-12-26 19:54:07 32 抢沙发
V2Ray 配置指南-应用篇摘要: ...

1. 应用篇

本篇名为应用。在本篇当中不再有详尽的配置,最多只会给出配置的结构,及一些注意点。本篇的内容可能分为三种:

  1. 实际验证可行

  2. 理论上可行,但没在 V2Ray 上验证过

  3. 纯属猜测,没有数据或者根据表明可行性

在每节当中,如果符合第 2 或第 3 点,都会特别说明。

如果本篇的内容你看不懂,那么说明:

  1. 不适合你

  2. 你需要学习了

  3. 我的水平太差


1. 透明代理

透明代理是什么意思请自行 Google,在这儿指使用 V2Ray 做透明代理实现路由器翻墙。然而,我个人认为路由器翻墙的说法并不准确,应该叫网关翻墙。所以本例实际上是关于网关翻墙的内容。当然了,单纯使用路由器翻墙也是可以的,因为普通的家用路由器本就是一个网关。使用网关翻墙可以使局域网内的所有设备都具有直接翻墙的能力,并且能够全局代理,而不必每台设备都安装 V2Ray,配置更新时只需在网关修改配置,用一些网友的话说就是就感觉没有墙一样。但是,有意上透明代理的同学请评估一下透明代理是否合适自己,而不要盲目跟风。

透明代理适用于以下情况:

  • 局域网设备较多,比如说办公室、实验室、子孙满堂的家庭等;

  • 设备(的软件)无法/不方便设置代理,比如说 Chromecast、电视盒子等;

  • 希望设备的所有软件都走代理。

不适用于:

  • 随便拿个垃圾路由器就想上的

1.1. 优点

其实,V2Ray 早就可以作透明代理,当时我也研究了好一段时间,最终是折腾出来了。但是由于 DNS 的问题,我用着总感觉不太舒服。虽然有 ChinaDNS 这类的解决方案,但个人主观上并不喜欢。 不过嘛,现在就不一样了。就目前来说,使用 V2Ray 透明代理:

  1. 解决了墙外 DNS 污染问题;

  2. 在解决了 1 的情况下国内域名的即能够解析到国内 CDN;

  3. 不需要外部软件或自建 DNS 就可决绝 1 和 2 的问题,只要系统支持 V2Ray 和 iptables;

  4. 能够完美利用 V2Ray 强大而灵活的路由功能,而不必额外维护一个路由表;

1.2. 准备

  • 一个有能力根据实际情况解决遇到问题的人

  • 一台已经搭建 V2Ray 并能正常使用的 VPS ,本文假设 IP 为 110.231.43.65

  • 一台带 iptables、有 root 权限并且系统为 Linux 的设备,假设地址为 192.168.1.22,已经配置好 V2Ray 作为客户端。这个设备可以是路由器、开发板、个人电脑、虚拟机和 Android 设备等,更具普适性地称之为网关。我个人非常不建议使用 MT7620 系路由器开透明代理,性能太差了,很多固件也没有开启 FPU 。要是真不愿意出这点钱,用电脑开个虚拟机吧(我就是这么干的),VirtualBox、Hyper 之类的都可以,但是别忘了网络模式用网桥。

1.3. 设置步骤

设置步骤如下,假设使用 root。

  1. 网关设备开启 IP 转发。在 /etc/sysctl.conf 文件添加一行 net.ipv4.ip_forward=1 ,执行下列命令生效:

    sysctl -p
  2. 网关设备设置静态 IP,与路由器 LAN 口同一个网段,默认网关为路由器的IP;进入路由器的管理后台,到 DHCP 设定将默认网关地址为网关设备的 IP,本例为 192.168.1.22,或者电脑手机等设备单独设置默认网关,然后电脑/手机重新连接到路由器测试是不是可以正常上网(这时还不能翻墙),如果不能上网先去学习一个把这个搞定,否则接下来再怎么也同样上不了网。网关设备设定静态 IP 是为了避免重启后 IP 会发生变化导致其他设备无法联网;路由器其设定 DHCP 默认网关地址是为了让接入到这个路由器的设备将上网的数据包发到网关设备进行转发。

  3. 在服务器和网关安装最新版本的 V2Ray(如果不会就参照前面的教程,由于 GFW 会恶化 GitHub Releases 的流量,网关直接运行脚本几乎无法安装,建议从 https://v2ray.com/download 下载然后使用 --local 参数进行安装),并配置好配置文件。一定要确定搭建的 V2Ray 能够正常使用。在网关执行 curl -x socks5://127.0.0.1:1080 google.com 测试配置的 V2Ray 是否可以翻墙(命令中 socks5 指 inbound 为 socks,1080 指该 inbound 端口是 1080)。如果出现类似下面的输出则可以翻墙,如果没有出现就说明翻不了,你得仔细检查以下哪步操作不对或漏了。

    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>301 Moved</TITLE></HEAD><BODY>
    <H1>301 Moved</H1>
    The document has moved
    <A HREF="http://www.google.com/">here</A>.
    </BODY></HTML>
  4. 在网关的配置,添加 dokodemo ,并开启 domain override;还要在所有 outbound 的 streamSettins 添加 SO_MARK。配置形如(配置中的...代表原来正常的配置):

    { "inbound": {...}, "outbound": {
       ...   "streamSettings": {
         ...         "sockopt": {           "mark": 255  //这里是 SO_MARK,用于 iptables 识别,每个 outbound 都要配置;255可以改成其他数值,但要与下面的 iptables 规则对应
           }
     }, "inboundDetour": [
       {     "domainOverride": ["tls","http"],     "port": 12345, //开放的端口号
         "protocol": "dokodemo-door",     "settings": {       "network": "tcp,udp",       "followRedirect": true // 这里要为 true 才能接受来自 iptables 的流量
         }
       },
       ...
     ], "outboundDetour": [
       {
         ...     "streamSettings": {
           ...           "sockopt": {             "mark": 255
             }
         },
       {
         ...     "streamSettings": {
           ...           "sockopt": {             "mark": 255
             }
         }
       ...
     ], "routing": {...}
    }
  5. 设定 TCP 透明代理的 iptables 规则,命令如下(#代表注释):

iptables -t nat -N V2RAY # 新建一个名为 V2RAY 的链
iptables -t nat -A V2RAY -d 192.168.0.0/16 -j RETURN # 直连 192.168.0.0/16 
iptables -t nat -A V2RAY -p tcp -j RETURN -m mark --mark 0xff # 直连 SO_MARK为 0xff 的流量(0xff 是 16 进制数,数值上等同与上面的 255),此规则目的是避免代理本机(网关)流量出现回环问题
iptables -t nat -A V2RAY -p tcp -j REDIRECT --to-ports 12345 # 其余流量转发到 12345 端口(即 V2Ray)
iptables -t nat -A PREROUTING -p tcp -j V2RAY # 对局域网其他设备进行透明代理
iptables -t nat -A OUTPUT -p tcp -j V2RAY # 对本机进行透明代理

然后设定 UDP 流量透明代理的 iptables 规则,命令如下

ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -N V2RAY_MASK
iptables -t mangle -A V2RAY_MASK -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A V2RAY_MASK -p udp -j TPROXY --on-port 12345 --tproxy-mark 1
iptables -t mangle -A PREROUTING -p udp -j V2RAY_MASK
  1. 使用电脑/手机尝试直接访问被墙网站,这时应该是可以访问的(如果不能,你可能得请教大神手把手指导了)。

  2. 写开机自动加载上述的 iptables 的脚本,或者使用第三方软件(如 iptables-persistent),否则网关重启后 iptables 会失效(即透明代理会失效)。

1.4. 注意事项

  • 在上面的设置中,假设访问了国外网站,如 Google 等,网关依然会使用的系统 DNS 进行查询,只不过返回的结果是污染过的,而 V2Ray 提供的 domain override 能够从流量中提取域名信息交由 VPS 解析。也就是说,每次打算访问被墙的网站,DNS 提供商都知道,鉴于国内企业尿性,也许 GFW 也都知道,会不会将这些数据收集喂 AI 也未可知。

  • domain override 目前只能从 TLS 和 HTTP 流量中提取域名,如果上网流量有非这两种类型的慎用 domain override 解决 DNS 污染。

  • 由于对 iptables 不熟,我总感觉上面对 UDP 流量的透明代理的设置使用上有点问题,知道为什么的朋友请反馈一下。如果你只是简单的上上网看看视频等,可以只代理 TCP 流量,不设 UDP 透明代理。

  • 喜欢玩网游的朋友可能要失望了,使用 V2Ray 加速游戏效果不是很好。

  • V2Ray 只能代理 TCP/UDP 的流量,ICMP 不支持,即就算透明代理成功了之后 ping Google 这类网站也是不通的。

  • 按照网上其他的透明代理教程,设置 iptables 肯定要 RETURN 127.0.0.0/8 这类私有地址,但我个人观点是放到 V2Ray 的路由里好一些。


1.5. 更新历史

  • 2017-12-05 初版

  • 2017-12-24 修复无法访问国内网站问题

  • 2017-12-27 排版

  • 2017-12-29 删除不必要的 iptables 规则

  • 2018-01-16 优化操作步骤

  • 2018-01-21 添加 UDP

  • 2018-04-05 Update

  • 2018-08-30 设置步骤修正

  • 2018-09-14 比较优雅地代理本机流量


1. 内置 DNS

1.1. 简介

仔细看过 V2Ray 手册的朋友应该都知道 V2Ray 内置有一个 DNS 的功能。这一节就来简单介绍一下 V2Ray 这个 DNS 是怎么回事。 这个 DNS 可以总结为:

  1. 只为 V2Ray 内部的 routing 和 freedom 服务,routing 只负责匹配规则然后将数据包发往不同 outbound,freedom 只负责将数据包发到目标地址;

  2. 只有当 routings / freedom 的 domainStrategy 不是 AsIs 才会工作;

  3. 基于 1 推论,客户端的 DNS 不影响服务器的解析;

  4. V2Ray 的 DNS 会受路由规则的影响而转发到不同的 outbound 进行查询。

其实就这么简单。再说多点就是只有你的 domainStrategy 设置成了 IPIfNonMatch,在你上网时 V2Ray 找不到对应的路由域名规则,V2Ray 才会通过设置的 DNS 服务器将域名解析成IP,然后匹配规则,其它的它可不管。freedom 同理。

还有,有的网友想利用 DNS 中的 host 做去广告,我没有这么试过,也不知道结果怎么样。我只想说,这是本末倒置了,要去广告使用 routing 就行,不必搞 DNS。

1.2. 详解

还是有人纠结 DNS 的问题,那我就多说几句吧。

首先举个例子,假如我用 FireFox,设置了 Socks 代理,那么当访问 Google.com 时,FireFox 会将一系列与 Google.com 通信的数据包打包成 Socks 协议,发给 Socks 代理软件处理。这儿就有个问题,FireFox 怎么让代理软件知道要访问的是 Google.com,或者说代理怎么知道浏览器发过来的包最终要发给谁?要解答这个问题我们首先得了解 Socks 协议,Socks 协议有一个请求头,包含许多字段,其中 DST.ADDR 字段是告诉代理软件目标地址是什么。我们知道目标地址包括域名和 IP,但从 DST.ADDR 字段是不能知道到底是 IP 还是域名的,这个时候就有一个字段 ATYP 出来了,如果 ATYP 是 3,说明请求头的目标地址为域名,如果是 1 或 4 则为 IP。

继续原来的例子,如果 FireFox 没有勾选了代理 DNS,则 FireFox 直接在本机中进行 DNS 查询 Google.com 的 IP,假设为 32.172.73.25,请求头中 ATYP 填 1,DST.ADDR 填查询得到的 IP,然后代理软件越过万水千山在 VPS 与 32.172.73.25 通信,到了这一步能不能正常通信就取决于查到的 IP 是不是真的 Google 的 IP;而另外一种情况,FireFox 勾选了代理 DNS,那么 FireFox 就不进行 DNS 查询了,直接在请求头中 ATYP 填 3,DST.ADDR 填 googe.com,怎么获得这个 google.com 的 IP 你这代理就自个看着办吧,我不管了(FireFox 如是说)。

在这个例子的基础之上,我将详细解释 V2Ray 中的 DNS 机制。为了更具一般性,忽略某些特殊情况造成的影响,我将举各种不同的例子来进行说明,并限定:

  • 两台可以运行 V2Ray 的设备,可以是 PC、服务器、手机等,可以全在墙内或墙外,也可以分别位于墙内外。为了便于说明,本文分别称为 PC1 和 PC2

  • 为了能够明显区分 DNS 查询的来源,本文约定 PC1 的系统默认 DNS 为 223.5.5.5, PC1 的 V2Ray DNS 配置为 114.114.114.114,PC2 的系统默认 DNS 为 223.6.6.6, PC2 的 V2Ray DNS 配置为 114.114.115.115,互不相同并且设定的 DNS 都是可用的

  • 只说明 V2Ray-core 的 DNS 机制,第三方客户端可能有所变化。

1.2.1. 一、 FireFox 设定代理 DNS,不开启 domain overrride

由上文可知,在这种设定了代理 DNS 的情况下由代理解决 DNS 问题,有几种情况分别一一说明。(以下结果均经过抓包验证)

1

PC2 不运行,PC1 的 inbound 为 socks,默认 outbound 为 freedom,freedom 的 domainStrategy 为 AsIs,不配置任何路由规则(默认为 AsIs)。

假如访问了 z.cn,那么 z.cn 的 DNS 查询为由 PC1 系统向 223.5.5.5 查询。

2

PC1 的 freedom 的 domainStrategy 设为 UseIP,其他设置不变。这种情况如果访问了 z.cn,则由 PC1 的 V2Ray 向 114.114.114.114 查询 z.cn 的 IP。

3

PC2 设置默认 outbound 为 freedom,domainStrategy 为 AsIs,inbound 为 vmess;PC1 的默认 outbound 为能与 PC2 正常连接的 vmess,inbound 为 Socks;PC1 和 PC2 的 V2Ray 均不配置任何路由规则。假如访问了 z.cn,PC1 没有任何的 DNS 查询,PC2 由系统向 223.6.6.6 查询 z.cn 的 IP。

4

PC2 的 freedom domainStrategy 为 UseIP,其他与 3 设置一致。假如访问了 z.cn,PC1 没有任何的 DNS 查询,由 PC2 的 V2Ray 向 114.114.115.115 查询 z.cn 的 IP。

5

在 3 的基础上, PC1 的 routing domainStrategy 设为 IPIfNonMatch,没有任何基于 IP 的规则。DNS 查询情况与 3 相同。同理,如果在 4 的基础上修改 PC1 的 routing domainStrategy 设为 IPIfNonMatch,DNS 查询的结果则与 4 一样。

6

在 5 的基础上,添加一条 IP 规则。假如访问了 z.cn,PC1 的 V2Ray 向 114.114.114.114 查询 z.cn 的IP,由于默认规则为oubound 发到 PC2,PC2 默认 oubound 为 freedom,所以向 114.114.114.114 查询的请求由 PC2 中转。由于 PC1 默认outbound,z.cn 数据包发往PC2,并且由 PC2 最终会再一次进行查询,由谁查询取决于 PC2 中的 freedom 设为 AsIs 还是 UseIP。两次查询目的不一样,PC1 上的查询用于路由规则的匹配,PC2 上的查询用于最终连接。

7

在 6 的基础上,PC1 添加 freedom,路由规则添加 114.114.114.114 为直连(即转到 freedom),其它不变。假如访问了 z.cn,PC1 的 V2Ray 在本机向 114.114.114.114 查询 z.cn 的 IP,而不是通过 PC2 中转。PC2 的查询情况与 6 一致。

……

此处省略。

1.2.2. 二、 FireFox 不设定代理 DNS,不开启 domain overrride

除由 FireFox 查询 DNS 外,均没有中所说的 DNS 查询的情况,因为 V2Ray 接收到的请求目标地址是 IP 类型的,没有域名,何来 DNS?

1.2.3. 三、FireFox 不设定代理 DNS,PC1 开启 domain overrride

FireFox 本身会进行 DNS 查询,其它的 DNS 查询情况与  一样,因为 V2Ray 接收到的请求目标地址虽然是 IP 类型的,但开启了 domain overrride 就从流量中嗅探出了域名,相当于把 ATYP 修改为 3,DST.ADD 修改成嗅探到的域名,但只适用于 TLS 和 HTTP 协议的流量。

1.3. 我已经不想继续写了

其实我真的不太想写这么多的,虽然 V2Ray 的用法很简单,但是 V2Ray 的结构类似于节点,可以无限多个,再加上多节点和 routing 的搭配,然后就交织成了一张网,这样的组合想想有多少?要我每一个细节都说清楚是不可能的,稍稍有一点点变动就不一样了。其实 V2Ray 的文档说得已经足够好,不过得把 DNS 配置、路由配置和 freedom 这三部分内容结合起来看。而我所说的一切关于 V2Ray 的 DNS 都不过是基于文档进一步解释而已,而且我也认为本文中简介已经说清楚了。


1.4. 更新历史

  • 2017-08-06 初版

  • 2017-08-06 修改不当用词

  • 2017-11-16 暂时删去

  • 2017-12-31 Restore

  • 2018-01-06 Details


负载均衡

相较于 Shadowsocks 等其它的代理,V2Ray 可以配置多服务器实现负载均衡。此处的负载均衡并非是自动选择一个延迟或网速最好的服务器进行连接,而是指多个服务器共同承担网络流量,从而减小单个服务器的资源占用及提高服务器的利用率。举个实际例子,早期的时候 V2Ray 优化稍差,再加上我的小鸡特别小,恰恰网络带宽非常大,所以每当使用代理全力下载大文件时 VPS 负荷很大,当时 CPU 占用率都在 80% 以上,时而超过 95%。这样的情况使得我下载东西时基本都限一下速,就怕商家停了我的机子。后来我突然想到 V2Ray 可以均衡负载,配置好双服务器均衡之后大流量下载虽然 CPU 占用率还有 50% 左右,但至少我可以毫无顾忌地大流量下载了。如今过了一年,我的小鸡全换了,V2Ray 也没当时那么吃性能了,我就再也没用过负载均衡,但是时不时有人问到,于是献出本文。

配置

实现负载均衡很简单,在客户端配置同一个 outbound 的 vnext 写入各个服务器的配置即可(前提是服务器已经部署好并能正常使用)。形如:

{  "inbound": {
  ...
  },  "outbound": {    "protocol": "vmess",    "settings": {      "vnext": [
        {          "address": "address_of_vps1",          "port": 8232,          "users": [
            {              "id": "1ce383ea-13e9-4939-9b1d-20d67135969a",              "alterId": 64
            }
          ]
        },
        {          "address": "address_of_vps2",          "port": 4822,          "users": [
            {              "id": "bc172445-4b5e-49b2-a712-12c5295fd26b",              "alterId": 64
            }
          ]
        }        // 如果还有更多服务器可继续添加
      ]
    },    "streamSettings": {
    ...
    }
  },
  ...
}

原理

V2Ray 是以轮询的方式均衡负载,也就是说当有流量需要通过代理时,首先走第一个 vnext 配置的服务器,有第二个连接就走第二个服务器,接着第三个,以此类推。轮询完一遍又头开始轮询。这样的方式虽然简单粗暴,特别是对于拥有多个性能差的 VPS 的人来说比较有用。另外也能减小长时间大流量连接单个 IP 的特征(由于没有足够的样本,我个人对这样的条件作为代理判据持怀疑态度),给自己一个心理安慰。

注意事项

如端口、id 这些在 vnext 数组内的配置项可以各不相同,但是它们的传输层配置(streamSettings)必须一致。

更新历史

  • 2018-01-03 初版

  • 2018-04-05 Update


1. Docker 部署 V2Ray

Docker 技术是一种新的虚拟化技术,和传统的虚拟化技术不同。V2Ray 同样提供 Docker 部署方式,并且通过 Docker 来部署 V2Ray 会非常轻松高效。

Docker 只能部署在 KVM 或者 XEN 架构的 VPS中

首先安装 Docker:

$ sudo apt-get install -y docker

安装完 Docker 后我们从 DockerHub 通过搜索找到 V2Ray 官方提供的镜像, 链接在此. 找到拉取镜像的的命令并复制下来,在网页右侧我们可以看到命令为 docker pull v2ray/official ,我们将其复制下来回到命令行中粘贴并执行:

$ sudo docker pull v2ray/official

待 V2Ray 的 Docker 镜像拉取完成后就可以进入下一个部署阶段. 在此之前,你需要在 /etc 目录下新建一个文件夹 v2ray, 并把你的配置写好后命名为 config.json 放入 v2ray 文件夹内. 待配置文件准备就绪后键入以下命令进行部署,部署前请记下配置文件中你所设置的端口号,在部署时需要将其映射到宿主机上. 否则将无法访问. 此处假设设定的端口号为8888,需要映射到宿主机的8888端口上. 则命令为:

$ sudo docker run -d --name v2ray -v /etc/v2ray:/etc/v2ray -p 8888:8888 v2ray/official  v2ray -config=/etc/v2ray/config.json

键入以上命令后,命令行会出现一串字符,代表容器部署成功,可以立即通过客户端连接并开始使用了. 如果还不放心,键入以下命令来查看容器的运行状态:

$ sudo docker container ls

如果看到输出的结果中有以下字段代表容器成功运行:

$ docker container ls
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
2a7sdo87kdf3        v2ray/official        "v2ray -config=/et..."   3 minutes ago       Up 3 minutes        0.0.0.0:8888->8888/tcp    v2ray

通过以下命令来启动 V2Ray:

$ sudo docker container start v2ray

停止 V2Ray:

$ sudo docker container stop v2ray

重启 V2Ray:

$ sudo docker container restart v2ray

查看日志:

$ sudo docker container logs v2ray

更新配置后,需要重新部署容器,命令如下:

$ sudo docker container stop v2ray
$ sudo docker container rm v2ray
$ sudo docker run -d --name v2ray -v /etc/v2ray:/etc/v2ray -p 8888:8888 v2ray/official  v2ray -config=/etc/v2ray/config.json

假如你的配置换了端口号,那么相应的端口映射也要更改,假如你在配置文件中把监听端口改为了9999,则'-p'参数应该这样写:

-p  9999:9999

假如你想将容器中的端口映射到本机的端口,则命令应该这样写

-p 127.0.0.1:端口号:端口号

如果 V2Ray 用的传输层协议是 mKCP,由于 mKCP 基于 UDP,那么需要指定映射的端口是 UDP:

-p  9999:9999/udp

除非你打算使用Nginx来转发Websocket否则不需要映射到本地,直接填写端口号:端口号的形式即可

另外,如果开启了动态端口,-p 标记可以多次使用来绑定多个端口. 具体用法是在指令中再加上多个 -p 标记即可。

更新 V2Ray 的 Docker 镜像:

$ docker pull v2ray/official

更新完之后,你需要重新部署容器,方法见上。


1.1. 更新历史

  • 2018-04-05 Update

  • 2018-09-06 UDP 说明


1. 性能测试

单位 MB/s,仅供参考。测试方法及测试工具参见传说中的性能测试 。

1.1. PC 虚拟机(amd64)

1.1.1. VMess 性能

-直连freedom( V2Ray v3.10 )freedom( V2Ray v3.5 )freedom(V2Ray v2.46 )freedom( V2Ray v2.19 )
速度292511372491024426
-TCP( v3.10 )TCP( v3.5 )WS( v3.5 )TCP( v2.46 )WS( v2.46 )TCP( v2.19 )WS( v2.19 )
AES-128-CFB997566110105102102
AES-128-GCM341151124341307256256
CHACHA20-POLY1305236128105246219227227
NONE563163105192153292292

1.1.2. Shadowsocks 性能

-V2Ray( v3.5 ) 内置ss-libev( 3.1.2 )ss-libev( 2.6.3 )
AES-128-CFB1057352
AES-256-CFB976645
AES-128-GCM14647-
AES-256-GCM14645-
CHACHA20-POLY130512873-

1.2. 树莓派 3b

-直连freedom( V2Ray v3.5 )freedom(V2Ray v2.46 )
速度3202727
-TCP( v3.5 )WS( v3.5 )TCP( v2.46 )
AES-128-CFB323
AES-128-GCM1.7-1.7
CHACHA20-POLY1305545
NONE211222


1. 内存优化

为了更好能够提供更好的性能,V2Ray 有一个缓存机制,在上下游网络速率有差异时会缓存一部分数据。举个实际的例子,假如你在下载小姐姐,网站到你的 VPS 的速度有 500 Mbps,而 VPS 到家里宽带只有 50 Mbps,V2Ray 在 VPS 会以比较高的速率把小姐姐先下好再慢慢传到电脑里。默认情况下 V2Ray 对每个连接的缓存大小是 10 MBytes,也就是说如果下载小姐姐开了 32 线程,那么 V2Ray 最高会缓存 320 MBytes 的数据。这样一来那些内存只有 256 MBytes 甚至是 128 MBytes 的 VPS 压力就会比较大。所幸的是缓存的大小我们是可以修改的,减小缓存的大小可以降低对内存的占用,会对小内存机器比较友好。

1.1. 修改缓存

1.1.1. 利用环境变量修改

VPS 中编辑 /etc/systemd/system/v2ray.service 文件,将 ExecStart=/usr/bin/v2ray/v2ray -config /etc/v2ray/config.json 修改成 ExecStart=/usr/bin/env v2ray.ray.buffer.size=1 /usr/bin/v2ray/v2ray -config /etc/v2ray/config.json,保存;然后执行下面的命令生效。

$ sudo systemctl daemon-reload && sudo systemctl restart v2ray.service

上面的 v2ray.ray.buffer.size 就是缓存的变量,设为 1 也没多大影响(主观感觉,没实际测试对比过),内存不太够用的朋友可以试一下。

1.1.2. 在配置文件中修改

在上面的通过环境变量修改缓存大小中,有一个问题是 v2ray.ray.buffer.size 的单位是 Mbytes,最小只能改成 1 Mbytes,如果改成 0 的话就意味着缓存无限制。不过在配置文件中也可以修改缓存大小,单位是 Kbytes,在配置中设成 0 的话表示禁用缓存,需要将缓存设得更小的朋友可以参考 V2Ray 官方文档的本地策略一节,配置比较简单,这里就不详述了。

1.2. 更新历史

  • 2018-05-01 初版

  • 2018-08-02 添加配置文件修改缓存



文章投稿或转载声明

来源:123版权归原作者所有,转载请保留出处。本站文章发布于 2023-12-26 19:54:07
温馨提示:文章内容系作者个人观点,不代表天云博客对其观点赞同或支持。

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,32人围观)参与讨论

还没有评论,来说两句吧...