diff --git a/README.md b/README.md index d02328e..9b16de7 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,33 @@ # v2ray-openwrt -本文为在路由器openwrt中使用v2ray的简单流程,相关的配置请参考官方文档,为了方便小伙伴们,这里给出了一个[配置样例](./client-config.json)供参考。注意替换==包含的内容为你自己的配置,路由部分使用自定义的site文件,支持gw上网及各种广告过滤,site.dat文件可以从[v2ray-adlist](https://gitee.com/felix-fly/v2ray-adlist)获取最新版。 - -随着v2ray功能的不断完善,相应的体积也一直在增加,以目前4.18版本为例,这里使用的mipsle平台的v2ray已经超过了14mb,v2ctl也有10mb,如果你的路由器存储空间不是足够大,那么精简或者说压缩v2ray的体积势在必行。 - -下载路由器硬件对应平台的压缩包到电脑并解压。 +本文为在路由器openwrt中使用v2ray的简单流程,相关的配置请参考官方文档,为了方便小伙伴们,这里给出了一个[配置样例](./client-config.json)供参考,配置采用ws作为底层传输协议,服务端及nginx相关配置可度娘。注意替换==包含的内容为你自己的配置,路由部分使用自定义的site文件,支持gw上网及各种广告过滤,site.dat文件可以从[v2ray-adlist](https://github.com/felix-fly/v2ray-adlist)获取最新版。 ## 另一种解决方案(优化方案) 如果v2ray一站式服务的方式不能满足你的需求,或者遇到了性能瓶颈(下载慢),可以试试另外一种解决方案(优化方案): -[v2ray-dnsmasq-dnscrypt](https://gitee.com/felix-fly/v2ray-dnsmasq-dnscrypt) +[v2ray-dnsmasq-dnscrypt](https://github.com/felix-fly/v2ray-dnsmasq-dnscrypt) + +## 懒人模式 + +[release](https://github.com/felix-fly/v2ray-openwrt/releases)页面提供了各平台下的v2ray执行文件,可以直接下载使用。 + +默认已经过upx压缩,不支持压缩的保持不变。压缩包中仅包含v2ray执行文件,因为已经编译支持了json配置文件,运行不需要v2ctl。 -## 压缩体积 +## 普通压缩 + +首先下载路由器硬件对应平台的压缩包到电脑并解压。 + +v2ray功能强大,相应的体积也很硕大,以目前4.18版本为例,这里使用的mipsle平台的v2ray已经超过了14mb,v2ctl也有10mb,对于路由器这种存储空间不是很富裕的设备,原生的v2ray实在是太大了。 + +压缩势在必行,这里使用upx ``` upx -k --best --lzma v2ray upx -k --best --lzma v2ctl ``` -UPX在这里功不可没,之前是直接不带任何参数压缩,体积还可接受,但是目前这个版本压缩后也有4.9mb的块头,笔者的k2p表示吃不消。于是参数化之后发现体积缩小至3.3mb,比现在使用的版本还小一些。如果你不追求极致,到此就可以洗洗睡了(厄~,那个~,好像还没完呢。。。)。 +UPX是个厉害角色,之前是直接不带任何参数压缩,体积还可接受,但是目前这个版本压缩后也有4.9mb的块头,笔者的k2p表示吃不消。于是参数化之后发现体积缩小至3.3mb,比现在使用的版本还小一些。如果你不追求极致,到此就可以洗洗睡了(厄~,那个~,好像还没完呢。。。)。 ## 极致压缩 @@ -29,48 +37,23 @@ UPX在这里功不可没,之前是直接不带任何参数压缩,体积还 main/distro/all/all.go ``` -修改后类似这个样子,tls暂时先保留,是否可以去掉待验证。 +关于JSON配置这里,有两种选择,代码里的注释已经说明了,默认的配置是依赖v2ctl来处理JSON文件,而另外一种选择jsonem的话,v2ray可以直接处理JSON文件,不再依赖v2ctl,只是体积会相应的增大。这里改为使用jsonem。 -关于JSON配置这里,有两种选择,代码里的注释已经说明了,默认的配置是依赖v2ctl来处理JSON文件,而另外一种选择jsonem的话,v2ray可以直接处理JSON文件,不再依赖v2ctl,只是体积会相应的增大。 +需要指出的是,当使用jsonem时,通过减少依赖并不能进一步缩小v2ray的体积,个人猜测可能jsonem也引用了这些依赖。 ``` package all import ( - // The following are necessary as they register handlers in their init functions. - - // Required features. Can't remove unless there is replacements. - _ "v2ray.com/core/app/dispatcher" - _ "v2ray.com/core/app/proxyman/inbound" - _ "v2ray.com/core/app/proxyman/outbound" - - // Other optional features. - _ "v2ray.com/core/app/log" - _ "v2ray.com/core/app/router" - - // Inbound and outbound proxies. - _ "v2ray.com/core/proxy/blackhole" - _ "v2ray.com/core/proxy/dokodemo" - _ "v2ray.com/core/proxy/freedom" - _ "v2ray.com/core/proxy/socks" - _ "v2ray.com/core/proxy/vmess/outbound" - - // Transports - _ "v2ray.com/core/transport/internet/tls" - _ "v2ray.com/core/transport/internet/websocket" - - // Transport headers - _ "v2ray.com/core/transport/internet/headers/tls" + ... // JSON config support. Choose only one from the two below. // The following line loads JSON from v2ctl - _ "v2ray.com/core/main/json" + // _ "v2ray.com/core/main/json" // The following line loads JSON internally - // Use this one v2ctl will be useless - // _ "v2ray.com/core/main/jsonem" + _ "v2ray.com/core/main/jsonem" - // Load config from file or http(s) - _ "v2ray.com/core/main/confloader/external" + ... ) ``` @@ -81,18 +64,14 @@ bazel clean bazel build --action_env=GOPATH=$GOPATH --action_env=PATH=$PATH //release:v2ray_linux_mipsle_package ``` -经过减少依赖项打包出来的v2ray体积为10mb多一点,再结合UPX最终的大小控制在了2.5mb,顿时感觉一身轻松啊(我是路由器,嘎嘎~)。 - -如果采用jsonem的话打包出来的v2ray体积为15mb多,UPX之后约3.6mb,个人觉得还ok,这样的话在路由器中可以直接使用json配置文件而不再需要额外转换为pb文件。当然最终的选择取决于你自己的实际需求。 - -**ps:文末有福利!文末有福利!文末有福利!** +采用jsonem的话打包出来的v2ray体积为15mb多,UPX之后约3.6mb,个人觉得还ok,这样的话在路由器中可以直接读取json配置文件而不再需要v2ctl。 ## 上传软件 ``` mkdir /etc/config/v2ray cd /etc/config/v2ray -# 上传v2ray相关文件到该目录下,配置文件自行百度 +# 上传v2ray相关文件到该目录下,配置文件根据个人需求修改 chmod +x v2ray v2ctl ``` @@ -148,17 +127,6 @@ ln -s /etc/config/v2ray/v2ray.service /etc/init.d/v2ray /etc/init.d/v2ray stop ``` -## 生成pb文件(可选) - -**对于采用jsonem方式编译的v2ray可以直接读取json文件,不再需要转换。** - -主要针对小内存设备,v2ray + v2ctl原始程序体积较大,比较占内存(路由的内存相当于电脑的硬盘,并非运存)。使用pb文件可以不依赖v2ctl,使用pd的缺点是不能在路由中直接修改配置文件了。 - -``` -# 在电脑(这里是linux系统)上使用v2ctl转换json配置文件 -./v2ctl config < ./config.json > ./config.pb -``` - ## 透明代理(可选) 使用iptables实现,当前系统是否支持请先自行验证。 @@ -177,11 +145,12 @@ iptables -t nat -A V2RAY -s 192.168.1.0/24 -p tcp -j REDIRECT --to-ports 12345 iptables -t nat -A PREROUTING -p tcp -j V2RAY ``` -## 送福利 - -release页面提供了linux平台下的v2ray执行文件,默认已经过upx压缩,不支持压缩的保持不变。压缩包中仅包含v2ray执行文件,因为已经编译支持了json配置文件,运行不需要v2ctl,也无需额外转换pb文件。 - ## 更新记录 +2019-10-16 +* 使用最新代码编译 4.20.0 +* 简化流程 +* 增加了服务端配置样例 + 2019-07-02 * 4.19.1 diff --git a/client-config.json b/client-config.json index de36536..32b01a6 100644 --- a/client-config.json +++ b/client-config.json @@ -13,7 +13,6 @@ }, "settings": { "network": "tcp", - "timeout": 30, "followRedirect": true } }], @@ -33,9 +32,7 @@ "port": 443, "users": [{ "id": "==YOUR USER ID==", - "alterId" : 128, - "security" : "chacha20-poly1305", - "level" : 1 + "alterId" : 4 }] }] }, @@ -44,10 +41,6 @@ "security": "tls", "wsSettings" : { "path" : "\/==YOUR ENTRY PATH==\/" - }, - "tlsSettings" : { - "serverName" : "==YOUR DOMAIN or SERVER ADDRESS==", - "allowInsecure" : false } } }], diff --git a/server-config.json b/server-config.json new file mode 100644 index 0000000..4681cab --- /dev/null +++ b/server-config.json @@ -0,0 +1,22 @@ +{ + "inbounds": [{ + "port": 12345, + "protocol": "vmess", + "settings": { + "clients": [{ + "id": "==YOUR USER ID==", + "alterId": 4 + }] + }, + "streamSettings": { + "network": "ws", + "wsSettings": { + "path": "\/==YOUR ENTRY PATH==\/" + } + } + }], + "outbounds": [{ + "protocol": "freedom", + "settings": {} + }] +} \ No newline at end of file