Compile OpenWRT With OpenClash
最近朋友希望弄一台翻牆路由器放在辦公室用,於是買了一台 Netgear R6300 v2。刷了 DD-WRT 後才發現問題:安裝不了 OpenClash,ipkg
連 update 都不行了,就更不用說安裝。
參考 DD-WRT 官網 development 的 Firmware Modification Kit,將 OpenClash 的 ipk 解壓縮後放進 firmware 一起重編。編譯完後的 fireware 貌似是含有 OpenClash,但是刷到 AP 後卻消失了,web 介面沒有相關的 UI、ssh 進去後也找不到。
重新拾回 OpenWRT,先刷了官網 for R6300v2 的 firmware,在 wifi 上遇到很大的問題:
- 5G 完全不能用
- 2.4G 可以用,但是目前實測很不穩 (ping 掉封包、高延遲)
實在不想花太多時間在翻牆上,而且電腦可以插網路線,不影響工作,於是就選擇 OpenWRT。
但是安裝 OpenClash 時又遇到的問題,luci-app-openclash_0.45.59-beta_all.ipk
的相依性 packages 包含了 dnsmasq-full
,而官網提供的 firmware 預設已經有了 dnsmasq
,這兩個是衝突的。如果 opkg install
加上 --nodeps
是可以解決,安裝完後的 OpenClash 也是可以使用的。不過對於系統潔癖/強迫症患者來說,這裡提供了重新編譯的解法。
版本
# | Version |
---|---|
OS (編譯用) | Debian testing |
OpenWRT | v22.03.0 |
OpenClash | v0.45.59-beta |
前置工作
sudo apt install build-essential gawk gcc-multilib flex git gettext libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev clang wget file musl-dev
wget https://github.com/vernesong/OpenClash/archive/refs/tags/v0.45.59-beta.tar.gz
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt/
git checkout v22.03.0
tar zxf ../v0.45.59-beta.tar.gz -C package/
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
執行完後就會進入選擇畫面:
Menu Config
Target System
選擇Broadcom BCM47xx/53xx (ARM)
Target Profile
選擇NETGEAR R6300 v2
LuCI
->3. Applications
->luci-app-openclash
LuCI
->1. Collections
->luci
Base system
->dnsmasq
(取消選擇)
然後保存配置為 .config
並退出
編譯
make prepare
make package/feeds/luci/luci-base/compile V=99
make V=s
編譯完後 firmware 放在 bin/targets/bcm53xx/generic/
,檔名為 openwrt-bcm53xx-generic-netgear_r6300-v2-squashfs.chk
之後就可以從 web 頁面或是 sysupgrade
指令刷 firmware。刷完後,web 介面上就可以看到 OpenClash ui:
刷完後若無配置,service 狀態應該是 stop 而非上圖的 running。
設定 OpenClash
順便紀錄下簡單的配置順序
- 先到
Config Manage
頁面,上傳你的 clash 配置檔 - 然後切換到
Global Settings
,在標籤群組下方的Current Config File
選擇剛剛上傳的配置,並點擊Switch Config
其他選項我是靠直覺的設置的,因為不熟悉,不想誤導,這裡就不一一羅列了
配置完後,回到 Overviews
然後點擊頁面下方 Enable OpenClash
按鈕:
等待服務啟動與檢驗即可 (需要等幾分鐘)。
Troubleshooting
cp: cannot stat '/root/openwrt/staging_dir/toolchain-arm_cortex-a9_gcc-11.2.0_musl_eabi/lib/ld-musl-*.so*': No such file or directory
編譯時可能會出現以下錯誤:
本來沒有這個問題,但是前幾天更新了系統後就出現了(gcc/musl版本都升級了)。但,即使改放到 docker 裡指定了 gcc 11.2.0 也是一樣的。Google了一下看到別人說是 sdk/toolchain 的問題。根據這個線索最後找到的解法是:先執行 make prepare
把 toolchain 編譯好就可以了。