## page was renamed from 201405DevSummit/DNS
== FreeBSD Developer Summit: Roadmap for DNS Library and Tools ==

Wednesday May 14, 13:00-16:00

=== Overview ===

FreeBSD 10.0 now ships with DNSSEC validation enabled out of the box provided by a local unbound caching daemon.  What do we want to do for FreeBSD 11?

If you would like to participate, contact the working group chairs below and CC {{{devsummit@}}}. You will be then added to this page. Please include a list of things you want to talk about or the areas you are interested in. This helps us in planning the session and to bring people together with common interests.

It is possible to bring in people who cannot attend in person via video conference or chat tools. Notes during the session will be published later on for the whole community to see what we discussed.

=== Goals ===

In particular, we would like to cover the following topics. This is not an exhaustive list and if you feel there is something missing that you want to talk about, contact one of the session chairs and we will include your topic here. Note that the numbering of the topics does not represent an ordering or importance indication of any kind, but rather a reference to the second table with the "topic of interest" column.

=== Topics ===

Part one
09:00 - 10:30
'''Future of package building'''

|| '''#''' || '''Who''' || '''Topic Description''' ||
|| 0 || all || Introductions ||
|| 1 || ? || Status and evaluation of unbound in 10 ||
|| 1a || ? || Plans for 10.1-RELEASE ||
|| 2 || MichaelBentkofsky || getdns-api ||
|| 3 || ? || Capsicum/Casper ||
|| 4 || ? || CLI: dig, ldns-dane, ... ||
|| 5 || ? || FreeBSD 11.x ||
|| 6 || plosher || Client Subnet-ID privacy ||

Break
10:30 - 11:00

Part two
11:00-12:00
|| '''#''' || '''Who''' || '''Topic Description''' ||
|| 14 || * || Brainstorm: common complaints and wantlist ||

''Note: General presentations about work you have done that does not require further discussions should be submitted for the FreeBSD Developer Summit track at BSDCan (see the [[DevSummit/201305|general developer summit]] page).''

=== Attending ===

In order to attend you need register for the [[DevSummit|developer summit]] as well as by email for the session and be confirmed by the working group organizer.  Follow the guidelines described on the [[DevSummit/201305|main page]] or what you received by email.  For questions or if in doubt ask the session chairs.


|| '''Name''' || '''Username / Affiliation''' || '''Topics of Interest''' || '''Notes''' ||
|| MathieuArnold || mat || * || Session knitter (and BIND maintainer…) ||
|| ErwinLansing || erwin || * || Session chair ||
|| MatthewSeaman || matthew || * || ||
|| BjoernZeeb || bz || * || ||
|| BrooksDavis || brooks || * || ||
|| MikeKarels || !McAfee || * || ||
|| DavidCroal || Sentex || * || ||
|| PeterWemm || peter || * || ||
|| PeterLosher || ISC || * || ||
|| DagErlingSmørgrav || des || * || ||
|| MichaelBentkofsky || Verisign || * || ||
|| RyanSteinmetz || zi || * || ||
|| StaceySon || sson || * || ||
|| BradDavis || brd || * || ||
|| DavidDischer || || * || ||
|| JonathanAnderson || jonathan || * || ||

=== Notes ===


=== Results ===

DNS Session
-----------

Introductions

Finalize agenda -- guOttawa problems with DNSSEC, forces you to ignore signatures

plosh asked and had it confirmed that SSHFP records exist for all FreeBSD
servers and are signed via DNSSEC

DES:

State of DNS pretty much the same as just before 10.0 release, due to
DES' breavement.  Is in 10.x and head.

   - LDNS in base

   - unbound in base as local-unbound to avoid conflict with ports.
     Exists to provide local caching resolver; nothing more.  Not
     intended to provide DNS service for whole network.

     local-unbound not built with libevent, won't scale.

     wanted to be kept a bit hidden as plan is to remove it later.

   - conflicts with ports.  This caused a delay of about 9 months in
     committing.  Use of /usr/lib/private as solution.

     Control sockets are still an issue. unbound-control was not
     renamed: if you install from ports it may control the wrong
     instance.

     ilya has patch to use unix domain socket.  NL Net rejected patch
     -- would have it in contrib, or might accept it if FreeBSD used
     it.

   - PTR lookups on RFC1918 -- unbound filters those addresses.  Mixed
     reports of what config changes do or do not work.  DES would
     prefer a code change to have an option to turn off built-in
     domains

   - We're two versions behin on ldns release.  Should try and catch
     up for the next 10.x release.

   - DES has submitted patches upstream but been unable to follow up.
     More patches are in the works.  One patch to

   - Code "tastes" odd: written by good programmers, who are not
     apparently completely fluent in C.  Problems with const, static
     functions, public functions without prototypes.  Mismatched
     prototypes in different compilation units (which didn't actually
     matter...)  Code quality is not horrid, but not quite what DES
     would like.

   - Cleanup patches that have been submitted have been accepted.

   - Ilya has has bad experiences with NL Net not wanting to support
     patches and just leaving them in contrib to rot.  OTOH, if DES
     commits it in FreeBSD then NL Net might accept them.

   - It's not as daft as it sounds.  Putting it in FreeBSD means
     patches get tested by a large amount of users, which is useful
     from NL Net's pov..

   - Similar things with adding unix socket to postgresql in the past.

   - Verisign has strong relationship with NL Net: any possibility for
     outreach?  Other people have strong relations but 

   - Historic behaviour of different TCP stacks wrt unix domain
     sockets (BSD-ish just works, Solaris Sys-V was painful) Mostly a
     thing of the past.  Doesn't work on Windows...

   - SSHFP: will tell you if matching key was found in DNS, but not if
     key was DNSSEC signed.  SSH key checking trains users to type
     'YES [enter]' based on incomplete information.  SSH code for
     verifying host keys is horrendous.  They keep adding one measure
     after another, and there's no overarching vision.

   - DES has changed the default.  A signed key will be accepted without
     asking.  Seems to have been accepted without complaint.

   - Location of the root DNSSEC key different between port unbound
     and local-unbound.  drill in base won't find ports version by
     default.

   - Came up with Firefox / Chrome DNSSEC validator plugin expects to
     find the root key in the port's unnbound location.

   - Recently solved bug: localhost in /etc/resolv.conf would prevent
     unbound fetching the root anchor.  This is a soft error in
     unbound, and there's a compiled-in copy in unbound.  The port
     expects the rc-script to fetch the key.  The key file doesn't
     have to be there: unbound installs it for the convenience of
     other apps.  Should be included in the package.  Port shouldn't
     fail even if the file is unavailable.

ERWIN:

  - Command-line tools.  Erwin misses dig in base.

  - DES had a patch at one point but can't find it at the moment.

  - Bind 8.x dig easy enough to compile stand-alone but doesn't have
    the important DNSSEC bits.

  - dig-alike written as shell wrapper around drill supports all the
    same options except for the +arguments stuff.

  - PW ldns-dane wasn't imported.  This is the best tool for
    generating entries to go into DNS.  Would be good to import

  - dig replacement to be actionned by DES.  PW offers to help with
    unix domain socket patch and the like.

  - BZ: if we're adding stuff to unbound, how much are we (FreeBSD)
    willing to accept.  BZ has a DNS64 patch NL Net were reluctant to
    accept.

  - DES would commit locally, and push upstream.

  - Doesn't DNS64 contradict the point of having a DNSEC validating
    local resolver?  No -- validate lookups *before* translation on
    local machine.

  - val-permissive-mode -- allows you to ask "is this valid or not"
    PW: should be on by default, improves usability but not so
    impervious to foot-shooting.  Helps with the "Starbucks" problem.

  - DES agrees on turning it on by default.  Mustn't rewrite peoples'
    existing unbound.conf.  We might have an included file we feel
    free to modify.

  - Can we do it ports style?  Replace the file if unmodified from default?
    Only if default version laying about.

  - Do we know what !RedHat are going to do by default?

  - Should we have config questions about this in sysinstall?

  - PW Turning permissive mode on is really snatching defeat from the
    jaws of victory.

  - OS X tool: unbound-trigger (?) checks to see if DNSSEC validation
    is possible and prompts user accordingly.  Really of relevance to
    laptop uses (PC-BSD mostly, as they can do the ask user thing)?

  - Maybe 3rd option for defaults: on; off; on-if-it-works -- do smoke
    test on startup.

  - Can you get a NTP association with on-if-it-works mode is on?

  - Easy to attack by black-hat forcing initial failure.

  - Big red flashing light for users saying "This network is broken"
    would be desirable.

  - Broken internally at Google and Yahoo (Google has go. domain
    internally for URL shortening.)

  - Add a hook to the resolv-conf script to test any new DNS Servers
    each time it gets run?  Should we have a foo.freebsd.org target
    specifically for checking validity?  DoS-ing against that could
    DoS all FreeBSD machines that happen to be restarting at the
    time...

  - Issue with machines always phoning home on startup -- not good for
    the more paranoid amongst us.

  - Validation check will only interact with the usual resolving
    DNSes.

  - Many OSes 'phone home' by looking up stuff in the DNS.  ISC wanted
    to do a similar thing to find old bind versions, but ran into the
    same political problems.

  - DES has too much on plate.  PW/plosh/erwin/zi to deal.  Should be
    doable in time for 10.1.  brooks: can we get this into head very
    soon?  Needs testing before our usual late import to stable.

   ----- coffee break ---- 
  
  - Action for gjb -- knob in bsdinstall to disable unbound 

