Adblocking Lua generator for the PowerDNS Recursor

Download all wanted block lists and place them as TXT in the same directory as the following script. You can find lots of them on firebog.net.

#!/bin/bash

# Output Lua script file
LUA_SCRIPT="all-domains-pdns-recursor-script.lua"

echo "return{" > "$LUA_SCRIPT"

# Download all blocklists as .txt from https://firebog.net and place then
# in the same directory

# Use awk to process all .txt files and append to LUA_SCRIPT
awk '!/^#/ && NF { 
        sub(/\r$/,"");  # Remove carriage return at the end of line
        if ($1 == "0.0.0.0" && NF > 1) 
            print "\"" $2 "\",";
        else if ($1 != "0.0.0.0") 
            print "\"" $1 "\",";
     }' *.txt >> "$LUA_SCRIPT"

echo "}" >> "$LUA_SCRIPT"

echo "Lua script written to $LUA_SCRIPT"

Move the output file to: /etc/powerdns/blocklist.lua

Create a new script /etc/powerdns/adblock.lua

function preresolve(dq)
	if(not adservers:check(dq.qname)) then
		return false
	end
	
	if(dq.qtype == pdns.A) then
		dq:addAnswer(dq.qtype, "127.0.0.1")
	elseif(dq.qtype == pdns.AAAA) then
		dq:addAnswer(dq.qtype, "::1")
	end
	return true
end

adservers:add(dofile("blocklist.lua"))

Add this to the configuration (recursor.conf):

lua-dns-script=adblock.lua

Inspired by: https://gist.github.com/ahupowerdns/bb1a043ce453a9f9eeed