網路廣告可說是很多人每天上網最討厭的東西之一,為了阻擋廣告,很多人可能會購買一些擋廣告的工具,而國外有位神級開發者,只花了區區 5 美元,就手工打造出一款「硬體級」的微型擋廣告神器!
不僅能從 DNS 階段直接封鎖高達 53.7 萬個廣告網域,更誇張的是,整個韌體運作竟然只需消耗不到 50KB 的 RAM。

只要 5 美元就能擋掉 53.7 萬個網域!ESP32-C3 變身超迷你備援擋廣告器
這個開源專案是由埃及全端開發者 ZedAxis 製作,使用一片體積非常小的 Wi-Fi 微控制器開發板 ESP32-C3 SuperMini 來做到。
ESP32-C3 本身採用單核心 32-bit RISC-V 處理器,時脈最高 160MHz,擁有 400KB SRAM,其中有 16KB 會作為快取。這款 SuperMini 開發板還搭配 4MB 快閃記憶體,但沒有高階 ESP32 開發板常見的 PSRAM:
運作原理與 Pi-hole 類似,都是透過 DNS 黑名單攔截廣告網域,讓家中的手機、電腦、電視與其他裝置無法連上這些廣告伺服器。
不過,這裝置也不是要完整取代 Pi-hole。開發者家中的主要 DNS 與 DHCP 服務還是由 Pi-hole 負責,ESP32-C3 的定位則是第二組具有擋廣告能力的 DNS。當 Pi-hole 正在重開機、更新或暫時無法連線時,家中裝置還有另一個 DNS 可以使用,不必直接改走完全沒有過濾功能的公共 DNS。
需要準備的硬體如下:一片具有 4MB Flash 的 ESP32-C3 開發板,加上一條 USB 線或 USB-A 轉 USB-C 接頭即可。
ESP32-C3 AdBlock 專案還提供 ESP32-C3 SuperMini 專用的 3D 列印外殼檔案,不需要支撐材料,使用 0.2mm 層高與約 15%填充就能列印。沒有 3D 印表機也不影響功能,外殼只是讓成品更完整。
供電也不需要準備特殊設備。開發者直接利用 Huawei OptiXstar 光纖閘道器後方的 USB 埠供電,USB 只負責提供 5V 電力,所有 DNS 流量都透過 ESP32-C3 內建的 2.4GHz Wi-Fi 傳輸,完全不需要實體網路線。
而接法很簡單,只要將 ESP32-C3 接上 USB 轉接頭,再插進路由器後方的 USB 埠,實體組裝就完成了:
不過要注意的是,便宜的 USB-C 轉 USB-A 接頭如果接觸不良,可能在 Wi-Fi 發射時因為供電不穩而重新啟動。
開發者也提醒,3D 列印外殼不要遮住板載天線,附近盡量避免金屬,並且要保留通風孔。這片板子待機時溫度約為 45~55°C,體積雖小,但仍不能完全密封起來。
下圖是 ESP32-C3 AdBlock 的網頁控制介面,可查看黑名單數量、記憶體、溫度及各裝置的封鎖統計:
這個專案最有意思的部分是:如何把數十萬個網域塞進只有 4MB 的快閃記憶體。
一般黑名單會儲存 `doubleclick.net` 這類純文字網域,十幾萬筆資料加在一起,很快就會超過 ESP32-C3 能負擔的容量。ZedAxis 沒有直接保存完整名稱,而是利用 40-bit FNV-1a 雜湊,將每個網域轉成固定 5 Bytes 的數值,再把這些數值排序後寫進快閃記憶體。
這就像把幾十萬個長短不一的名字,全部換成固定長度的編號。不僅每一筆資料占用的空間變小,也不必把整份清單讀進 RAM 才能搜尋。
當網路裝置送來 DNS 查詢,ESP32-C3 會先擷取網域名稱,利用相同演算法算出雜湊值,再透過二分搜尋比對已排序的資料庫。如果找到相同數值,它就回覆 `0.0.0.0`,讓裝置無法連上對應的廣告網域;如果沒有命中,查詢就會被轉送給正常的上游 DNS,取得真正的 IP 位址後再回傳給用戶端。
至於為什麼不使用更短的 32-bit?開發者解釋,雜湊並不是完全不會重複。
兩個不同網域如果產生相同數值,就可能讓原本正常的網站被誤擋。32-bit 雖然能再節省約 20%空間,但黑名單來到 25 萬筆時,預估會出現約 7 次碰撞;40-bit 在 14.1 萬筆時沒有碰撞,擴充到 53.7 萬筆時則約有一次。64-bit 可以進一步降低機率,卻會讓每個網域多占 3 Bytes,對只有 4MB 空間的裝置來說並不划算。
根據開發者公布的資料,約 14.1 萬個網域如果用字串方式存放,可能需要約 2.5MB RAM;改用 40-bit 雜湊後,只占約 0.67MB 快閃記憶體。整套韌體運作時大約使用 50KB RAM,完成一次封鎖查詢約需 10ms,這個數字已包含 Wi-Fi 往返時間。
更多詳細資訊,可以到 ESP32-C3 AdBlock 專案 了解更多。
雖然開發者的影片提到只花 2 美元,不過外媒 Tom’s Hardware 實際查到的價格約 5 美元。




