ESP32-C3 AdBlock : อุปกรณ์บล็อกโฆษณาผ่าน DNS รองรับมากกว่า 500,000 โดเมน ด้วยบอร์ด ESP32-C3 โดยไม่ต้องใช้ PSRAM

โครงการ esp32-c3-adblock พัฒนาโดย Zed (M-Abozaid) เป็นอุปกรณ์บล็อกโฆษณาผ่าน DNS ในรูปแบบเดียวกับ Pi-hole ซึ่งเป็นโครงการโอเพนซอร์สที่สามารถทำงานบนบอร์ดหรือโมดูลไมโครคอนโทรลเลอร์ ESP32-C3 ราคา $2 (~70฿) โดยไม่จำเป็นต้องมีหน่วยความจำ PSRAM อุปกรณ์นี้สามารถบล็อกโฆษณาและโดเมนติดตามข้อมูลบนอุปกรณ์ต่าง ๆ ภายในเครือข่ายบ้านหรือสำนักงานขนาดเล็กได้ ด้วยการกรองคำขอ DNS

แทนที่จะเก็บชื่อโดเมนเป็นข้อความไว้ใน RAM โครงการนี้จะจัดเก็บค่าแฮช FNV-1a ขนาด 40 บิตที่เรียงลำดับแล้วลงในหน่วยความจำแฟลช จากนั้นใช้วิธีค้นหาแบบ Binary Search เพื่อตรวจสอบโดเมนที่ร้องขอ เมื่อมีคำขอ DNS ผ่าน UDP เข้ามา เฟิร์มแวร์ที่เขียนด้วยภาษา C++ จะดึงชื่อโดเมนออกมา คำนวณค่าแฮชของโดเมนนั้น รวมถึงโดเมนส่วนต่อท้ายของระดับที่สูงกว่า แล้วค้นหาค่าแฮชดังกล่าวในตารางที่เก็บอยู่ในแฟลช หากพบว่าโดเมนนั้นอยู่ในรายการบล็อก ระบบจะตอบกลับด้วยที่อยู่ IP 0.0.0.0 เพื่อป้องกันการเข้าถึงโดเมนดังกล่าว แต่หากไม่พบ ระบบจะส่งคำขอต่อไปยังเซิร์ฟเวอร์ DNS ต้นทาง (Upstream DNS Server) แล้วส่งคำตอบกลับไปยังอุปกรณ์ที่ร้องขอ วิธีนี้ช่วยให้สามารถจัดเก็บโดเมนมากกว่า 140,000 รายการในหน่วยความจำแฟลชประมาณ 0.7 MB โดยใช้ RAM เพียงประมาณ 50 KB การค้นหาแต่ละครั้งใช้เวลาประมาณ 10 มิลลิวินาที ซึ่งรวมเวลาเดินทางของข้อมูลผ่าน Wi-Fi แล้ว และต้องอ่านข้อมูลจากแฟลชประมาณ 18 ครั้ง

อุปกรณ์บล็อกโฆษณา DNS ที่ใช้บอร์ด ESP32-C3 SuperMini พร้อมกล่องพิมพ์ 3 มิติ และอะแดปเตอร์ USB-C to USB-A สำหรับเสียบเข้ากับเราเตอร์โดยตรง

ข้อกำหนดและคุณสมบัติเด่นของ esp32-c3-adblock

  • โมดูลไร้สาย – โมดูล ESP32-C3 Super Mini แบบ 16 พิน
    • SoC – Espressif Systems ESP32-C3FH4
      • CPU – ไมโครคอนโทรลเลอร์ RISC-V 32 บิตแบบ single-core ความเร็วสูงสุด 160 MHz
      • หน่วยความจำระบบ – SRAM 400 KB
      • ที่จัดเก็บข้อมูล – Flash 4 MB
      • การเชื่อมต่อไร้สาย – WiFi 4 ย่านความถี่ 2.4 GHz
    • USB – พอร์ต USB Type-C สำหรับอัปโหลดโปรแกรม
    • สายอากาศเซรามิก
    • มีการทดสอบจากชุมชนผู้ใช้งานกับบอร์ด ESP32 รุ่นดั้งเดิม เช่น DevKit และ WROOM ด้วยเช่นกัน
  • ที่จัดเก็บข้อมูล – ต้องมีหน่วยความจำ Flash อย่างน้อย 4 MB
    • ใช้พื้นที่แฟลชประมาณ 0.7 MB สำหรับโดเมนมากกว่า 140,000 รายการ
    • จัดเก็บโดเมนเป็นค่าแฮช FNV-1a ขนาด 40 บิต หรือ 5 ไบต์ต่อรายการ เรียงลำดับค่าแฮชเพื่อให้ค้นหาด้วย Binary Search ได้อย่างมีประสิทธิภาพ ไม่จำเป็นต้องเก็บข้อความชื่อโดเมนทั้งหมดไว้ใน RAM
  • ประสิทธิภาพการบล็อก DNS (DNS sinkhole)
    • เวลาค้นหา – ประมาณ 10 มิลลิวินาที (รวมการอ่านแฟลชราว 18 ครั้งและเวลาส่งข้อมูลไป-กลับของ WiFi)
    • ตัวเลือกความจุ – รายการโดเมนประมาณ 141,000 รายการ (โอกาสเกิดการชนกันของแฮชแทบเป็นศูนย์), รายการโดเมนประมาณ 250,000 รายการ (รองรับการอัปเดตเฟิร์มแวร์แบบ OTA บนพาร์ทิชันที่เหมาะสม) หรือรายการโดเมนสูงสุดประมาณ 537,000 รายการ (พาร์ติชันแบบ single-app และมีการชนกันของแฮชประมาณ 1 ครั้ง)
  • ความปลอดภัย
    • ใช้ HTTP Basic Authentication กับ API หรือปลายทางที่สามารถเปลี่ยนแปลงการตั้งค่าได้
    • ป้องกันการโจมตีแบบ XSS ด้วยการ Escape ข้อความของโดเมนที่ผู้ใช้กำหนดเอง
    • เพิ่มมาตรการป้องกันการโจมตีแบบ CSRF
  • แหล่งจ่ายไฟ – 5V ผ่าน USB (จำเป็นต้องมีแหล่งจ่ายไฟที่เสถียร เพื่อป้องกันปัญหาแรงดันตกขณะใช้งานวิทยุ)
  • กล่อง – มีไฟล์กล่อง STL สำหรับพิมพ์ 3D สำหรับฟอร์มแฟกเตอร์ ESP32-C3 SuperMini

