dns-server

Crates.iodns-server
lib.rsdns-server
version0.2.4
sourcesrc
created_at2022-04-26 06:27:25.361923
updated_at2024-09-30 06:43:28.206586
descriptionA threaded DNS server.
homepage
repositoryhttps://gitlab.com/leonhard-llc/ops
max_upload_size
id575145
size80,743
Michael Leonhard (mleonhard)

documentation

README

dns-server

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

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. 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

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();
std::thread::spawn(move || {
    Signals::new([SIGHUP, SIGINT, SIGQUIT, SIGTERM])
        .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.4
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      🔒  ├── oorandom 11.1.3
0/0        0/0          0/0    0/0     0/0      🔒  └── permit 0.2.1

0/0        0/0          0/0    0/0     0/0    

Changelog

  • v0.2.4 - Depend on permit v0.2
  • v0.2.3 - Remove a dependency
  • v0.2.2 - Support case randomization.
  • 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

Commit count: 242

cargo fmt