The Domain Name System (DNS) is a ubiquitous part of everyday
computing, translating human-friendly machine names to numeric IP
addresses. Most DNS research has focused on server-side
infrastructure, with the assumption that the aggressive caching and
redundancy on the client side are sufficient. However, through
systematic monitoring, we find that client-side DNS failures are
widespread and frequent, degrading DNS performance and reliability.
We introduce CoDNS, a lightweight, cooperative DNS lookup service that
can be independently and incrementally deployed to augment existing
nameservers. It uses a locality and proximity-aware design to
distribute DNS requests, and achieves low-latency, low-overhead name
resolution, even in the presence of local DNS nameserver
delay/failure. Using live traffic, we show that CoDNS reduces average
lookup latency by 27-82%, greatly reduces slow lookups, and improves
DNS availability by an additional '9'. We also show that a widely-deployed
service using CoDNS gains increased capacity, higher reliability, and
faster start times.