在ASUSWRT-Merlin上安装V2Ray

前情提要:家里现在用的路由器是华硕AC66U_B1,很早就刷了梅林固件,但是一直没用什么高级功能。正好前几天我搞到了国内的V2Ray代理,就打算趁寒假搞一个在路由器上翻回国内的操作。

首先我们需要能够安装梅林固件的路由器。包括全部华硕路由器和部分网件路由器。然后去这里下载梅林固件。解压以后找到.trx文件,使用华硕固件本来有的固件升级功能就好啦。网件的话可能需要一点特殊操作,这里就不讲了。

这是已经刷完梅林的固件升级页面

然后需要在Administration-System中允许写入JFFS分区和打开SSH。接着就可以用你喜欢的SSH工具连进去了。

第一次要格式化JFFS分区,所以两个都选yes
Enable SSH 为了安全我选LAN only(但是我也没公网IP

JFFS分区是路由器上的持久性闪存,不会因为机器断点而被擦除,所以我们要把V2Ray装在JFFS分区里。我的CPU是arm的,所以我们要下载arm版本的v2ray-core。

cd /jffs mkdir v2ray cd v2ray/ wget https://github.com/v2ray/v2ray-core/releases/download/v4.22.0/v2ray-linux-arm.zip unzip v2ray-linux-arm.zip
Code language: JavaScript (javascript)

接下来就要准备V2Ray的配置文件了。由于梅林没有内置FTP,我们只能用scp传文件。(上一步把v2ray-core放进JFFS也可以用scp)。这里可以选择有图形界面的winSCP,挺方便的。

scp C:\config.json lulu@192.168.50.1:/jffs/v2ray/config.json
Code language: JavaScript (javascript)

下面是我的config.json配置。使用V2Ray官方提供的dokodemo-door协议可以接收由iptables转发过来的包。通过V2Ray的路由设置可以实现国内网站走指定的国内vmess线路。每一个outbounds都要指定mark来避免循环转发。

{ "log": { "loglevel": "warning", "access": "/var/log/v2ray/access.log", "error": "/var/log/v2ray/error.log" }, "inbounds": [ { "tag":"transparent", "port": 10000, "protocol": "dokodemo-door", "settings": { "network": "tcp", "followRedirect": true }, "sniffing": { "enabled": true, "destOverride": ["http", "tls"] }, "streamSettings": { "sockopt": { "tproxy": "redirect" } } }, { "tag":"http", "port": 1080, "listen": "0.0.0.0", "protocol": "http", "settings": { "auth": "noauth" } } ], "outbounds": [ { "protocol": "freedom", "tag": "direct", "settings": { "domainStrategy": "UseIP" }, "streamSettings": { "sockopt": { "mark": 15 } } }, { "tag": "proxy_china", "protocol": "vmess", "settings": { "vnext": [ { "address": "", "port": , "users": [ { "email": "", "id": "", "alterId": 8, "security": "auto" } ] } ] }, "streamSettings": { "sockopt": { "mark": 15 } } }, { "protocol": "blackhole", "settings": {}, "tag": "adblock" } ], "dns": { "servers": [ "8.8.8.8", "localhost" ] }, "routing": { "domainStrategy": "IPIfNonMatch", "rules": [ { "type": "field", "ip": [ "geoip:cn" ], "outboundTag": "proxy_china" }, { "type": "field", "domain": [ "geosite:cn", ".cn" ], "outboundTag": "proxy_china" }, { "type": "field", "domain": [ "geosite:category-ads" ], "outboundTag": "adblock" } ] } }
Code language: JSON / JSON with Comments (json)

接着我们要为V2Ray创建开机启动。services-start和firewall-start都是梅林启动时会执行的shell脚本。

nano /jffs/scripts/v2ray-check.sh

复制以下内容。

#! /bin/sh case "$(pidof v2ray | wc -w)" in 0) echo "Restarting V2ray: $(date)" >> /var/log/v2ray/v2ray-status.log nohup /jffs/v2ray/v2ray --config=/jffs/v2ray/config.json >/dev/null 2>&1 & ;; 1) # all ok ;; *) echo "Removed double V2ray: $(date)" >> /var/log/v2ray/v2ray-status.log kill $(pidof v2ray | awk '{print $1}') ;; esac
Code language: PHP (php)

这段脚本会保持V2Ray运行。

nano /jffs/scripts/services-start

复制以下内容。

#!/bin/sh #v2ray start mkdir /var/log/v2ray/ sleep 60 nohup /jffs/v2ray/v2ray --config=/jffs/v2ray/config.json > /dev/null 2>&1 & #check v2ray every 15 minute cru a check-v2ray "*/15 * * * * /jffs/scripts/v2ray-check.sh > /dev/null"
Code language: PHP (php)
nano /jffs/scripts/firewall-start

复制以下内容。

#!/bin/sh iptables -t nat -N V2RAY iptables -t nat -A V2RAY -d 0.0.0.0/8 -j RETURN iptables -t nat -A V2RAY -d 10.0.0.0/8 -j RETURN iptables -t nat -A V2RAY -d 127.0.0.0/8 -j RETURN iptables -t nat -A V2RAY -d 169.254.0.0/16 -j RETURN iptables -t nat -A V2RAY -d 172.16.0.0/12 -j RETURN iptables -t nat -A V2RAY -d 192.168.0.0/16 -j RETURN iptables -t nat -A V2RAY -d 224.0.0.0/4 -j RETURN iptables -t nat -A V2RAY -d 240.0.0.0/4 -j RETURN iptables -t nat -A V2RAY -p tcp -j RETURN -m mark --mark 0x0f iptables -t nat -A V2RAY -p tcp -j REDIRECT --to-ports 10000 iptables -t nat -A PREROUTING -p tcp -j V2RAY iptables -t nat -A OUTPUT -p tcp -j V2RAY
Code language: PHP (php)

这里iptables重定向的端口就是上面dokodemo-door监听的端口。mark 0x0f=15要跟上面config.json中设置的一样。这样被标记的包就会直接送出服务器而不是又被送回V2Ray处理。同样,一些被保留的ip段也是直接return。其他的tcp连接就被重定向到我们选择的端口(这里是10000)。

我们需要把脚本和V2Ray可执行文件的权限设置为可执行。然后重启路由器。

chmod a+rx /jffs/scripts/* cd /jffs/v2ray/ chmod a+rx v2ctl v2ray reboot
Code language: JavaScript (javascript)

如果不出意外的话,路由器重启完就大功告成了。我们成功的在路由器上搭建了透明代理,在这台路由器下面的设备无需任何其他设置就可以走V2Ray。

我用了两天发现,由于路由器性能太低,如果把所有流量转发进V2Ray,CPU很容易跑满。现在我的最大网速从400Mbps降低到了80Mbps。

接下来我可能要改变一下iptables规则,只转发必要的流量到V2Ray,看看性能会不会提升。或者直接外挂一个树莓派搞软路由比较方便。关于之后的折腾应该还会有下一篇文章。

感谢阅读,欢迎在下面留言评论!

参考资料:
https://enterpr1se.info/2017/10/v2ray-gfw-asuswrt-merlin/
https://www.v2ray.com/
https://guide.v2fly.org/
https://github.com/RMerl/asuswrt-merlin.ng

发布日期:
分类:瞎折腾

作者:NaivEPoi

本站站长,其他的懒得写0v0

发表评论 取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据