-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Overview This issue is about adding support for DNS-over-QUIC (DoQ) in the dnscore library. The goal is to enable users to perform DNS queries over QUIC using dnscore's transport and high-level APIs. In turn, this feature will be exposed to the rbmk dig tool, allowing users to perform DNS-over-QUIC queries from the command line.
Open to contributors! I currently do not have time myself to work on this issue right now, so, please, let me know if you would like to take on this task. I am willing to provide feedback, guidance, and support to land this new feature.
Proposed Activities I believe we should proceed as follows:
- write a brief summary of how DoQ works and sketch out how it could be integrated into
dnscore - pick up the proper library for QUIC in Go (most likely this would be https://github.com/quic-go/quic-go)
- sketch out initial implementation in
dnscoreand expose it using the./internal/cmd/transport/command, such that we can test the new code with existing DoQ servers - check whether we need to update the design documents (https://github.com/rbmk-project/rbmk-project.github.io/tree/main/docs/design)
- update the
rbmkcommand to support DoQ - add support for structured logging to the initial implementation and see whether we need to update the spec (https://github.com/rbmk-project/rbmk-project.github.io/tree/main/docs/spec/data-format)
- write unit tests for the initial implementation following the same pattern already used for, e.g.,
dotls_test.go,dohttps_test.go - add support for DoQ inside the
./dnscoretestpackage
This is the general idea of how I think we should proceed, but obviously we will adapt this plan as we go, if new information and reckonings come up.
Work Style
-
We encourage incremental development through multiple PRs
- Each task above can be split into smaller, focused PRs
- Early functionality can be merged while work continues
- Example progression:
- Initial discussion over here sketching out a plan
- Basic QUIC connection handling
- DNS protocol integration
- Structured logging implementation
- Test coverage expansion
- CLI integration
-
All code changes eventually require:
- Unit tests following existing patterns (see dotls_test.go, dohttps_test.go)
- Documentation updates (both code and design docs)
- Spec updates where relevant
- Passing CI checks
- Following Go style guidelines
-
Consider using a draft PRs for early feedback and discussion
- Share initial design thoughts and research findings
- Discuss QUIC library selection and integration approach
- Get feedback on implementation direction
- Early reviews help avoid major refactoring later
-
If your code is derived work from someone else's code, reference the original source code explicitly
-
Always include a
SPDX-License-Identifier(and useGPL-3.0-or-laterfor new code)
Expected Outcomes I would say:
dnscoreincludes DoQ support- the DoQ code is fully tested
- the
dnscoretestincludes DoQ support - the
internal/cmd/transport/command includes DoQ support - we have updated all the relevant docs
- we have released a new version of
dnscoreincluding DoQ - the
rbmk digtool supports DoQ
Prerequisites I think:
- knowledge of Go and networking
- familiarity with DNS
- knowledge of https://go.dev/wiki/CodeReviewComments
Getting Started
- Comment on this issue expressing interest
- Fork the repository and set up your development environment
- Read through the dnscore design doc and the already-existing
dnscoreprotocol implementations - Create a draft PR early to discuss implementation approach
- Full development documentation is not available yet, but I will be working on this to facilitate future work
Communications The RBMK and dnscore projects are hobby projects for me, at the moment, so expect some delays in communication. I will try to be as responsive as possible, but please be patient. I am available to discuss on GitHub issues and pull requests, and I am also available via Matrix as @bassosimone:matrix.org.