[Dnsmasq-discuss] patch: block-file/allow-file - for review/feedback
imnozi at gmail.com
imnozi at gmail.com
Thu May 21 19:43:50 UTC 2026
On Thu, 21 May 2026 19:42:55 +0200
Ercolino de Spiacico <bellocarico at hotmail.com> wrote:
> In dnsmasq, domain filtering (for example, adblocking) currently relies
> on built-in directives such as local and address. That approach works
> well up to a point, but it does not scale: around 15 MB (≈700–800k
> domains) the process hangs regardless of available system resources.
It could be related to hardware or to the dnsmasq version.
On an x86_64 system running dnsmasq v2.90, I'm currently blocking 1.75M FQDNs (50MB blacklist* using 'local='; sourced from Univ. of Toulouse). DNsmasq's virtual size is 152MB; resident size is 147MB. I haven't experienced failures and have seen only very slightly greater resolution latency. It's been a while since I last checked, but I think this blacklist increases dnsmasq's memory requirements by around 150MB.
N
* - dnsmasq.conf (sans comments):
domain-needed
bogus-priv
conf-file=/var/smoothwall/mods/dnsbl/dnsmasq-blacklist.conf
cache-size=1024
>
> To take a different approach I developed this patch in attachment that
> adds two new directives: block-file and allow-file. Summary of the
> functionality:
>
> - Uses mmap() to load domain lists into RAM.
>
> - Multiple block-file directives are supported.
>
> - Multiple allow-file directives are supported.
>
> - Example syntax:
>
> block-file=/path/to/blockfile#NX,1
>
> NX is optional and can be replaced with any IP address to return instead
> of NX.
>
> The trailing ,1 is optional too, and enables logging when domains from
> that file are matched (useful to log only blocked domains).
>
> allow-file=/mnt/USB/blockfile-override,1
>
> - Mapped files must be pre-sorted (sorting is not included in this
> patch to keep the code minimal).
>
> - Blocking/allowing behaviour mimics dnsmasq’s current semantics. For
> example:
>
> dnsmasq config:
> local=/example.com/ (blocked)
> server=/www.example.com/ (unblocked)
>
> After the patch:
>
> example.com → listed in block-file
> www.example.com → listed in allow-file
>
> - Files are loaded one at a time and assesses against the amount of
> RAM available. If Current RAM usage + blockfile >= 80% of Total RAM, the
> loading is skipped and logged as a warning.
>
> - This code does not change DNS resolution itself; it performs a very
> fast name match to decide whether a query should proceed or be answered
> with NX or a custom IP.
>
>
> I developed this patch for FreshTomato router (dnsmasq v2.93rc1). On
> those small devices I performed a functional test loading 2.2M domains
> (55 MB blockfile) and reload the configuration without interruptions; no
> packet drops were observed during a config when reloading. This is
> already 3 time the current limit, but I haven't performed any proper
> capacity testing yet, which is expected to be much higher.
>
>
> Any comments or considerations are greatly appreciated.
> Thanks.
More information about the Dnsmasq-discuss
mailing list