NinjiaTag 開源防丟標籤:自架伺服器留住 Find My 的位置軌跡

NinjiaTag 是開源的自架 Find My 防丟標籤方案,用伺服器定期抓取位置報告存進自己的資料庫,軌跡不限七天。本文從原始碼拆解運作機制、Apple ID 與查詢服務的信任邊界、硬體與部署門檻,以及授權與維護現況。

用 AI 摘要這篇文章:

AirTag 用起來都很滿意,直到你想問它一個問題:上週三下午三點,它在哪裡?蘋果的「尋找」功能答不出來。官方支援文件寫得明白,App 提供的是目前位置,裝置離線時給最後已知位置,而這個最後位置最長保留七天,超過就連一個點都不剩。至於標籤走過的整條路徑,蘋果的設計裡從來沒有這種東西。

NinjiaTag 這個開源專案就是衝著這個空白來的:自己做一顆相容「尋找」網路的藍牙標籤,再自己架一台伺服器,定期把蘋果收到的位置報告抓回來,存進自己的資料庫。標籤走過的每一筆位置都落在你自己的機器上,要留多久自己決定,還能畫成軌跡、熱圖,或匯出成 GPS 交換格式檔案。

我沒有把這套系統架起來跑,手上也沒有它的標籤硬體。這篇的判斷來自我把後端兩支主程式逐行讀完、把前端打包檔抓下來掃過、對照蘋果官方支援文件,以及翻過專案的 issue 清單。能查證的我攤開講,查不到的直接標明。先講結論:它換到的永久軌跡在架構上站得住,但這筆交換會把三條原本蘋果扛著的信任邊界搬進你家,值不值得,往下看你自己會有答案。

標籤自己不會記錄,是伺服器定期去蘋果那裡領資料

先弄懂標籤怎麼被找到。標籤本身不做定位,它只反覆發出低功耗藍牙廣告封包,封包裡帶著一組公鑰。附近任何人的 iPhone 收到之後,循「尋找」網路把加密的位置與時間上報給蘋果。AirTag 找得到東西,靠的就是這種由眾人手機幫忙轉發的機制,NinjiaTag 的韌體把同樣的廣播做出來,對蘋果的網路來說它就是一顆普通的尋找類配件。

關鍵差異在查詢端。一般使用者打開「尋找」App 看到的,是蘋果決定要給你的那份畫面:當前位置,或最後已知位置。NinjiaTag 在你的伺服器上放了一支腳本,用你的 Apple ID 憑證照排程向蘋果要報告,README 給的範例排程是每五分鐘一次,作者也提醒別調得太頻繁。腳本把回來的報告解密,寫進伺服器本地的 SQLite 資料庫檔。所以「軌跡永久保存」沒有魔法:查詢這件事從手機 App 搬到你的伺服器,資料從蘋果的機房搬到你家,保存期限自然你說了算。

NinjiaTag 官方展示的軌跡查詢介面,地圖上標出標籤走過的位置點Pin
NinjiaTag 官方 README 展示的軌跡與熱圖介面

有個設計細節值得知道。標籤可以只帶一組密鑰,也可以帶多組輪流換,藍牙位址跟著定期更換。README 記載作者的實測說法:有輪換的標籤位置回報更頻繁,定位更即時,代價是比較耗電。蘋果 AirTag 本身也在用滾動識別碼,這是同一個思路。專案附的金鑰產生器支援一次批次產生多組密鑰、多個物品,就是為了這個玩法。

這個專案的血統也要講清楚。加密與廣播的基礎來自學界開源專案 OpenHaystack(德國達姆施塔特工業大學的行動安全實驗室),不用 Mac 也能查詢的關鍵來自 pypush 等前人工作,README 的致謝清單列得相當老實。把蘋果私有藍牙協定拆開來研究的另一個例子,可以看我們介紹過的 LibrePods

你的 Apple ID 會交給一支腳本保管

整套流程最硬的門檻在帳號:它需要一個 Apple ID,而且是有用實體蘋果裝置註冊過、開了簡訊雙重認證的帳號,純網頁註冊的帳號權限不夠。登入這一步在伺服器腳本裡完成,登入後拿到的查詢憑證被寫進專案目錄下一個 JSON 檔,明文放在你的伺服器上。我在程式碼裡沒有看到任何資料庫加密設定,位置資料就是一個普通的 SQLite 檔。

