Skip to content
Enes Cavus
Tüm projeler
Firmware12 / 20

PURE — Ağ Geneli Reklam Engelleyici

Ev ağındaki her cihaz için reklamları ve izleyicileri engelleyen, takılıp çalışan bir kutu — sertleştirilmiş Buildroot Linux çalıştıran bir Luckfox Pico Max.

1Özellikler

  • 181 MB kullanılabilir RAM ve 256 MB SPI NAND ile Rockchip RV1106G3 (Cortex-A7, 1,2 GHz)
  • Her cihaz için DNS seviyesinde ~600.000 kurallık filtreleme, DoH sunucuları paralel sorgulanıyor
  • Ağın DHCP'sini kendisi dağıtıyor; her istemci onu kendiliğinden çözümleyici olarak alıyor
  • Standart kütüphaneyle yazılmış mDNS yanıtlayıcı sayesinde hangi alt ağda olursa olsun pure.local ile bulunuyor
  • İlk açılışta bilmediği bir alt ağa yerleşiyor, ağ geçidi susarsa eski yapılandırmaya dönüyor
  • Gerçek HTTP sağlık kontrolüne bakan watchdog: önce servisi yeniden başlatıyor, DNS inatla düşükse sistemi
  • Flash ömrünü gözetiyor: ham ölçümler RAM'de kalıyor, diske saatlik özet yazılıyor
  • Fabrika imajı sertleştirildi — telnet, Samba ve adb kapalı, SSH yalnızca anahtarla

2Teknik özellikler

Kart
Luckfox Pico Max
Yonga
RV1106G3 · Cortex-A7
RAM
181 MB kullanılabilir
Depolama
256 MB SPI NAND · UBIFS
İşletim sistemi
Buildroot 2023.02 · Linux 5.10
Filtre kuralı
~600.000
Servisler
5, açılışta başlıyor
Besleme
USB-C

3Şekil 1 — Modemin üzerinde

PURE — Ağ Geneli Reklam Engelleyici

4Cihaz paneli

Ağ durumu: 30 günlük kesinti haritası, indirme hızı ve kullanılabilirlik
Kontrol paneli: sorgular, engellenen alan adları ve cihaz bazlı kurallar
DNS'i, engellemeyi, DHCP'yi ve ağdaki diğer çözümleyicileri sınayan ağ kontrolü
Modem markasına göre yönerge gösteren ve kurulumu canlı sınayan kurulum sihirbazı

5Açıklama

PURE, ev modeminin yanında duruyor ve ağdaki her DNS sorgusunu yanıtlıyor: reklam ve izleyici alan adları bir yere varmıyor, geri kalan her şey normal çözümleniyor. Donanım bir Luckfox Pico Max — 181 MB kullanılabilir RAM ve 256 MB SPI NAND'lı Rockchip RV1106G3 Cortex-A7 — üzerinde Buildroot Linux çalışıyor; çözümleyici armv7 için tek statik Go ikilisi olarak derlendiği için tüm sistem microSD'ye gerek kalmadan NAND'a sığıyor.

İşin büyük kısmı, bir geliştirme imajını ürün gibi davranmaya ikna etmekti. Hazır imaj boş bir sertifika deposuyla geliyordu; bu yüzden şifreli üst sunucular sessizce başarısız olurken servis sağlıklı görünüyordu. Bir açılış betiği statik adresi DHCP kirasıyla eziyordu, bir yarış durumu kartı varsayılan rotasız bırakıyordu ve /root dizininin sahipliği sshd'nin anahtarları reddetmesine yol açıyordu. Her biri her cihazda elle değil imajda düzeltildi ve init zinciri, kutunun hiç görmediği bir ağda kendi yerini bulabileceği şekilde genişletildi.

Her şey donanıma göre ölçüldü. Beş servis RAM'i paylaşıyor; kesinti kaydı, hız testleri, yeni cihaz uyarıları ve Telegram bildirimleri beş ayrı süreç yerine tek Python sürecinde tek zamanlayıcı döngüsünde çalışıyor. Kart 7/24 flash üzerinde çalıştığı için ham veri RAM'de kalıyor. Çekirdeğin desteklemediği özellikler — NAT, VPN, paket filtreleme — vaat edilmek yerine ölçülüp kapsam dışı bırakıldı.

Üretim, altın NAND imajı etrafında birim başına bir süreç olarak yazılı: yaz, doğrula, geliştirme araçlarını temizle, müşteri kendi şifresini kursun diye kurulum sihirbazına döndür ve seri numarasıyla çıkış kontrol listesini imzala.

6Açılış sırası

Açılış sırası · /etc/init.d
  1. S35pureagyalnızca ilk açılışta: cihaz müşterinin alt ağına yerleşsin diye DHCP kirası alır
  2. S40networketh0'ı kayıtlı statik adresle ayağa kaldırır
  3. S45pureagağ geçidi yok + başka alt ağdan DHCP cevabı → oraya taşın ve kaydet
  4. S46pureilkayarkurulum sihirbazından sonra: filtreleri, DoH sunucularını ve DHCP'yi uygular
  5. S99adguardhomeçözümleyiciyi başlatır; varsayılan rotayı eklemeden önce LOWER_UP'ı bekler
  6. S99puremdnspure.local'i duyurur — A kaydı, cache-flush biti, 120 sn TTL
  7. S99puremonitorkesinti kaydı, saatlik hız testi ve yeni cihaz uyarıları tek süreçte
  8. S99purepanelçözümleyicinin girişinin arkasındaki web paneli
  9. S99purewatchdogHTTP sağlık kontrolü: önce yeniden başlat, yalnızca DNS için sistemi yeniden başlat

7Kaynak kullanımı

Bellek bütçesi181 MB
Çözümleyici
87 MB
Web paneli
12.4 MB
İzleyici
10.8 MB
mDNS
5.8 MB
Watchdog
<1 MB
Çekirdek, önbellek ve boş
64 MB

Beş servis çalışırken ölçülen bellek. Çözümleyici yoğun taramadan sonra ~117 MB'a çıkıyor; yük altında yaklaşık 45 MB boşta kalıyor.

8Kullanılan araçlar

BuildrootBusyBoxGoPythonShellSolidWorks