Wednesday, February 18, 2015
A limitation sure, but it sneaks around its own limitations
I was reminded by Yesterday's post on DNS that I was playing around with SRV records, and oh yes, here's a few I set up some time ago:
_http._tcp              IN      SRV     1  1 8888 lucy
                        IN      SRV     2 10 8888 marvin
                        IN      SRV     2 20 8888 bunny-desktop
                        IN      SRV     2 30 8888 saltmine
So, let's see what I get when I query
_http._tcp.roswell.area51. (the “home domain” I use around
here):
  rcode = 0.000000,
  ra = true,
  aa = true,
  query = false,
  ad = false,
  rd = true,
  cd = false,
  tc = false,
  id = 1234.000000,
  question =
  {
    class = "IN",
    name = "_http._tcp.roswell.area51.",
    type = "SRV",
  },
Okay, so far, this is expected—some DNS flags, and the “question” we asked. Continuing …
  answers =
  {
    [1] =
    {
      port = 8888.000000,
      type = "SRV",
      name = "_http._tcp.roswell.area51.",
      weight = 30.000000,
      target = "saltmine.roswell.area51.",
      class = "IN",
      ttl = 86400.000000,
      priority = 2.000000,
    },
    [2] =
    {
      port = 8888.000000,
      type = "SRV",
      name = "_http._tcp.roswell.area51.",
      weight = 1.000000,
      target = "lucy.roswell.area51.",
      class = "IN",
      ttl = 86400.000000,
      priority = 1.000000,
    },
    [3] =
    {
      port = 8888.000000,
      type = "SRV",
      name = "_http._tcp.roswell.area51.",
      weight = 10.000000,
      target = "marvin.roswell.area51.",
      class = "IN",
      ttl = 86400.000000,
      priority = 2.000000,
    },
    [4] =
    {
      port = 8888.000000,
      type = "SRV",
      name = "_http._tcp.roswell.area51.",
      weight = 20.000000,
      target = "bunny-desktop.roswell.area51.",
      class = "IN",
      ttl = 86400.000000,
      priority = 2.000000,
    },
  },
Okay, these are the answers we were looking for, but wait? What's this?
  additional =
  {
    [1] =
    {
      type = "A",
      name = "lucy.roswell.area51.",
      address = "192.168.1.10",
      class = "IN",
      ttl = 86400.000000,
    },
    [2] =
    {
      type = "AAAA",
      name = "lucy.roswell.area51.",
      address = "fc00::1",
      class = "IN",
      ttl = 86400.000000,
    },
    [3] =
    {
      type = "A",
      name = "marvin.roswell.area51.",
      address = "192.168.1.13",
      class = "IN",
      ttl = 86400.000000,
    },
    [4] =
    {
      type = "AAAA",
      name = "marvin.roswell.area51.",
      address = "fc00::3",
      class = "IN",
      ttl = 86400.000000,
    },
    [5] =
    {
      type = "A",
      name = "bunny-desktop.roswell.area51.",
      address = "192.168.1.16",
      class = "IN",
      ttl = 86400.000000,
    },
    [6] =
    {
      type = "AAAA",
      name = "bunny-desktop.roswell.area51.",
      address = "fc00::2",
      class = "IN",
      ttl = 86400.000000,
    },
    [7] =
    {
      type = "A",
      name = "saltmine.roswell.area51.",
      address = "192.168.1.18",
      class = "IN",
      ttl = 86400.000000,
    },
    [8] =
    {
      type = "AAAA",
      name = "saltmine.roswell.area51.",
      address = "fc00::4",
      class = "IN",
      ttl = 86400.000000,
    },
  },
Yes, even though I run that braindead DNS implementation that only accepts single questions, it also preemptively sent back the appropriate IP addresses!
Will wonders never cease. There's probably no need for multiple DNS queries to handle SRV lookups.
 
![Glasses.  Titanium, not steel. [Self-portrait with my new glasses]](https://www.conman.org/people/spc/about/2025/0925.t.jpg)