یک فیلتر DNS قدرتمند با قیمت یک ساندویچ!
تصور کنید بتوانید با هزینهای کمتر از یک ناهار فستفود، یک فیلتر سختافزاری مسدودکننده تبلیغات اینترنتی بسازید که بیش از نیم میلیون دامنه را بلاک کند. این دقیقاً همان کاری است که یک توسعهدهنده مصری به نام ZedAxis (با نام کاربری @M-Abozaid در GitHub) انجام داده است. او با استفاده از یک برد میکروکنترلر ESP32-C3 به ارزش حدود ۵ دلار، یک دانگل کوچک اما بسیار کارآمد ساخته که میتواند به عنوان پشتیبان برای سیستمهایی مثل Pi-hole عمل کند.
ترفند هوشمندانه هشینگ
چالش اصلی، ذخیرهسازی لیست بلوکی عظیم با بیش از نیم میلیون دامنه در حافظه محدود ۴ مگابایتی فلش ESP32 بود. ZedAxis به جای ذخیرهسازی مستقیم دامنهها، از یک روش هوشمندانه استفاده کرد: او از هش ۴۰ بیتی FNV-1a استفاده کرد. انتخاب ۴۰ بیت یک راهحل میانی عالی است: ۳۲ بیت برخوردهای زیادی ایجاد میکند و ۶۴ بیت فضای اضافی هدر میدهد. با این روش، او توانست حدود ۵۳۷,۰۰۰ دامنه را در حافظه فلش ذخیره کند.
فرآیند ساخت پایگاه داده
- دانلود لیستهای بلوکی عمومی
- حذف ورودیهای تکراری و توضیحات
- هش کردن هر دامنه به یک مقدار ۴۰ بیتی
- مرتبسازی لیست هش شده
- نوشتن پایگاه داده نهایی در حافظه فلش ESP32
هنگامی که یک درخواست DNS میرسد، دستگاه نام میزبان را هش میکند و یک جستجوی دودویی در جدول هش مرتبشده انجام میدهد. اگر تطبیقی پیدا شود، درخواست مسدود میشود؛ در غیر این صورت به سرور بالادستی ارسال میشود.
عملکرد چشمگیر با منابع محدود
به گفته ZedAxis، سیستمعامل نهایی تنها حدود ۵۰ کیلوبایت از رم ۴۰۰ کیلوبایتی برد را مصرف میکند و پاسخ به درخواستهای مسدود شده حدود ۱۰ میلیثانیه طول میکشد. این یک دستاورد بزرگ برای یک میکروکنترلر ۵ دلاری است.
مصالحه جالب: OTA در مقابل ظرفیت ذخیرهسازی
طراحی ESP32 به طور پیشفرض فضای کافی برای دو نسخه از سیستمعامل (برای بهروزرسانی OTA) رزرو میکند. اگر از بهروزرسانی بیسیم صرف نظر کنید، میتوانید از آن فضا برای ذخیرهسازی لیست بلوکی استفاده کنید. با فعال بودن OTA، حداکثر ۲۵۰,۰۰۰ دامنه قابل ذخیره است، اما با غیرفعال کردن آن، این عدد به ۵۳۷,۰۰۰ میرسد.
جایگزینی ارزان برای Pi-hole
البته این پروژه جایگزین کامل یک Pi-hole یا AdGuard Home نیست. داشبورد آن بسیار ابتدایی است و آمار دقیق یا تاریخچه جستجو ارائه نمیدهد. اما به عنوان یک بیمهنامه کوچک و پشتیبان برای زمانی که سرور اصلی در حال بهروزرسانی است، ایدهآل است.
این پروژه نشان میدهد که با کمی خلاقیت، حتی سختافزارهای بسیار ارزان نیز میتوانند کارهای بزرگ انجام دهند. برای مشاهده جزئیات بیشتر و کدهای پروژه میتوانید به گیتهاب ZedAxis مراجعه کنید.