README 反覆建議別用常用的 Apple ID,另外註冊一個實驗帳號來跑。原因不難理解:腳本模擬的是蘋果裝置對蘋果帳號服務的認證行為,屬於非官方用法,還要靠一個獨立的 Anisette 服務偽造裝置身分表頭。README 自己就記載了這種對抗的現實:伺服器的 IP 可能被蘋果拒於門外,作者給的檢查方法是直接打蘋果的帳號服務端點,回 401 代表 IP 正常,回 503 代表這個 IP 被封,要換 IP 重來。issue 清單裡也有人卡在收不到雙重認證簡訊,可見這一步的坑不少人真的踩過。

換句話說,這不是裝完就安心的那種服務。帳號與 IP 都站在蘋果可以單方面改規則的地帶,哪天蘋果把這條非官方路徑收緊,你的軌跡系統就停在那裡,這是自架方案躲不掉的政策風險。

查詢服務預設沒有鎖,開上網路就是半公開

後端的查詢服務只有兩百出頭行,是一個 Express 網頁服務。對外只有一個查詢端點:丟進物品私鑰與時間區間,拿回軌跡或最新位置。整份程式碼裡沒有登入、沒有權杖、沒有任何身分檢查;跨來源請求全開;唯一一道防線是速率限制,同一個 IP 每五分鐘最多一百次請求。

README 接著教你把這個服務開上網路,連接埠轉發或反向代理都可以,作者建議走 Cloudflare Tunnel 這類做法,前端頁面再填入你的伺服器地址。於是問題變得非常具體:一個裝滿位置歷史的資料庫掛在網路上,鎖是什麼?以預設安裝來說,答案是好幾層「別人不知道」:不知道你的伺服器地址、不知道你的物品私鑰,查詢就會撲空。這道防護對隨機掃描是有效的,我讀到的查詢邏輯也確實要先比對私鑰才吐資料。但私鑰本身就是個檔案,放在伺服器上、備份在雲端、貼給朋友看,任何一處外流,這份行蹤就整包交出去。自架服務的信任邊界怎麼看,我們在 CrossDesk 遠端桌面那篇談過同一個題目。

前端還有一層要知道的。官方提供的前端頁面掛在別人的網域下(GitHub Pages 與中國的 atomgit 各一份),使用時你把自家後端地址填進頁面的輸入框。前端打包檔裡沒有統計或回報類的請求,頁面對外連的就是你填的後端,加上 Mapbox 與可切換的高德圖資。行為乾淨,但「在自己瀏覽器裡跑別人的頁面、把自家服務地址告訴它」這件事,你至少要知道發生了什麼。

NinjiaTag 官方前端頁面實際載入畫面,含日期區間選擇與軌跡點、熱圖、最新位置三種查詢模式Pin
官方前端頁面載入後的軌跡查詢畫面,需填入自家後端地址才能查到資料

一台存滿行蹤的機器,變成你要顧的資產

資料庫裡放的是什麼?每個標籤一連串的經緯度與時間戳,你家全部標籤的長期行蹤,濃縮在一個檔案裡。它就是你當初要的軌跡,同時也是一份完整的行蹤側寫。伺服器被別人看過檔案、備份同步到雲端、退役硬碟沒清就回收,都是這份資料的暴露面。自架換來掌控,也換來保管責任,這筆帳在動手前要先算進去。

法律與倫理的邊界也要畫清楚。這個工具的免責聲明只寫物品防丟,拿去追蹤人是違法的,台灣的跟蹤騷擾防制法就把用科技設備掌握他人行蹤納入規範。蘋果對自家配件做了不明追蹤器警示這類防護,自製標籤在那些防護機制裡會怎麼表現,沒有人給保證,這是自製路線很少被拿出來講的真實代價。

硬體與部署的真實門檻:燒錄器、專用帳號、三層服務

