Bạn không cần Raspberry Pi hay mini PC để xây dựng một hệ thống chặn quảng cáo cho toàn bộ mạng gia đình. Một lập trình viên vừa chứng minh rằng chỉ với một bo mạch ESP32-C3 giá khoảng 5 USD, bạn vẫn có thể tạo ra một máy chủ DNS có khả năng chặn hơn 500.000 tên miền quảng cáo với độ trễ chỉ khoảng 10 ms.
ESP32 thay thế Raspberry Pi làm DNS dự phòng
Nhà phát triển full-stack người Ai Cập ZedAxis (GitHub: M-Abozaid) đã chia sẻ dự án sử dụng bo mạch ESP32-C3 SuperMini để xây dựng một máy chủ DNS tích hợp tính năng chặn quảng cáo.
Trong hệ thống của anh, Pi-hole trên Raspberry Pi vẫn đóng vai trò máy chủ DNS chính, chịu trách nhiệm cấp phát DHCP và lọc quảng cáo.
ESP32 chỉ hoạt động như máy chủ DNS dự phòng, tự động tiếp quản khi Pi-hole khởi động lại hoặc gặp sự cố, giúp toàn bộ mạng vẫn duy trì khả năng phân giải DNS và chặn quảng cáo.
![Chi voi khoang 5 USD, lap trinh vien bien ESP32 thanh may chu DNS chan hon 500.000 ten mien quang cao Chỉ với khoảng 5 USD, lập trình viên biến ESP32 thành máy chủ DNS chặn hơn 500.000 tên miền quảng cáo]()
Chỉ 400 KB RAM vẫn xử lý được hơn nửa triệu tên miền
Điều đáng chú ý là bo mạch ESP32-C3 không hề mạnh.
Thông số phần cứng chỉ gồm:
- RAM: 400 KB
- Flash: 4 MB
- Wi-Fi tích hợp
- Không có PSRAM như các mẫu ESP32 cao cấp
Với lượng bộ nhớ khiêm tốn này, việc lưu trực tiếp danh sách chặn hàng trăm nghìn tên miền là bất khả thi.
Thay vì vậy, ZedAxis đã lựa chọn một giải pháp thông minh hơn.
Sử dụng hàm băm để giảm kích thước dữ liệu
Toàn bộ dự án dựa trên việc băm (hash) tên miền thay vì lưu chuỗi văn bản gốc.
Quy trình hoạt động gồm:
- Tải các danh sách chặn công khai.
- Loại bỏ các mục trùng lặp và chú thích.
- Chuyển từng tên miền thành mã băm FNV-1a 40-bit.
- Sắp xếp toàn bộ danh sách.
- Ghi cơ sở dữ liệu vào bộ nhớ flash của ESP32.
Theo tác giả, lựa chọn 40-bit là điểm cân bằng hợp lý:
- 32-bit tạo quá nhiều xung đột.
- 64-bit lại tiêu tốn quá nhiều bộ nhớ.
Nhờ đó, ESP32 có thể lưu khoảng 537.000 tên miền trong bộ nhớ flash chỉ vài MB.
![Chi voi khoang 5 USD, lap trinh vien bien ESP32 thanh may chu DNS chan hon 500.000 ten mien quang cao 2 Chỉ với khoảng 5 USD, lập trình viên biến ESP32 thành máy chủ DNS chặn hơn 500.000 tên miền quảng cáo 2]()
Kiểm tra tên miền chỉ mất khoảng 10 mili giây
Khi một thiết bị trong mạng gửi yêu cầu DNS, ESP32 sẽ:
- Băm tên miền theo cùng thuật toán.
- Thực hiện tìm kiếm nhị phân trong danh sách hash đã sắp xếp.
- Nếu tìm thấy, truy vấn bị chặn.
- Nếu không, yêu cầu sẽ được chuyển tiếp tới máy chủ DNS bên ngoài.
Theo ZedAxis:
- Thời gian phản hồi cho tên miền bị chặn khoảng 10 ms.
- RAM sử dụng khi hoạt động chỉ khoảng 50 KB.
Đánh đổi để tăng gấp đôi số lượng tên miền có thể chặn
Một điểm thú vị khác là cách tận dụng bộ nhớ flash.
Thông thường, ESP32 dành một phần flash để lưu bản firmware thứ hai, phục vụ cập nhật OTA (Over-The-Air).
Nếu người dùng không cần cập nhật firmware qua Wi-Fi, phân vùng này có thể được tận dụng để lưu thêm cơ sở dữ liệu.
Kết quả là:
- Có OTA: khoảng 250.000 tên miền.
- Không OTA: khoảng 537.000 tên miền.
Đây là một cách đánh đổi khá hợp lý đối với thiết bị vốn chỉ đóng vai trò máy chủ DNS dự phòng.
![Chi voi khoang 5 USD, lap trinh vien bien ESP32 thanh may chu DNS chan hon 500.000 ten mien quang cao 3 Chỉ với khoảng 5 USD, lập trình viên biến ESP32 thành máy chủ DNS chặn hơn 500.000 tên miền quảng cáo 3]()
Không thay thế Pi-hole nhưng là phương án dự phòng lý tưởng
ZedAxis khẳng định dự án này không nhằm cạnh tranh với Pi-hole hay AdGuard Home.
ESP32 không có:
- thống kê theo từng thiết bị,
- lịch sử truy vấn,
- giao diện quản trị nâng cao,
- các bộ lọc và tùy chỉnh phức tạp.
Thay vào đó, mục tiêu của nó là trở thành một DNS dự phòng cực kỳ tiết kiệm điện, hoạt động âm thầm trong mạng nội bộ.
Nếu Raspberry Pi gặp sự cố hoặc đang khởi động lại, toàn bộ thiết bị trong nhà vẫn tiếp tục nhận được phản hồi DNS đã lọc quảng cáo thay vì chuyển sang máy chủ DNS mặc định của router.
Một giải pháp giá rẻ nhưng đầy sáng tạo
Bo mạch ESP32-C3 SuperMini hiện có giá khoảng 5 USD (thậm chí rẻ hơn tại một số thị trường), nhưng vẫn đủ sức đảm nhiệm vai trò mà nhiều người nghĩ cần đến Raspberry Pi.
Dự án của ZedAxis cho thấy với một chút tối ưu thuật toán và tận dụng hợp lý tài nguyên phần cứng, ngay cả một vi điều khiển chỉ có 400 KB RAM cũng có thể xử lý danh sách chặn hơn nửa triệu tên miền.
Đây là một minh chứng thú vị cho khả năng của dòng ESP32, đồng thời là lựa chọn đáng cân nhắc cho những ai muốn bổ sung một lớp dự phòng cho hệ thống Pi-hole hoặc AdGuard Home mà không phải đầu tư thêm phần cứng đắt tiền.