目录

通过命令行直接在华硕路由器上安装V2Ray

本文记录我在华硕ASUS AC86U路由器上安装V2Ray,并且实现全家所有设备翻墙的方法。本文所述的方法并非通过KoolShare官方改版梅林Merlin系统,从应用中心进行安装,而是直接通过SSH连接路由器后台并进行安装。适合动手能力较强者进行,若无充分准备,可以直接参考KoolShare论坛提供的官改版梅林安装教程,但官改系统是闭源系统,安全性能有待考证。

本文的主要目的是记录安装过程,以便日后需要维护能够回忆当时的安装思路,同时与大家交流讨论。使用V2Ray的目的是从Google Drive中获取以前存放的文件,请勿非法使用。

前期准备

  1. 在路由器上安装梅林Merlin固件,下载V2Ray安装包,由于AC86U使用的是32位ARM处理器,因此下载v2ray-linux-arm.zip版本文件。

  2. 建立JFFS文件系统并且打开SSH,具体方法可以参考企业号航行网志

安装V2Ray

要在路由器上安装V2Ray,首先需要通过SSH连接Merlin固件,并将V2Ray安装包解压之后通过scp/sftp等方式发送至路由器端/jffs路径下,本文将其放置在/jffs/v2ray文件夹内。

修改v2ray根目录中的config.json文件,需要注意的是,与在服务器端配置V2Ray不同,在路由器端需要将inbounds设置为监听家中的所有有线/无线设备,outbounds部分将流量转发至V2Ray服务器端,具体的V2Ray服务器端配置方法,可以参考V2Ray官方网站,或ToutyRaterV2Ray配置指南

配置完成后,简要设置应该如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
  ... // 
  "inbounds" : [
    {
      "listen" : "0.0.0.0",  // 0.0.0.0便
      "protocol" : "socks",  // sockshttpsocks
      "settings" : {
        "ip" : "127.0.0.1",
        "auth" : "noauth",
        "udp" : false
      },
      "tag" : "socksinbound",
      "port" : 10087  // 
    }
  ],
  ...
  // outbound使WS+TLS
  "outbounds" : [
    {
      "protocol" : "vmess",
      "settings" : {
        "vnext" : [
          {
            "address" : "Address of Your Server",
            "users" : [
              ...
            ],
            "port" : Port of Your Server
          }
        ]
      },
      "streamSettings" : {
        ...
      }
    }
  ]
}

至此,通过/jffs/v2ray/v2ray --config=/jffs/v2ray/config.json,能够在命令行中启动V2Ray,如果需要V2Ray在路由器开机后自动启动,可以参考企业号航行网志第三页#V2Ray设定部分的内容,此处不做赘述。

尝试连接

在macOS(或其他设备,本文以macOS/iOS/iPadOS为例)上的网络设置中,将高级设置/代理中,将SOCKS代理设定为路由器开放的地址及端口,见下图。

macOS中SOCKS代理设置

可以发现macOS的数据包已经成功转发至路由器,并且能够访问所需的网络资源。

问题在于:此时macOS的所有流量都会被转发到服务器,服务器承压过大,且Google通过流量计费,会浪费大量费用。

路由器上搭建WPAD

为了解决上面的问题,我们需要在路由器端(或其他服务器上)搭建WPAD,WPAD的具体解释可以参考维基百科,简单地说,它和我们日常使用V2Ray/ShadowSocks客户端时看到的PAC模式类似,能够将特定的流量转发代理端口从而通过服务器,非指定范围内的流量则不通过服务器转发。

为了方便管理和配置,以及节省服务器开销,本文直接将WPAD搭建在Merlin中,若路由器性能不足,则可以考虑搭建在其他服务器上,搭建在其他服务器时,PAC文件中端口转发的设定需要和搭建在本地完全一致。

后续方法参考sskaje的思路。

检查WPAD文件状态

首先,在路由器上检查目前WPAD没有被使用,连接路由器后,执行以下命令。

1
2
root@AC86U:~# ls -al /www/wpad.dat
lrwxrwxrwx    1 root  root            18 Aug  1 02:50 /www/wpad.dat -> /www/ext/proxy.pac

