I went down the same rabbit hole …
Starting from this great article:
just* change registrator to use the -internal flag to populate the internal ports+IPs instead.
This gives you application routing driven by service name tags purely inside your overlay network.
I agree full dns would be nice, not everything is a web service. Couldn’t you just run a stripped down dnsmasq driven by consul-template getting the data from registrator ?
* after you patch go_dockerclient + registrator to support the new network settings json in docker 1.9 https://github.com/jonuwz