base for dns manager
This commit is contained in:
8
dns-comunications/Cargo.toml
Normal file
8
dns-comunications/Cargo.toml
Normal file
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "dns-comunications"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
dns-update = "0.1"
|
||||
base64 = "*"
|
||||
73
dns-comunications/src/lib.rs
Normal file
73
dns-comunications/src/lib.rs
Normal 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();
|
||||
}
|
||||
Reference in New Issue
Block a user