概述
HomeProxy是一个基于sing-box的现代代理平台,专为OpenWrt/ImmortalWrt设计,提供Web界面管理。本文将详细介绍如何为MT7981BA(aarch64架构)编译HomeProxy。
背景
sing-box版本更新的,发布的HomeProxy版本未及时更新,导致报错,所以干脆自己用最新代码编译一个新的。
目标平台信息
- 设备: MT7981BA路由器(TR3000)
- 架构: ARMv8 Processor rev 4 (v8l) x 2
- 系统: ImmortalWrt 6.6.68
编译环境准备
1. 安装构建依赖
sudo apt update
sudo apt install -y build-essential flex bison g++ gawk gcc-multilib g++-multilib \
gettext git libfuse-dev libncurses5-dev libssl-dev python3 python3-pip \
python3-ply python3-pyelftools rsync unzip zlib1g-dev file wget subversion \
patch upx-ucl autoconf automake curl asciidoc binutils bzip2 lib32gcc-s1 \
libc6-dev-i386 uglifyjs msmtp texinfo libreadline-dev libglib2.0-dev \
xmlto libelf-dev libtool autopoint antlr3 gperf ccache swig coreutils \
haveged scons libpython3-dev jq
2. 获取ImmortalWrt源码
cd /home/euler/projects
git clone https://github.com/immortalwrt/immortalwrt.git
cd immortalwrt
git pull
3. 更新feeds
./scripts/feeds update -a
./scripts/feeds install -a
HomeProxy源码准备
1. 获取HomeProxy源码
cd /home/euler/projects
git clone https://github.com/VIKINGYFY/HomeProxy.git homeproxy
2. 复制到feeds目录
cd /home/euler/projects/immortalwrt
cp -r /home/euler/projects/homeproxy feeds/luci/applications/
编译配置
1. 生成默认配置
make defconfig
2. 编辑配置文件
由于无法使用交互式make menuconfig,直接编辑.config文件:
# 启用sing-box
sed -i 's/# CONFIG_PACKAGE_sing-box is not set/CONFIG_PACKAGE_sing-box=y/' .config
# 启用kmod-nft-tproxy
sed -i 's/# CONFIG_PACKAGE_kmod-nft-tproxy is not set/CONFIG_PACKAGE_kmod-nft-tproxy=y/' .config
# 启用luci-app-homeproxy
sed -i 's/# CONFIG_PACKAGE_luci-app-homeproxy is not set/CONFIG_PACKAGE_luci-app-homeproxy=y/' .config
3. 验证配置
grep -E "(luci-app-homeproxy|sing-box|kmod-nft-tproxy)" .config
编译过程
1. 清理环境
make clean
rm -rf staging_dir/toolchain-aarch64_cortex-a53_gcc-14.3.0_musl
2. 构建工具链
# 安装工具
make tools/install -j$(nproc)
# 安装工具链
make toolchain/install -j$(nproc)
3. 编译内核
make target/linux/compile -j$(nproc)
4. 编译HomeProxy
make package/luci-app-homeproxy/compile -j$(nproc) V=s
编译结果
编译成功后,在以下目录找到生成的包:
# 查看编译结果
find bin/ -name "*homeproxy*" -o -name "*sing-box*"
# 输出示例:
# bin/packages/aarch64_cortex-a53/packages/sing-box-1.12.8-r1.apk
# bin/packages/aarch64_cortex-a53/luci/luci-app-homeproxy-25.270.37846~91e480e.apk
包信息
- sing-box-1.12.8-r1.apk: 14.9MB,sing-box内核
- luci-app-homeproxy-25.270.37846~91e480e.apk: 599KB,LuCI Web界面
安装方法
1. 上传到路由器
scp sing-box-1.12.8-r1.apk root@路由器IP:/tmp/
scp luci-app-homeproxy-25.270.37846~91e480e.apk root@路由器IP:/tmp/
2. 在路由器上安装
# 先安装sing-box依赖
apk add --allow-untrusted /tmp/sing-box-1.12.8-r1.apk
# 再安装HomeProxy
apk add --allow-untrusted /tmp/luci-app-homeproxy-25.270.37846~91e480e.apk
3. 验证安装
# 检查服务状态
/etc/init.d/sing-box status
# 检查LuCI界面
# 访问 http://路由器IP/cgi-bin/luci
# 在"服务"菜单找到"HomeProxy"
常见问题解决
1. 签名验证失败
问题: ERROR: package.apk: UNTRUSTED signature
解决: 使用--allow-untrusted参数
apk add --allow-untrusted /tmp/package.apk
2. 依赖缺失
问题: 编译时缺少依赖
解决: 确保所有依赖包已启用
# 检查依赖
grep -E "(firewall4|kmod-nft-tproxy|ucode-mod-digest)" .config
3. 工具链问题
问题: 工具链编译失败
解决: 重新构建工具链
make clean
make tools/install -j$(nproc)
make toolchain/install -j$(nproc)
使用说明
1. Web界面访问
- 访问路由器IP:
http://192.168.1.1/cgi-bin/luci - 登录后进入"服务" → "HomeProxy"
2. 基本配置
- 节点配置: 添加代理服务器信息
- 规则配置: 设置分流规则
- DNS配置: 配置DNS服务器
- 启动服务: 启用HomeProxy服务
3. 高级功能
- 透明代理: 支持透明代理模式
- 规则分流: 支持基于域名/IP的分流
- 多协议支持: 支持VMess、VLESS、Trojan等协议
- 日志查看: 实时查看连接日志
总结
通过本文的步骤,成功为MT7981BA编译了HomeProxy代理工具。编译过程包括:
- 环境准备: 安装构建依赖和获取源码
- 配置编译: 启用相关包和依赖
- 执行编译: 构建工具链和编译包
- 安装使用: 在目标设备上安装和配置
HomeProxy提供了现代化的Web界面,使得代理配置更加直观和便捷,特别适合在OpenWrt/ImmortalWrt路由器上使用。
相关资源
本文基于实际编译经验整理,适用于MT7981BA平台的ImmortalWrt系统。