plosher:

  - asked to bring topic up by his management.

   ----- coffee break, take 2 -----

   ** T-shirts! **

plosher

  - senior systems architect at ISC.  Runs F-root: 55 sites all
    running FreeBSD.  Write bind, dhcp

  - Recent changes to ISC and bind.  Management change last October:
    definitely for the better.  2 year bumpy period.  Painful changes
    -- bind 10 has been dropped.  Will be transitioned to public Git
    repo.  DHCP component will be the next-gen DHCP for ISC.  Will be
    continuing with bind-9.

  - 9.10 was just released: internalized geodns support (used by
    FreeBSD.org).  Plans in place for 9.11.  Anything missing in BIND:
    plosh will be here all week and happy to answer questions.

  - Stub resolver in libc: who manages it?  Draft ietf spec for
    clientID support.  Helps clients to connect to the nearest akami
    (etc) server.  DNS Cookies -- ISC position is to lobby OS vendors
    to provide an opt-out.  This is a layer of anonymisation that is
    going away: should be control over any addition information
    releases.

  - draft-edns0-client-subnet

  - This should be part of a future policy.

  - Local unbound won't do this.

Michael

  - getDNS API

  - was asked to talk about this last night, but hasn't done anywork
    on it himself.  Colleagues have.

  - replacement for getaddrinfo.  Allows your stub resolver to get
    validation information right down at the client level.

  - is in ports

  - Requires libxml, ldns, unbound to compile

  - Turns out doing validation is non-trivial.  Just about everything
    that exposes validation status to users is a wrapper around
    libunbound.  Wasn't meant to be that way.

  - Separation of policy and mechanism.  "Secure do-what-I-mean"
    function.

  - Application programmers shouldn't be worrying about this: should
    be a system policy.  "Casper: open me a /thing/, please" should be
    about the limit of it.

  - Providing a higher level API should be within the purview of the OS.

  - App should not drive the validation mechanism.  Should be able to
    ask for mechanism after the fact.

  - alternate APIs for validation.  At least 2^H8.  What is still in
    the standards process? libval ?

  - we don't currently use what's in libc -- we bypass through
    nsswitch stack.  OpenSSH does direct DNS call for somethings,
    nsswitch for others.  Causes problems when different routes
    generate different results.

  - Only two Host -> IP lookup mechanisms in popular use: /etc/hosts
    and DNS.  (NIS is gone, and most people don't put this stuff in
    LDAP).  Should rip this stuff out of nsswitch ?

  - is there anything more than /etc/hosts and DNS that we need?

  - passing validation info through nsswitch is going to be a lot of
    work

  - Competing alternatives to getDNS? libval?

  - BZ: ideally want to get to point where app says 'get me the socket to
    the hostname' and all the DNS etc. is hidden.  Agnostic about the
    precise mechanism.

  - libval is nice and simple; getDNS is more complex -- handles
    multithreading etc.

  - don't want arbitrary resolver code linked to your application if
    it is at all sensitive.  Need socket interface (to casper) 

  - JA: Does the application need to decide things or the system?
    Both.  either layer is a good place to impose additional
    restrictions on what will be accepted.

  - Like an init replacement.  "I want to talk to this service"
    shouldn't matter if local or on network

  - Start to think about caching again.  If casper is handling all the
    lookups, it's relatively simple.

  - Many steps to validate connection.  Factor into high level service.

  - Docco on getDNS looks nicer than libval.  Look and feel of getDNS
    API is different.  libval very much like what we had before.

  - We need a new API in base, and what we adopt will have some
    influence on the rest of the world.  Do we care about ease of
    conversion of exist apps.

  - What will linux do? And what will they do the following week?

  - "Show me your work" -- don't need another language to describe how
    to validate a lookup, just decide whether you approve of what was
    done.

  - mostly NL Net behind getDNS

  - DNSSEC-tools people are behine libval

Aims for FreeBSD 11.0-Release:

  - Need wider conversation about do we want to shoot nsswitch in the
    head (or at least the bits related to host resolution)

  - JA: "I think that sounds great"

  - Hostname resolution will have a single path through the stack. (PW)

  - NSS cache module currently gets rid of all the validation info.
    Why keep 50k of /stuff/ on the off chance that it will need to be
    revalidated.

  - Survey applications to work out what API capabilities they need.

  - Does casper need to do this, or can it run through unbound behind
    the scenes.

  - capsicumize unbound ?

  - can we push patches upstream to unbound ?

  - Think of casper as a rendezvouz service.  Doesn't necessarily
    eliminate the need to have an unbound service.

----
CategoryHistorical