"view" Behavior Seems Inconsistent With Documentation

Wouter Wijngaards wouter at nlnetlabs.nl
Thu Aug 30 09:08:38 UTC 2018


Hi Jeff,

On 08/25/2018 11:53 PM, Jeff Kletsky via Unbound-users wrote:
> I've read through both the unbound.conf(5) man page and
> unbound.conf.sample for unbound Version 1.7.0 many times and am finding
> it hard to understand the logic behind how a specific query is resolved
> against a view and global data alone, not to mention my eventual desire
> to include stub/forwarded zones into the mix. Most of what an Internet
> search on views in unbound discusses Python-driven approaches, not the
> more recent, native implementation.

It seems what you found it a problem in the code, where this feature
check is simply missing.  I added such a check, so that zones that are
transparent have their queries check for content defined outside of
views with view-first is enabled.  This makes your test cases work.
Thanks for the report.  It should work with zones that are transparent,
typetransparent, always-transparent and type inform.

Best regards, Wouter

> 
> 
> First, are there any other resources on how the logic among the various
> sources (view local data, view stub/forwarders, global stub/forwarders,
> global local data, external authoritative DNS) for getting an "answer"
> is intended to work?
> 
> Functional specs, design docs, or a pointer to the code would be
> generally helpful.
> 
> 
> In the minimal test case that returns unexpected results, the goal is
> that there is "public" data that all subnets care resolve, a "private"
> name that all subnets should get the same value for (gld.example.com),
> and another name that a specific subnet should get a different answer
> that the other subnets, overriding the "public" value (maps.example.com).
> 
> (This can be tested by substituting example.com for an appropriate
> domain that supports the "maps" host name.)
> 
> As I understand the view-first directive it is "use the view's local
> data first, if not present, then check as if the request was made at the
> global level". I would expect this to check the global local data.
> 
>        *view-first:* /<yes/ /or/ /no>/
>               If  enabled,  it  attempts  to  use  the  global  local-zone and
>               local-data if there is no match in the  view  specific  options.
>               The default is no.
> 
> Goals:
> 
> * most-anything.example.com resolved by public example.com DNS
> * gld.example.com resolved by "global, local" data in unbound (local
> host names with no public DNS)
> * maps.example.com resolved by
>     * global, local data for many subnets
>     * view-specific data for some other subnets
> 
> However, when I configure
> 
> local-zone: "example.com." typetransparent
> 
> local-data: "gld.example.com.    A    10.0.0.1"
> local-data: "maps.example.com.    A    10.0.0.2"
> 
> access-control-view: 192.168.0.0/24    "classC"
> 
> view:
>     name: "classC"
>     view-first: yes
>     local-zone: "example.com." typetransparent
>     local-data: "maps.example.com.    A    192.168.0.2"
> 
> 
> If I query from an address *not* on the 192.168.0.0/24 subnet, the
> results are as expected:
> 
> www.example.com    (resolved by example.com's DNS)
> gld.example.com    10.0.0.1
> maps.example.com   10.0.0.2
> 
> 
> If I query from an address in the 198.168.0.0/24 subnet ("in" the view),
> it looks like the global data isn't consulted for gld.example.com
> 
> www.example.com    (resolved by example.com's DNS)
> gld.example.com    NXDOMAIN from example.com's DNS (expected 10.0.0.1
> from "global" data)
> maps.example.com   192.168.0.2 (as expected from the view)
> 
> 
> Changing to view-first: no (or omitting it completely) does not change
> the behavior.
> 
> Changing the view's local-zone to static (thinking that the view might
> have tried external resolution before deferring to the global zone
> definition) ends up with an NXDOMAIN result for all but maps.example.com
> from the unbound instance (no authority section)..
> 
> view:
>     name: "classC"
>     view-first: yes
>     local-zone: "example.com." static
>     local-data: "maps.example.com.    A    192.168.0.2"
> 
> 
> www.example.com    NXDOMAIN (expected to be resolved by example.com's DNS)
> gld.example.com    NXDOMAIN (expected 10.0.0.1 from "global" data)
> maps.example.com   192.168.0.2 (as expected from the view)
> 
> 
> (Yes, this simple, two-name configuration could be replicated in the
> view, but the target operational configuration involves many more zones,
> names and views.)
> 
> What am I missing in my thinking, in my configuration?
> 
> TIA,
> 
> Jeff
> 
> 
> FreeBSD 11.1-RELEASE-p13 #9
> 
> Version 1.7.0
> linked libs: libevent 2.1.8-stable (it uses kqueue), OpenSSL
> 1.0.2k-freebsd  26 Jan 2017
> linked modules: dns64 respip validator iterator
> 
> 
> 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.nlnetlabs.nl/pipermail/unbound-users/attachments/20180830/cba4ee25/attachment.bin>


More information about the Unbound-users mailing list