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 的强大之处是不是更仰慕了呢? 😉
赞一个,希望以后多出科普文章
更正
上述在路由器中运行的第三步,命令中最后需要加上参数
-format=pb
,即完整的如下:v2ray -config=config.pb -format=pb
如果能为arm架构的路由器release个能实现透明代理的简化版本就好了,毕竟不是每个人都会去自定义编译的……
Here is a nice article that has a step by step guide on how to use a web proxy to unblock restricted youtube videos or websites.