ESP32-C3 SuperMini สำหรับบล็อกโฆษณา DNS เชื่อมต่อโดยตรงกับพอร์ต USB ของเราเตอร์ (ภาพปรับปรุงด้วย AI)

โครงการนี้มีเว็บแดชบอร์ดที่สามารถเข้าถึงได้ผ่าน http://c3adblock.local ซึ่งผู้ใช้สามารถตรวจสอบคำขอ DNS ที่ถูกบล็อกและอนุญาตแยกตามอุปกรณ์แต่ละเครื่อง บล็อกอุปกรณ์ที่ต้องการ และเพิ่มโดเมนที่กำหนดเองลงในรายการบล็อกได้ โดยการตั้งค่า Wi-Fi ครั้งแรกจะดำเนินการผ่าน Captive Portal ทำให้ผู้ใช้ไม่จำเป็นต้องกำหนดข้อมูล Wi-Fi ไว้ในโค้ดโดยตรง

นอกจากนี้ ยังรองรับการอัปเดตผ่านเครือข่าย (OTA) ทั้งในส่วนของเฟิร์มแวร์และรายการบล็อกโดเมน รวมถึงการตั้งเวลาให้อัปเดตโดยอัตโนมัติ ซึ่งจะดาวน์โหลดไฟล์รายการบล็อกที่เตรียมไว้ล่วงหน้าจาก URL ที่กำหนด
สำหรับบอร์ด ESP32-C3 ที่มีหน่วยความจำแฟลชขนาด 4MB การอัปเดตเฟิร์มแวร์ผ่าน OTA จำเป็นต้องใช้พาร์ติชันสำหรับแอปพลิเคชัน 2 ช่อง ทำให้เหลือพื้นที่แฟลชประมาณ 1.3MB สำหรับจัดเก็บรายการบล็อกโดเมน ซึ่งเพียงพอสำหรับจัดเก็บโดเมนได้สูงสุด 250,000 รายการ หากต้องการใช้รายการบล็อกขนาดใหญ่ที่มีโดเมน 537,000 รายการ ผู้ใช้จะต้องเปลี่ยนรูปแบบการแบ่งพาร์ติชันเป็นแบบแอปพลิเคชันเดียว (Single-App Partition Layout) ซึ่งจะทำให้ไม่สามารถอัปเดตเฟิร์มแวร์ผ่าน OTA ได้

เว็บแดชบอร์ดแสดงสถิติรายการบล็อก อุปกรณ์ที่เชื่อมต่อ ความแรงสัญญาณ Wi-Fi การใช้หน่วยความจำ และโดเมนที่กำหนดให้บล็อก (ภาพปรับปรุงด้วย AI)

สิ่งที่น่าสนใจคือการใช้ค่าแฮชขนาด 40 บิต โดยผู้พัฒนาระบุว่าเป็นขนาดที่เหมาะสมที่สุดสำหรับพื้นที่แฟลชที่มีอยู่ เมื่อมีโดเมน 141,000 รายการ จะเกิดการชนกันของค่าแฮช (Hash Collision) น้อยมากจนแทบเป็นศูนย์ แต่หากเพิ่มรายการเป็น 537,000 โดเมน จะเกิดการชนกันประมาณ 1 ครั้ง ซึ่งอาจทำให้บล็อกโดเมนที่ไม่ควรถูกบล็อกไปด้วย หากลดขนาดแฮชมาตรฐานเหลือ 32 บิต จะช่วยประหยัดพื้นที่แฟลชได้ แต่จะทำให้เกิดการชนกันประมาณ 7 ครั้ง เมื่อมีโดเมน 250,000 รายการ

ผู้พัฒนาระบุว่าโปรเจกต์นี้ได้แรงบันดาลใจจากโครงการ ESP32_AdBlocker ของ s60sc แต่เป็นการพัฒนาขึ้นใหม่อย่างอิสระ โดยเลือกใช้หน่วยความจำแฟลชแทน PSRAM เพื่อจัดเก็บรายการบล็อกโดเมนขนาดใหญ่ แนวทางเดียวกันนี้ยังสามารถนำไปใช้กับชิปที่มีประสิทธิภาพสูงกว่าได้ เช่น ESP32-S3 ที่มีหน่วยความจำแฟลช 16MB สามารถจัดเก็บโดเมนได้ประมาณ 2.7 ล้านรายการ ด้วยค่าแฮชขนาด 40 บิต เทียบกับการจัดเก็บชื่อโดเมนเป็นข้อความ ซึ่งรองรับได้ประมาณ 466,000 รายการบน PSRAM ขนาด 8MB

ผู้สนใจสามารถเข้าไปดูซอร์สโค้ดภาษา C++ ขั้นตอนการคอมไพล์ด้วย PlatformIO และไฟล์กล่องสำหรับพิมพ์ 3 มิติได้จาก GitHub repository

แปลจากบทความ : Open-source ESP32-C3 DNS ad blocker supports up to over 500,000 domains without PSRAM

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
โฆษณา