base for dns manager

This commit is contained in:
2025-10-10 01:04:32 +02:00
commit adab0517ac
9 changed files with 2144 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
[package]
name = "dns-comunications"
version = "0.1.0"
edition = "2024"
[dependencies]
dns-update = "0.1"
base64 = "*"

View File

@@ -0,0 +1,73 @@
use std::net::Ipv4Addr;
use std::str::FromStr;
use dns_update::{DnsRecord, DnsRecordType, DnsUpdater, TsigAlgorithm};
use base64::engine::general_purpose::STANDARD;
use base64::Engine;
pub struct DnsManager {
pub dns_updater: DnsUpdater,
pub zone: String
}
impl DnsManager {
pub fn new(conection_str: String, key_name: String, key: String, zone: String) -> Self {
Self {
dns_updater: DnsUpdater::new_rfc2136_tsig(
conection_str,
key_name,
STANDARD.decode(key).unwrap(),
TsigAlgorithm::HmacSha256.into()
).unwrap(),
zone
}
}
pub async fn add_domain(&self, domain_name: &String, domain_ip: Ipv4Addr) {
let domain = format!("{}.{}", domain_name, self.zone);
self.dns_updater.create(
domain,
DnsRecord::A { content: domain_ip },
300,
self.zone.clone()
).await.unwrap();
}
pub async fn del_domain(&self, domain_name: &String) {
let domain = format!("{}.{}", domain_name, self.zone);
self.dns_updater.delete(domain, self.zone.clone(), DnsRecordType::A).await.unwrap();
}
}
pub async fn add_domain(key_name: &String, key: &String, domain_name: &String, domain_ip: Ipv4Addr) {
// Create a new RFC2136 client
let client = DnsUpdater::new_rfc2136_tsig(
"tcp://10.0.0.1:53",
key_name,
STANDARD.decode(key).unwrap(),
TsigAlgorithm::HmacSha256.into()
).unwrap();
// Create a new TXT record
client.create(
"test000.minecraft.rochegmr.com",
DnsRecord::A { content: Ipv4Addr::from_str("1.1.1.1").unwrap() },
300,
"minecraft.rochegmr.com",
)
.await
.unwrap();
}
pub async fn del_domain(key_name: &String, key: &String, domain_name: &String) {
// Create a new RFC2136 client
let client = DnsUpdater::new_rfc2136_tsig(
"tcp://10.0.0.1:53",
key_name,
STANDARD.decode(key).unwrap(),
TsigAlgorithm::HmacSha256.into()
).unwrap();
// Delete the record
client.delete("test000.minecraft.rochegmr.com", "minecraft.rochegmr.com", DnsRecordType::A).await.unwrap();
}