LDplayer: DNS Trace Player

LDplayer is a configurable, general-purpose DNS trace replay and modification system that enables DNS experiments at scale in several dimensions: many zones, numerous levels of DNS hierarchy, large query rates, and diverse query sources.

It can emulate DNS hierarchy efficiently using minimal commodity hardware in a lab environment.

We describe and evaluate LDplayer in the following paper: [1]

  • Liang Zhu and John Heidemann 2018. LDplayer: DNS Experimentation at Scale. Proceedings of the ACM Internet Measurement Conference (Boston, Massachusetts, USA, Oct. 2018), to appear. [DOI] [PDF] [Code] Details

Components

LDplayer consists of a number of components.

dns-replay-client

dns-replay-client replays DNS queries against a real DNS server with correct timing. Optionally it can log the latency for each query, or the timing for each query and response. Multiple instances of dns-replay-client can work coordinately to replay large query stream with dns-replay-controller.

dns-replay-controller

Distribute DNS query stream and to queriers (dns-replay-client).

dns-query-mutator

Change DNS queries in a network trace file and generate binary input for dns-replay-{controller,client}.

dns-replay-proxy

dns-replay-proxy manipulates packet addresses to emulate DNS hierarchy in LDplayer. Specifically, dns-replay-proxy reads packets from the given tunnel interface, rewrites the source and destination addresses, recomputes the check-sum and sends out the modified packets.

dns-route-setup

A set of scripts that set up port-based routing and dns-replay-proxy for replaying queries against a recursive server in LDplayer.

dns-zone-constructor

A set of scripts that generate zone files in order to replay queries against a recursive server in LDplayer.

General Steps to run LDplayer

  1. use dns-zone-constructor to build zones when needed

    There are two types of trace replay:

    • replaying queries to a recursive server
    • replaying queries to an authoritative server

    For replaying queries to a recursive server, you need dns-zone-constructor to build zone files and generate DNS server configurations in order to emulate DNS hierarchy in LDplayer.

    For replaying queries to an authoritative server, you need to get the zone files of the authoritative server from the operators.

  2. setup and run experimental DNS servers

    For replaying queries to a recursive server:

    • setup routing, see dns-route-setup
    • run dns-replay-proxy
    • run a split-horizon authoritative server with the zone files and configuration generated in step 1.
    • run an experimental recursive server

    For replaying queries to an authoritative server,

    • run an experimental authoritative server with given zone files from DNS operators. (dns-route-setup and dns-replay-proxy and not needed)
  3. convert input trace to binary format (optional but recommended)

    It is recommended to use binary input files when the input query rate is high, in order to achieve the actual query rate.

    For more details about converting input format, see dns-query-mutator.

  4. run dns-replay-controller (optional but recommended)

    It is recommended to run multiple query clients (dns-replay-client) in parallel to achieve large query rate. dns-replay-controller is required to distribute input data to dns-replay-client.

  5. run dns-replay-client

A sample script for setup 4 and 5 is here.