由于目前所使用的 hiboy Padavan 固件 还没有内置 trojan 代理的支持,因此只能使用自定义脚本的方式来部署。

本文主要分为三个部分:

  1. 获取 trojan 程序
  2. 配置 trojan 启动脚本
  3. 配置透明代理

获取 trojan 程序

由于目前 trojan 没有提供 MIPS 平台的可执行文件,因此需要自行编译获取对应程序。

[hanwckf/Trojan-pdv-build] 已经提供了在 Linux 环境下进行交叉编译的相关脚本,我在此基础上稍作修改,利用 github actions 实现在线编译,并在编译时自动获取最新的 trojan 版本。具体操作如下:

  1. 打开 AmBeta/Trojan-pdv-build,点击项目右上角的 Fork 按钮 fork 项目到自己的仓库
  2. 在自己 fork 的项目里,点击右上角的 Star 按钮触发构建操作
  3. 在项目的 Actions 面板中可以看到当前的构建进度,构建完成后就可以下载生成的文件了

配置 trojan 启动脚本

1. 新建 trojan 客户端配置文件

新建一个文本文档,录入以下内容,保存文件名为 trojan_config.sh
注意修改文件内容中的 <Server Host><Server Port><Password> 为你的服务器对应的域名、端口号和密码。

{
    "run_type": "client",
    "local_addr": "<RouterIP>",
    "local_port": 1080,
    "remote_addr": "<Server Host>",
    "remote_port": <Server Port>,
    "password": [
        "<Password>"
    ],
    "log_level": 2,
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        "cert": "",
        "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA",
        "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
        "sni": "",
        "alpn": [
            "h2",
            "http/1.1"
        ],
        "reuse_session": true,
        "session_ticket": false,
        "curves": ""
    },
    "tcp": {
        "no_delay": true,
        "keep_alive": true,
        "reuse_port": false,
        "fast_open": false,
        "fast_open_qlen": 20
    }
}

2. 新建 trojan 客户端启动脚本

新建一个文本文档,录入以下内容,保存文件名为 trojan_start.sh

#!/bin/sh
# 启动前运行的脚本
export PATH='/etc/storage/bin:/tmp/script:/etc/storage/script:/opt/usr/sbin:/opt/usr/bin:/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin'
export LD_LIBRARY_PATH=/lib:/opt/lib
export SSL_CERT_FILE=/etc/storage/cacert.pem

# kill existing trojan process
killall trojan

# startup
logger -t "【trojan】" "启动 trojan 客户端"
trojan -c /etc/storage/trojan_config.sh 2>&1 | logger -t "【trojan】" &

在命令行中输入以下命令为文件添加可执行权限:

chmod +x trojan_start.sh

3. 下载证书

trojan 使用 tls 与服务器建立连接,因此需要用到相关的证书,否则可能会遇到无法验证证书从而无法建立连接的问题。(mipsle not work properly at padavan Router #53
使用如下命令下载证书:

curl -O https://curl.haxx.se/ca/cacert.pem

4. 上传文件到路由器

在命令行中使用 scp 命令将以上文件拷贝到路由器(注意将 root 替换为路由器管理页面登录的用户名)。

scp trojan root@192.168.123.1:/etc/storage/bin
scp trojan_config.sh trojan_start.sh cacert.pem root@192.168.123.1:/etc/storage

由于 Padavan 特殊的安全机制,路由器重启后未执行保存命令的文件会丢失,因此需要执行一次保存操作。打开路由器的 webUI 管理页面,依次点击 高级设置->系统管理->恢复/导出/上传设置->保存 /etc/storage/ 内容到闪存->提交,等待片刻即可。

5. webUI 配置启动自定义脚本

配置路由器启动时自动启动 trojan 客户端。依次点击 高级设置->自定义设置->脚本->在路由器启动后执行,在输入框中追加如下脚本:

/etc/storage/trojan_start.sh &

配置透明代理

由于路由器性能有限,这里使用 ss_tproxy + transocks + trojan 的组合作为路由器透明代理的方案。
扩展功能->广告屏蔽功能->transocks 页面配置 transocks 透明代理服务:

transocks 配置

Padavan 固件的内置脚本会自动启用 ss_tproxy,等待脚本执行完成后路由器透明代理就设置完成了。