华硕AC86U运行v2ray实现透明代理
华硕AC86U配置v2ray
华硕AC86U官方固件支持配置iptables, 因此不需要刷梅林或者其他所谓官改固件就能运行v2ray, 实现透明代理.
ssh登陆路由器
ssh <用户名>@router.asus.com
运行v2ray
- 下载v2ray
cd /jffs/ # /jffs/是非易失性存储, 重启路由器不会有数据丢失 mkdir v2ray cd v2ray/ wget https://github.com/v2fly/v2ray-core/releases/download/v4.45.2/v2ray-android-arm64-v8a.zip -O v2ray.zip # 一定要下载arm版本 unzip v2ray.zip - 下载增强版geosite
wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat - 修改v2ray配置文件
{
"log": {
"loglevel": "error"
},
"inbounds": [
{
"tag":"transparent",
"port": 9999,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp",
"followRedirect": true
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"streamSettings": {
"sockopt": {
"tproxy": "tproxy",
"mark": 255
}
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {
"domainStrategy": "AsIs"
},
"streamSettings": {
"sockopt": {
"mark": 255
}
}
},
{
"protocol": "vmess",
"tag": "proxy",
"settings": {
"vnext": [ // 你的v2ray 配置
]
},
}
],
"routing": {
"domainStrategy": "AsIs",
"domainMatcher": "mph", // 减小内存占用
"rules": [
{ // 苹果相关流量走直连
"type": "field",
"domain": [ "geosite:apple", "geosite:apple-cn" ],
"outboundTag": "direct"
},
{ // 非中国网站走代理
"type": "field",
"domain": [ "geosite:geolocation-!cn" ],
"outboundTag": "proxy"
}
]
}
}
- 启动v2ray
kill $(ps | grep /jffs/ | grep v2ray | awk '{ print $1 }') # 杀死正在运行的v2ray
nohup /jffs/v2ray/v2ray -c /jffs/v2ray/config.json >/dev/null 2>&1 & # 启动新的进程
至此, v2ray进程就已经在运行了. 接下来配置iptables, 使流量经过v2ray代理.
配置iptables, 让v2ray代理网络访问
modprobe xt_TPROXY # 系统加载透明代理模块(默认没有加载)
# 设置策略路由
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
# 代理局域网设备
iptables -t mangle -N v2ray
iptables -t mangle -A v2ray -d 127.0.0.1/32 -j RETURN
iptables -t mangle -A v2ray -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A v2ray -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A v2ray -d 192.168.0.0/16 -j RETURN # 直连局域网
iptables -t mangle -A v2ray -j RETURN -m mark --mark 0xff # 直连 SO_MARK 为 0xff 的流量(0xff 是 16 进制数,数值上等同与上面v2ray 配置的 255),此规则目的是解决v2ray占用大量CPU(https://github.com/v2ray/v2ray-core/issues/2621)
iptables -t mangle -A v2ray -p tcp -j TPROXY --on-ip 127.0.0.1 --on-port 9999 --tproxy-mark 1 # 给 TCP 打标记 1,转发至 9999 端口
iptables -t mangle -A PREROUTING -j v2ray # 应用规则
如果一切顺利, v2ray已经开始代理流量了. 访问www.google.com试试.
可能遇到的坑
-
v2ray启动时报错:
fatal error: runtime: cannot allocate memory华硕ac86u的内存只有512MB, 因此如果v2ray配置的路由规则过多, 则会消耗掉所有内存, 甚至如上报错启动失败. 有两个解决办法:
-
精简v2ray的路由规则(上面的配置只包含了两个路由规则, 实测没问题)
-
iptables 报错:
iptables: No chain/target/match by that name.华硕ac86u的固件包含了透明代理模块, 但是默认没有启用. 因此我们需要在配置iptables前先执行
modprobe xt_TPROXY以启用. 模块的具体地址可执行find /lib/modules/$(uname -r) -type f -name '*.ko*' | grep 'xt_TPROXY'查看.