Skip to content

Commit

Permalink
4.20.0
Browse files Browse the repository at this point in the history
  • Loading branch information
felix-fly committed Oct 16, 2019
1 parent 993086e commit 218d4b3
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 68 deletions.
89 changes: 29 additions & 60 deletions 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,比现在使用的版本还小一些。如果你不追求极致,到此就可以洗洗睡了(厄~,那个~,好像还没完呢。。。)。

## 极致压缩

Expand All @@ -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"
...
)
```

Expand All @@ -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
```

Expand Down Expand Up @@ -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实现,当前系统是否支持请先自行验证。
Expand All @@ -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

Expand Down
9 changes: 1 addition & 8 deletions client-config.json
Expand Up @@ -13,7 +13,6 @@
},
"settings": {
"network": "tcp",
"timeout": 30,
"followRedirect": true
}
}],
Expand All @@ -33,9 +32,7 @@
"port": 443,
"users": [{
"id": "==YOUR USER ID==",
"alterId" : 128,
"security" : "chacha20-poly1305",
"level" : 1
"alterId" : 4
}]
}]
},
Expand All @@ -44,10 +41,6 @@
"security": "tls",
"wsSettings" : {
"path" : "\/==YOUR ENTRY PATH==\/"
},
"tlsSettings" : {
"serverName" : "==YOUR DOMAIN or SERVER ADDRESS==",
"allowInsecure" : false
}
}
}],
Expand Down
22 changes: 22 additions & 0 deletions 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": {}
}]
}

0 comments on commit 218d4b3

Please sign in to comment.