HostDB and DNS project

what is the situation?

  • DNS and HostDB module have some small problmes:
    1. TS-598: when using IP address in target OS map, the DNS lookup looks awful
    2. TS-592: request for support of IPV6 AAAA host name resolve
    3. TS-404: API to set IP address of origin server avoiding DNS lookup
  • DNS and HostDB require for enhancement:
    1. SplitDNS need to get cleanup, we need to keep SplitDNS under DNS only, not mess up with hostdb.
    2. DNS codes a little mess, should get more localization, regarding for the old libresolv like codes
    3. way to passthrough HostDB cache
    4. easy way to setup Origin Source server IP, maybe something like Hosts.
    5. need to get a way for DNS and(or) HostDB pluginable, can hooking somewhere.
    6. need prepare for health check design, get HostDB ready.
  • Job done:
    1. TS-597: DNS does not honor proxy.config.dns.nameservers, and make 127.0.0.1 the first default server.
    2. TS-313: DNS and resolvers improvements
    3. TS-435: SplitDNS doesn't work
    4. TS-492: Allow use of client supplied IP address for origin server. --PATCH on wccp branch
    5. TS-570: SplitDNS schedules on wrong thread when "dns_threads > 0"
    6. TS-580: server fail assert when dns request does not match any rule from splitdns.config

what is our target:

HostDB is currently a fundamental under proxy/http2, it is really need to get clean and clear, we want to keep it clean in logical.
we will treat DNS module a little complex, it may have many Handler under one or more Processor:

  • default DNS resolver Handler
  • SplitDNS resolver Handler
  • hosts resolver Handler
  • and any other in require.
    when we get a clean start, we can forward to make a healthy check for Origin Source servers, maybe based in HostDB structure, that is another project then.

we are doing now, and planning:

  1. clean up 127.0.0.1, we should not fail back to 127.0.0.1, that will just make user confuse.
  2. clean up or remove domain/search setting for SplitDNS
  3. make dns more flex:
    • need to get a way for DNS and(or) HostDB pluginable, can hooking somewhere. (TS-404 at least)
  4. cleanup old codes, catchup with Glibc and other DNS resolver system in function.
  • things we have not plan to do:
    • way to passthrough HostDB cache --that is possible setting "CONFIG proxy.config.hostdb INT 0" in records.config
  • things we have pull back a little:
    • cleanup SplitDNS: keep SplitDNS under DNS only, not mess up with codes in HostDB. inprogress, patch upload
    • easy way to setup Origin Source server IP, maybe something like Hosts.

Questions and confusing:

SplitDNS cleanup:
  • Why should we care of the domain/search on SplitDNS server? when you setup an SplitDNS, you should know that the map is for strict map, not for wild map, right? so we should remove all these dumping configs/codes.
  • When we put SplitDNS handler all handled by DNSprocesser, we sure should kill the default SplitDNS config, as if all strict map in SplitDNS fails, it must go on with the standard DNS resolver. But when you have a SplitDNS config, and you can not resolve the hostname from the dns server provide by SplitDNS, you should not do fail over to any other dns server.
  • What is the hell of 127.0.0.1 in the resolver code? 127.0.0.1 will show up, only when you do not specify any dns server by records.config, nor /etc/resolv.conf, not SplitDNS, nor others. at that time, we should rise up a Fatal message too, or should we just refuse to work?
  • if we put all hostname<->nsserver mapping codes in DNS module, there maybe something strange when the current codes put these maps in HostDB too.
  • when we have a internal async resolver, why should we link against libresolv.so? case 1: do proxy name ip lookup?

Comments from our users and friends:

  • Leif, our PL:
    • We would remove all DNS code, and make it correct, on top of C-ares/dns.c, and do appropriate things like letting the resolver code properly get notified on epoll events (not like that crap we have now)
    • we should be able to using thread setting in proxy.config.dns.dedicated_thread, make loadbalance on those threads
  • here is the comments from Martin, our TS-435 reporter:
    • Strict map it's ok In reverse mode, but in forward mode the use of wild card it will be useful to use local country or specific DNS server
      example: dest_domain=lapampa.gov.ar named=x.x.x.y serach_list=lapampa.gov.ar
      dest_domain=*.com.ar named=x.x.x.x
    • Why TS must have two DNS handler? I know only one handler is more complex, however why not use SplitDNS with a default mandatory entry like dest_domain=default named=x.x.x.x
    • I am agree with you, if can not resolve the hostname from the dns server provide by SplitDNS, TS must return error to user, and not fail over other dns resolver.
    • I am agree that TS must refuse to work if none DNS is configured. situation
  • Vijay, from Yahoo:
    • you should think about separating HostDB from DNS, so that people might just want to use only DNS
    • hostdb will also be used to store 1.1 etc... and how many times we failed to connect to host, but i am thinking about some cleanup where we should have less dependency on hostdb
  • No labels