Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/stalwartlabs/dns-update

Dynamic DNS update library for Rust
https://github.com/stalwartlabs/dns-update

dns dynamic rfc2136 update

Last synced: about 2 months ago
JSON representation

Dynamic DNS update library for Rust

Awesome Lists containing this project

README

        

# dns-update

[![crates.io](https://img.shields.io/crates/v/dns-update)](https://crates.io/crates/dns-update)
[![build](https://github.com/stalwartlabs/dns-update/actions/workflows/rust.yml/badge.svg)](https://github.com/stalwartlabs/dns-update/actions/workflows/rust.yml)
[![docs.rs](https://img.shields.io/docsrs/dns-update)](https://docs.rs/dns-update)
[![crates.io](https://img.shields.io/crates/l/dns-update)](http://www.apache.org/licenses/LICENSE-2.0)

_dns-update_ is an **Dynamic DNS update library** for Rust that supports updating DNS records using the [RFC 2136](https://datatracker.ietf.org/doc/html/rfc2136) protocol
and different cloud provider APIs such as [Cloudflare](https://www.cloudflare.com/). It was designed to be simple and easy to use, while providing a high level of flexibility
and performance.

## Limitations

- Currently the library is `async` only.
- Besides RFC 2136, it only supports Cloudflare's API.

## PRs Welcome

PRs to add more providers are welcome. The goal is to support as many providers as Go's [lego](https://go-acme.github.io/lego/dns/) library.

## Usage Example

Using RFC2136 with TSIG:

```rust
// Create a new RFC2136 client
let client = Rfc2136Provider::new_tsig("tcp://127.0.0.1:53", "", STANDARD.decode("").unwrap(), TsigAlgorithm::HmacSha512).unwrap();

// Create a new TXT record
c.create(
"test._domainkey.example.org",
DnsRecord::TXT {
content: "v=DKIM1; k=rsa; h=sha256; p=test".to_string(),
},
300,
"example.org",
)
.await
.unwrap();

// Delete the record
c.delete("test._domainkey.example.org", "example.org").await.unwrap();
```

Using Cloudflare's API:

```rust
// Create a new Cloudflare client
let client =
DnsUpdater::new_cloudflare("", None::)
.unwrap();

// Create a new TXT record
c.create(
"test._domainkey.example.org",
DnsRecord::TXT {
content: "v=DKIM1; k=rsa; h=sha256; p=test".to_string(),
},
300,
"example.org",
)
.await
.unwrap();

// Delete the record
c.delete("test._domainkey.example.org", "example.org").await.unwrap();
```

## License

Licensed under either of

* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

## Copyright

Copyright (C) 2020-2024, Stalwart Labs Ltd.