可以wpad.dat文件指向/www/ext/proxy.pac文件,但是进入/www/ext/目录,发现proxy.pac文件并不存在。

新建pac文件并写入内容

因此,新建proxy.pac文件,写入内容,建议参考gfwlist2pac,该项目每天会将GFW列表转化为pac文件。

需要注意的是,pac文件中的var proxy是在操作系统读取到文件之后,需要将特定规则的流量转发到的地址,因此,需要是你上方在路由器中配置的inbound地址。

1
2
3
4
5
6
// 源文件
var proxy = 'SOCKS5 127.0.0.1:1080';
// inbound为HTTP协议
var proxy = 'PROXY 192.168.50.1:10087';
// inbound为SOCKS5协议
var proxy = 'SOCKS5 192.168.50.1:10087';

如果有特殊需求(在原有pac文件外的站点)需要转发,则可以添加在rules中。

修改Dnsmasq

Dnsmasq的详细解释可以参考维基百科,简单地说,就是路由器上额外的DNS解析表,方便在局域网内将某一个域名解析为特定的IP,可以理解为修改局域网内全局的hosts文件。

修改/jffs/scripts/dnsmasq.postconf文件为下方内容。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/sh
CONFIG=$1
source /usr/sbin/helper.sh

IP=192.168.1.1
DOMAIN=my.home.local

pc_append "address=/wpad/$IP" $CONFIG
pc_append "address=/wpad.$DOMAIN/$IP" $CONFIG
pc_append "address=/proxy/$IP" $CONFIG

# 此处,为了更直观表示,将原本的wpad.dat替换为proxy.pac,可正常读取。
pc_replace 'dhcp-option=lan,252,"\n"' 'dhcp-option=lan,252,"http://wpad.'$DOMAIN'/proxy.pac"' $CONFIG  

由于本人对bash的了解较少,因此直接使用了sskaje的设定。

设定完成后,将该文件权限修改为可执行,并重启Dnsmasq服务。

1
2
root@AC86U:~# chmod +x /jffs/scripts/dnsmasq.postconf
root@AC86U:~# service restart_dnsmasq

可以通过下述命令,验证Dnsmasq文件已经被成功加载。

1
2
root@AC86U:/jffs/v2ray# grep 252 /etc/dnsmasq.conf
dhcp-option=lan,252,"http://wpad.my.home.local/proxy.pac"

进一步地,在浏览器中访问http://wpad.my.home.local/proxy.pac后,应该会自动将你设定好的pac文件下载至本地。

本地设备打开自动代理模式

在macOS上打开网络设定,在高级设置/代理中将自动代理打开,并填写在dnsmasq.postconf文件中设定的URL,如下图所示。

macOS配置自动代理

至此,macOS中所有指定的流量都能够通过V2Ray转发至服务器,非指定流量则通过直接连接发送。

iOS/iPadOS的PAC文件设定

以iOS设备为例,在设置/无线网络中连接你的路由器,并在右侧点击蓝色标志,进入详细设置。

点击最下方的HTTP代理,进入设置代理,选择自动模式,并且填写上方的URL,如下图所示。

iOS配置自动代理

最需要注意的是,配置完成之后,点击右上方保存,关闭无线网络并重新打开,连接该路由器设备,才会加载pa c文件!我在这个步骤耗费了接近2个小时,实在找不到bug,直到重启无线网络才发现问题的关键…

展望和构想

将有线/无线设备直接连接路由器后,并不进行额外设置直接能够实现流量判断和转发。

该功能的实现或许需要路由器上的额外设置或者软路由的加成,在KoolShare官改版Merlin的应用中心中的V2Ray插件似乎能够实现相关功能,但我并不确定AC86U的性能能否在本机实现这个功能,暂时没有并未深入研究。后期可能会尝试实现此功能,并通过另外一篇文章来介绍实现方式。

欢迎交流与讨论。

参考内容

  1. V2Ray官方网站
  2. 企业号航行网志
  3. SmallNetBuilder Forums
  4. Sskaje’s Blog