oxidecomputer / oxidecomputer/opte

Need to handle internal DNS resolutions through the control plane

Open
#319 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
77
Forks
11
Avg merge
9d 20h
Merged PRs (30d)
8

Description

We need to handle requests for resolving internal DNS names from guests. We have an internal DNS server in the control plane (though not clear if / when that's populated with records for guests). We need to

  • Intercept DNS packets from the guest (UDP port 53, over either IPv4 / IPv6)
  • Look it up in DNS. There are a bunch of choices here:
    • Directly look it up in the DNS server, which is probably high-latency, but maybe least work
    • Have a separate process / thread that's either syncing DNS records from the DNS server or getting updates from it, and query that local cache
    • Something else? One big issue here is that OPTE is currently generally designed to return the response to a packet immediately, not at a later time. E.g., for DHCPv6 Solicit requests, we just look up the data for that guest in its VpcCfg, and build a Reply with the right options. If we need a high-latency query to service the request, that (currently) needs to just be a blocking call. I have no idea how that plays with kernel threads, or if we need to include machinery to run that in a task and get "await" its response.
  • Inject the response back in the layer-processing code via a Hairpin action.

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 with RFD 0021 and the OPTE layer-processing code that handles guest packets, including the existing VpcCfg-based DHCPv6 response path. Determine how internal DNS records should be obtained and how a delayed lookup fits the current immediate-response model; done means handling guest UDP port 53 over IPv4 and IPv6 and injecting the response with a Hairpin action.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.