Zed(M-Abozaid)가 만든 오픈소스 프로젝트 esp32-c3-adblock은 2달러짜리 ESP32-C3 보드에서 동작하는 Pi-hole 방식의 DNS 광고 차단기다. PSRAM 대신 플래시 메모리에 도메인 해시를 저장해 가정이나 소규모 사무실 네트워크의 기기에서 광고·추적 도메인으로 향하는 DNS 요청을 차단한다.
이 프로젝트는 도메인 문자열을 RAM에 저장하지 않고, 정렬된 40비트 FNV-1a 해시로 바꿔 플래시에 기록한다. DNS 요청이 들어오면 도메인과 상위 도메인 접미사의 해시를 계산해 이진 검색으로 확인한다. 차단 목록에 있으면 0.0.0.0을 돌려주고, 없으면 상위 DNS 서버에 요청을 전달한다. 제작자 설명에 따르면 도메인 14만 개 이상을 플래시 약 0.7MB에 저장하며 RAM 사용량은 약 50KB다. 조회에는 Wi-Fi 왕복 시간을 포함해 약 10ms가 걸리고 플래시 읽기는 약 18회 수행한다.
용량과 사용 조건
최소 4MB 플래시가 필요하다. 4MB ESP32-C3에서 펌웨어 무선 업데이트(OTA)를 지원하려면 앱 파티션 두 개를 사용해야 하며, 이때 차단 목록에는 약 1.3MB가 남아 최대 25만 개 도메인을 저장할 수 있다. 최대 약 53만7000개를 저장하려면 단일 앱 파티션으로 전환해야 하며, 이 구성에서는 펌웨어 OTA 업데이트를 사용할 수 없다.
제작자는 40비트 해시가 플래시 용량에 맞춘 선택이라고 설명한다. 약 14만1000개 도메인에서는 해시 충돌이 거의 없고, 약 53만7000개에서는 충돌이 대략 한 건 발생해 도메인 하나가 추가로 차단될 수 있다. 32비트 해시를 쓰면 공간은 절약되지만 도메인 25만 개에서 충돌이 약 7건 발생한다고 한다.
대시보드는 http://c3adblock.local에서 이용할 수 있다. 기기별 허용·차단 DNS 요청을 확인하고, 특정 기기를 차단하거나 사용자 지정 도메인을 목록에 추가할 수 있다. 초기 Wi-Fi 설정은 포털에서 진행하므로 자격 증명을 펌웨어에 직접 입력할 필요가 없다. 펌웨어와 차단 목록의 OTA 업데이트, 지정한 URL에서 미리 만든 차단 목록을 내려받는 예약 업데이트도 지원한다.
하드웨어는 16핀 ESP32-C3 Super Mini 모듈과 Espressif Systems ESP32-C3FH4를 기준으로 한다. 단일 코어 32비트 RISC-V 마이크로컨트롤러로 최대 160MHz에서 동작하며, SRAM은 400KB, 플래시는 4MB, 무선은 2.4GHz Wi-Fi 4다. 전원은 안정적인 5V USB 공급이 필요하다. 전원 불안정으로 무선 기능이 중단될 수 있다고 안내한다. 클래식 ESP32(DevKit/WROOM) 보드에서도 커뮤니티 테스트를 거쳤으며, ESP32-C3 SuperMini용 3D 프린팅 케이스 파일도 제공한다.
이 프로젝트는 s60sc의 ESP32_AdBlocker에서 영감을 얻었지만, PSRAM 대신 플래시 메모리에 대용량 차단 목록을 저장하는 독립 구현이다. 제작자는 16MB ESP32-S3에서 40비트 해시를 사용하면 약 270만 개 도메인을 저장할 수 있다고 설명한다. 이는 8MB PSRAM에 문자열 형태로 저장하는 약 46만6000개와 비교한 수치다. C++ 소스 코드와 PlatformIO 빌드 안내, 케이스 파일은 GitHub 저장소에서 확인할 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요