[dnsdist] attempting to spoof a couple records

Pieter Lexis pieter.lexis at powerdns.com
Tue Feb 16 16:06:08 UTC 2021


Hi Frank,

On 2/16/21 4:09 PM, Frank Even via dnsdist wrote:
> I've inherited an Unbound environment that has a few "local-zone"
> records configured, and am now fronting with dnsdist and need dnsdist
> to spoof those records and respond appropriately.
> 
> I've managed to make it happen for all traffic, but I can't seem to
> get any syntax right for an "AndRule" to get it to work for only
> certain source subnets.
> 
> I seem to be unable to properly decipher the documentation here.
> Below is what I'm really trying to accomplish (all IPs are made up),
> but I'm having issues getting it to work properly limited to a single
> subnet.
> 
>     access-control-view: 127.0.0.0/8 internal
>     access-control-view: 10.1.0.0/24 internal
>     access-control-view: 10.5.0.0/24 internal
> 
>     view:
>         name: "internal"
>         local-zone: "int.domain"                 typetransparent
>         local-data: "name.int.domain            IN A 10.7.7.7"
>         local-data: "name.int.domain            IN AAAA"   # <----
> (this is actually in the config, I can't seem to find any Ubound
> documentation that makes sense of that though, seems like it could be
> invalid, there are no IPv6 nets in the access-control-view lists -
> does actually appear to be invalid on testing on the inherited
> system...throws a weird error on a query).
> 
> Just for a single IP I've tried something like this to no avail:
> addAction(AndRule({"10.5.5.5/32"}, {"name.int.domain",
> SpoofAction("10.7.7.7")}))

This syntax looks indeed wrong, also, AndRule can't natively switch
between different sorts of rules. This works:

addAction(AndRule{makeRule("10.5.5.5/32"), makeRule("name.int.domain")},
SpoofAction("10.7.7.7"))

If you want to match the name exactly (the rule above matches the name
and all names under it) use:

addAction(AndRule{makeRule("10.5.5.5/32"),
QNameRule("name.int.domain")}, SpoofAction("10.7.7.7"))

However, it looks like your usecase is better served with a NetmaskGroup:

nmg = newNMG()
nmg:addMask("127.0.0.0/8")
nmg:addMask("10.1.0.0/24")
nmg:addMask("10.5.0.0/24")
addAction(AndRule{NetmaskGroupRule(nmg), QNameRule("name.int.domain")},
SpoofAction("10.7.7.7", "2001:db8::1"))

This'll lead to showRules showing this:

0           0 (Src: 10.1.0.0/24, 10.5.0.0/24, 127.0.0.0/8) &&
(qname==name.int.domain.) spoof in 10.7.7.7 2001:db8::1

Hope this helps!

Cheers,

Pieter

P.S. For spoofing v6, the syntax is SpoofAction("192.0.2.1",
"2001:db8::1") until version 1.6. In 1.6 is is SpoofAction({"192.0.2.1",
"2001:db8::1"}).

-- 
Pieter Lexis
PowerDNS.COM BV -- https://www.powerdns.com


More information about the dnsdist mailing list