dns-server
========
[](https://crates.io/crates/dns-server)
[](https://gitlab.com/leonhard-llc/ops/-/raw/main/dns-server/LICENSE)
[](https://github.com/rust-secure-code/safety-dance/)
[](https://gitlab.com/leonhard-llc/ops/-/pipelines)
A threaded DNS server library.
# Use Cases
- Make your API server its own DNS server.
This eliminates the DNS server as a separate point of failure.
- Keep your DNS config in code, next to your server code.
Include it in code reviews and integration tests.
- DNS-based
[domain validation for free ACME certificates](https://letsencrypt.org/how-it-works/).
This is useful for servers that don't listen on port 80.
Servers on port 80 can use HTTP for domain validation and don't need to use this.
# Features
- Depends only on `std`
- `forbid(unsafe_code)`
- ?% test coverage
# Limitations
- Brand new.
# Example
```rust
use dns_server::DnsRecord;
use permit::Permit;
use signal_hook::consts::{SIGHUP, SIGINT, SIGQUIT, SIGTERM};
use signal_hook::iterator::Signals;
let top_permit = Permit::new();
let permit = top_permit.new_sub();
.unwrap()
.forever()
.next();
drop(top_permit);
});
let records = vec![
DnsRecord::new_a("aaa.example.com", "10.0.0.1").unwrap(),
DnsRecord::new_aaaa("aaa.example.com", "2606:2800:220:1:248:1893:25c8:1946").unwrap(),
DnsRecord::new_cname("bbb.example.com", "ccc.example.com").unwrap(),
];
dns_server::Builder::new_port(8053)
.unwrap()
.with_permit(permit)
.serve_static(&records)
.unwrap();
```
# Related Crates
# Cargo Geiger Safety Report
```
Metric output format: x/y
x = unsafe code used by the build
y = total unsafe code found in the crate
Symbols:
🔒 = No `unsafe` usage found, declares #![forbid(unsafe_code)]
❓ = No `unsafe` usage found, missing #![forbid(unsafe_code)]
☢️ = `unsafe` usage found
Functions Expressions Impls Traits Methods Dependency
0/0 0/0 0/0 0/0 0/0 🔒 dns-server 0.2.1
0/0 0/0 0/0 0/0 0/0 🔒 ├── prob-rate-limiter 0.1.1
0/0 0/0 0/0 0/0 0/0 🔒 │ └── oorandom 11.1.3
0/0 0/0 0/0 0/0 0/0 🔒 ├── fixed-buffer 0.3.1
0/0 0/0 0/0 0/0 0/0 🔒 ├── multimap 0.8.3
0/0 5/5 0/0 0/0 0/0 ☢️ │ └── serde 1.0.193
0/0 0/0 0/0 0/0 0/0 ❓ │ └── serde_derive 1.0.193
0/0 0/15 0/0 0/0 0/3 ❓ │ ├── proc-macro2 1.0.71
0/0 0/4 0/0 0/0 0/0 ❓ │ │ └── unicode-ident 1.0.12
0/0 0/0 0/0 0/0 0/0 ❓ │ ├── quote 1.0.33
0/0 0/15 0/0 0/0 0/3 ❓ │ │ └── proc-macro2 1.0.71
0/0 0/79 0/3 0/0 0/2 ❓ │ └── syn 2.0.42
0/0 0/15 0/0 0/0 0/3 ❓ │ ├── proc-macro2 1.0.71
0/0 0/0 0/0 0/0 0/0 ❓ │ ├── quote 1.0.33
0/0 0/4 0/0 0/0 0/0 ❓ │ └── unicode-ident 1.0.12
0/0 0/0 0/0 0/0 0/0 🔒 ├── oorandom 11.1.3
0/0 0/0 0/0 0/0 0/0 🔒 └── permit 0.1.5
0/0 5/103 0/3 0/0 0/5
```
# Changelog
- v0.2.1
- New API supporting dynamic responses.
- Randomize order of static responses.
- v0.1.0 - Initial version
# To Do
- Message compression
- Decide whether to send back error responses.
- Ergonomic constructors that take `OsStr`, for using environment variables
- Custom TTLs
- NS records (and glue)
- Client
- Caching client
- Recursive resolver
# Alternatives
License: Apache-2.0