oxidecomputer / oxidecomputer/omicron

dns server does not behave well with DNS size limits

Open
#6,342 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
572
Forks
97
Avg merge
2d 12h
Merged PRs (30d)
96

Description

This issue is deliberately a little vague, but what I mean is:

  • The DNS server appears to happily send DNS responses that are larger than 512 bytes. I'm not sure if this is actually wrong or not but it seems to break hickory-dns. This appeared to be a cause of the problems in #5912 that have been rather painful to debug.
  • I don't see any code in the DNS server for supporting EDNS.
  • I don't see any code in the DNS server for supporting TCP.

More research needed to confirm but I think we should probably have the DNS server:

  • truncate non-EDNS, UDP messages at 512 bytes (and set the "truncated" bit)
  • support EDNS for larger response sizes
  • support TCP for larger response sizes

I gather there's some max size negotiation that can happen, at least with EDNS (not sure about non-EDNS), and we should presumably honor that.

Once we've done that, we may want to configure our clients to always use EDNS or TCP instead of always trying without those and then retrying when they see the truncated response.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the DNS response-size problem associated with #5912 and investigate the DNS server behavior described here, including hickory-dns compatibility. Confirm the applicable size negotiation rules, then define completion as correct 512-byte truncation for non-EDNS UDP responses, EDNS support for larger responses, and TCP support for larger responses.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
networking
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.