V2Ray 的模块化
V2Ray 的介绍中有这么一句话:"V2Ray 是一个模块化的代理软件包"。在推广的过程中,看上去大家对模块化的概念不太了解,不清楚这是一个什么样的东西。
模块化,简单来说就是乐高积木,每一块积木都有统一的接口(有例外,这里忽略),积木和积木之间想拼就拼,想拆就拆,很方便。V2Ray 也是这样,V2Ray 中的每一个功能都可以简单地添加或移除。
举个例子来说,一些用户尝试在路由器中运行 V2Ray,路由器的 ROM 通常只有 8M 或 16M,而 V2Ray 的程序文件就达到了 7M (v3.4 ARM),这样就很难塞进路由器了。但其实根据使用情况,在路由器中不会用到 V2Ray 的所有功能,有一些功能不是必要的,比如 Shadowsocks,我们可以把它从 V2Ray 中拿走,以便减少可执行文件的体积。
V2Ray 中所有的模块列表如下(文件链接):
import (
_ "v2ray.com/core/app/dispatcher/impl"
_ "v2ray.com/core/app/dns"
_ "v2ray.com/core/app/log"
_ "v2ray.com/core/app/policy/manager"
_ "v2ray.com/core/app/proxyman/inbound"
_ "v2ray.com/core/app/proxyman/outbound"
_ "v2ray.com/core/app/router"
_ "v2ray.com/core/proxy/blackhole"
_ "v2ray.com/core/proxy/dokodemo"
_ "v2ray.com/core/proxy/freedom"
_ "v2ray.com/core/proxy/http"
_ "v2ray.com/core/proxy/shadowsocks"
_ "v2ray.com/core/proxy/socks"
_ "v2ray.com/core/proxy/vmess/inbound"
_ "v2ray.com/core/proxy/vmess/outbound"
_ "v2ray.com/core/transport/internet/kcp"
_ "v2ray.com/core/transport/internet/tcp"
_ "v2ray.com/core/transport/internet/tls"
_ "v2ray.com/core/transport/internet/udp"
_ "v2ray.com/core/transport/internet/websocket"
_ "v2ray.com/core/transport/internet/headers/http"
_ "v2ray.com/core/transport/internet/headers/noop"
_ "v2ray.com/core/transport/internet/headers/srtp"
_ "v2ray.com/core/transport/internet/headers/utp"
_ "v2ray.com/core/transport/internet/headers/wechat"
)
具体每个模块这里就不细说了,从它们的名字应该可以大致猜出是做什么的。假如根据使用场景,这些模块我们不需要:
- DNS(不加载的时候自动使用 localhost);
- Blackhole、SOCKS、HTTP、Shadowsocks、VMess Inbound;
- Websocket、KCP 以及相关伪装;
把上述的模块删除之后,我们仅使用透明代理加上 VMess 进行代理,以及 Freedom 做分流。示例:
import (
_ "v2ray.com/core/app/dispatcher/impl"
_ "v2ray.com/core/app/log"
_ "v2ray.com/core/app/policy/manager"
_ "v2ray.com/core/app/proxyman/inbound"
_ "v2ray.com/core/app/proxyman/outbound"
_ "v2ray.com/core/app/router"
_ "v2ray.com/core/proxy/dokodemo"
_ "v2ray.com/core/proxy/freedom"
_ "v2ray.com/core/proxy/vmess/outbound"
_ "v2ray.com/core/transport/internet/tcp"
_ "v2ray.com/core/transport/internet/tls"
_ "v2ray.com/core/transport/internet/udp"
)
对,只需要修改这一个文件就可以了,其它的都不用动。
重新编译一下,在 ARM 上获得新的程序文件,体积仅为 4M,几乎减半。这样就能很方便地集成进路由器的系统了。
编译 V2Ray 需要一些 Golang 的知识,并不是很难,步骤如下:
- 安装最新的 Golang SDK.
- 下载 V2Ray 源码:
go get -u v2ray.com/core/...go get -u v2ray.com/ext/...
- 安装 V2Ray 编译工具:
go install v2ray.com/ext/tools/build/vbuild - 编译 V2Ray:
$GOPATH/bin/vbuild -os=linux -arch=arm
顺便介绍一下如何在路由器中绕过 v2ctl 程序的限制。
- 准备好你的配置文件 config.json
- 在 PC 上把它转换成 Protobuf 格式:
v2ctl config < config.json > config.pb - 在路由器运行 V2Ray:
v2ray -config=config.pb
在仅使用 Protobuf 配置文件的时候,V2Ray 是不依赖 v2ctl 以及其它数据文件的,只需要 v2ray 一个文件即可运行。是不是很方便呢。
现在你对 V2Ray 的强大之处是不是更仰慕了呢? 😉
Leave V2Ray 的模块化 to:
Read more #cn posts
Best Posts From Victoria Raymond
We have not curated any of v2ray's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.