Portal is a DNS implementation written in pure Rust. It provides multiple crates and binaries to work with the DNS protocol. The protocol implementation is located in these crates:
crates/client
: A sequential and multiplexed DNS client implementationcrates/common
: A collection of common data types and utility functions used in other cratescrates/proto
: The base protocol implementationcrates/resolver
: Forwarding and recursive resolver implementationscrates/server
: A DNS server implementation
Additionally, there are various ready-to-use binaries based on the above crates:
bins/pgun
: A fast terminal-based DNS query toolbins/portald
: A DNS server with recursive resolving, caching, and DNS blocking*
* Currently, the caching and DNS blocking is not fully implemented yet.
- Move Config code to portal-bin
- Make handlers more flexible (Generic)
- Implement a DNS multiplexer to better handle requests, responses, and transaction ids
- Split zone file loading into Lexer and Parser
- Add READMEs to crates and bins