硬體有三條路。nRF5x 系列或 ST17H66 模組是最主流的兩條,上游都有現成韌體與燒錄腳本可拿,會用燒錄器的話買最小系統板就行,想省事也可以自己畫板打樣;更省錢的路徑是 TLSR825X 晶片,README 說常見的米家溫濕度計二號(LYWSD03MMC)也能買來刷成標籤,但作者自己寫明這條路他沒有試過。想要硬體手感的讀者,這跟自己焊一支開源電子錶是同一個世界,Watchy 開源手錶那篇談過這種玩法;只想看便宜硬體能玩出什麼,MimiClaw 用幾塊錢美金的 ESP32 跑 AI 助理也是同路數。

不想動手就買成品:作者在中國的二手平台閒魚上賣刷好的兩款標籤,圓形 Tag 與 MiniTag,也自述自己提供的伺服器頻寬有限,建議使用者還是自架。對台灣讀者來說,跨境下單、溝通與寄送的成本要自己算進去。

伺服器端則完全不是裝 App 的等級。Docker 要跑一個 Anisette 服務、Python 要裝一堆加密與網路程式庫、Node 22 加 pm2 常駐兩支程式,最後還要把查詢服務安全地開上網路。用樹莓派或便宜 VPS 都行,但從此持續運轉、更新、備份都是你的日常。這是一個小型系統管理專案,把它當成週末手作來看待比較接近實情。

開源範圍要拆開看:後端公開,硬體設計沒有

很多人看到「開源 DIY」四個字會以為整套都攤開了,實際要拆成三塊看。後端程式碼以 GPL-3.0 授權公開,這是最完整的一塊。前端程式碼另外放在 atomgit 平台上,可以自己下載部署。硬體設計則沒有開源:issue 裡有人直接問硬體會不會開源,到現在沒有下文;你買到的成品或自己燒的模組,韌體來自上游第三方專案,板子線路不在這個 repo 裡。

對想改造或商用的讀者,GPL-3.0 的傳染性也要注意:改了後端再散布,你的原始碼就得跟著公開。這對個人自用沒有影響,但拿去做產品就是另一回事了。

一年沒動的主線,與四支沒合併的安全更新

專案本身的數字:七百多顆星、八十多個 fork,2025 年 7 月開張。但 master 分支最後一次程式碼更動停在 2025 年 8 月底,內容是改說明文件;之後最醒目的活動,是四支自動化工具開出來的依賴安全更新,涵蓋 Express 與其依賴的 qs、body-parser、minimatch、tar-fs、path-to-regexp,全部沒有被合併。也就是說,你今天裝起來的是 2025 年 8 月的依賴組合,已知的安全修補停在分支上等著。對一個打算開在網路上的服務來說,這是評估時必須放進去的變數。

repo 到 2026 年還有人按星、有人開 issue,專案沒有死,但程式碼層面處於凍結狀態。認真要跑長期的人,fork 之後自己把依賴補起來,幾乎是必要的動作。

誰該動手,誰買 AirTag 就好

該動手的人輪廓很清楚:你想長期留下某個物品的位置歷史,機車、露營裝備、寵物都算;你有一台能一直開著的機器;你願意為了它辦一個專用 Apple ID;而且你看得懂 Docker 與指令。這幾個條件同時成立,NinjiaTag 給你的就是 AirTag 體系裡拿不到的東西:任意時間段的軌跡查詢、常去地點的熱圖、GPS 交換格式匯出。這幾項是 README 宣稱的功能,前端打包檔裡也確實有對應的程式碼,實際畫面我沒有操作過。

反過來,只是想知道東西現在在哪的人,AirTag 或任何通過蘋果認證的第三方尋找類配件已經夠用,還少照顧一整套基礎設施。需要近距離精確找東西的人也要知道:這些藍牙模組只做廣播,沒有 AirTag 的超寬頻精確尋找,定位顆粒度就是地圖上的一個點。

真要動手,給自己一個驗收標準再開始:先帶著標籤到人多的地方走十分鐘(README 說要有人流才有上報),回來查資料庫有沒有進東西。這一步通了,整套投資才開始回本;不通,先查帳號驗證、伺服器 IP 與排程設定,別急著怪硬體。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 971

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...