[Pdns-dev] lua script to synthesize AAAA record from A record

Muntasir Rahman muntasir.rahman at gmail.com
Fri May 4 14:55:03 CEST 2012


Hello Peter,
Thanks for the clue. I have tried it. But, it return an error message like
this: PANIC: unprotected error in call to Lua API.

I download the source, with lua hook to nodata function from here:
http://svn.powerdns.com/snapshots/pdns-recursor-3.3-hooks.tar.bz2

i compile & run it using these steps:
$ LUA=1 ./configure
$ LUA=1 make
./pdns_recursor --local-address=0.0.0.0 --local-port=5300 --daemon=no
--socket-dir=./ --lua-dns-script=dns64.lua

Here is the lua script (copy-paste from
http://wiki.powerdns.com/trac/browser/trunk/pdns/pdns/powerdns-example-script.lua
):

function nodata (remoteip, domain, qtype, records)
    print("nodata : ", remoteip, domain, qtype, records)
    if qtype ~= pdns.AAAA then return -1,{} end
    setvariable()
    return "getFakeAAAARecords", domain, "0:0:0:0:0:ffff:0:0"
end

At a terminal, i launch this command:
dig @127.0.0.1 -p 5300 www.kame.com AAAA

Aand i got this error message at recursor's terminal:
PANIC: unprotected error in call to Lua API (attempt to index a nil value)

Would you like to give me a hint on what is wrong with the script?

Regards,
Muntasir

On Fri, May 4, 2012 at 5:42 PM, Peter van Dijk <peter.van.dijk at netherlabs.nl
> wrote:

> Hello Muntasir,
>
> On May 4, 2012, at 6:47 , Muntasir Rahman wrote:
>
> > function nodata ( remoteip, domain, qtype, records )
> >     print ("nodata called for: ", remoteip, getlocaladdress(), domain,
> qtype)
> >     if qtype ~= pdns.AAAA then return -1, {} end  --  only AAAA records
> >     setvariable()
> >     return "getFakeAAAARecords", domain, "fe80::21b:77ff:0:0" -- here i
> need to return ::ffff:ipv4.dotted.decimal.format
> > end
> >
> > I would like to do something like this
> >
> >     ipv4 = "1.2.3.4" -- how do i get this data from recursor ???
> >     ipv6 = "::ffff:" .. ipv4  -- synthesized representation of IPv4 in
> IPv6
> >     return "getFakeAAARecords", domain, ipv6
> >
> > My question is:
> > - how do i get IPv4 data using lua API in above script examples?
>
> You don't. getFakeAAAARecords handles this. Just returning
> "getFakeAAAARecords", domain, "0:0:0:0:0:ffff:0:0" should work.
>
> (You can't say "::ffff" or "::ffff:" - the first would cause the v4
> address to just overwrite those bits and the last would be a parse error).
>
> Kind regards,
> --
> Peter van Dijk
> Netherlabs Computer Consulting BV - http://www.netherlabs.nl/
>
> _______________________________________________
> Pdns-dev mailing list
> Pdns-dev at mailman.powerdns.com
> http://mailman.powerdns.com/mailman/listinfo/pdns-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.powerdns.com/pipermail/pdns-dev/attachments/20120504/92e88159/attachment-0001.htm>
-------------- next part --------------
function postresolve (remoteip, domain, qtype, records, origrcode)
	print("post-resolve: ", domain, qtype)
	return origrcode, records
end

function preresolve (remoteip, domain, qtype)
	print("pre-resolve: ", domain, qtype)
	return -1, {}
end

function nodata (remoteip, domain, qtype, records)
	print("nodata : ", remoteip, domain, qtype, records)
	if qtype ~= pdns.AAAA then return -1,{} end
	setvariable()
	return "getFakeAAAARecords", domain, "0:0:0:0:0:ffff:0:0"
end

function nxdomain (remoteip, domain, qtype)
	print("nxdomain: ", remoteip, domain, qtype)	
	return -1, {}
end




More information about the Pdns-dev mailing list