#dns-server #dns #records #domains #load #forward #soa

simple-dns-server

简单 DNS 服务器,便于集成

1 个不稳定版本

0.1.0 2022 年 8 月 22 日

#6#soa

MIT 许可证

18KB
196

简单 DNS

有时我需要一个简单的 DNS 服务器,它可以轻松配置(无需修改区域文件格式),并集成到 Rust 程序中以处理特定域的 DNS 查询。因此,我编写了这个简单的 DNS 服务器。它使用出色的 trust-dns 进行 DNS 服务器和 DNS 转发。服务器将自动为您创建 SOA 记录(您无需定义它们)。如果服务器在其配置中找不到匹配项,它将自动将查询转发到 Google DNS 服务器(8.8.8.8:53)。

用法

要构建一个 DNS 服务器,您只需加载配置并运行服务器。

use anyhow::Result;
use simple_dns::{Config, SimpleDns};

#[tokio::main]
async fn main() -> Result<()> {
    tracing_subscriber::fmt::init();
    let config: Config = serde_yaml::from_str(include_str!("../fixtures/config.yaml"))?;

    let server = SimpleDns::try_load(config).await?;

    // this will block. You can use tokio::spawn to run it in your program
    server.run().await?;

    Ok(())
}

配置看起来像这样

---
bind: 0.0.0.0:53
domains:
  tyr.test:
    - name: '@'
      records: [127.0.0.1]
    - name: www
      records: [127.0.0.2]
    - name: '*'
      records: ['www']
      type: CNAME
  tyr1.test:
    - name: '@'
      records: [127.0.0.1]
    - name: 'abc'
      records: [127.0.0.1]

别忘了创建一个 /etc/resolver/local 文件,并将其中的 nameserver 127.0.0.1 放入其中。如下所示

$ cat /etc/resolver/local
nameserver 127.0.0.1

一旦您的服务器启动,您可以使用 dig 来验证结果。

 dig @127.0.0.1 tyr.test

; <<>> DiG 9.10.6 <<>> @127.0.0.1 tyr.test
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27566
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;tyr.test.			IN	A

;; ANSWER SECTION:
tyr.test.		3600	IN	A	127.0.0.1

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Aug 21 23:11:01 PDT 2022
;; MSG SIZE  rcvd: 50

以下是查询的服务器输出

 RUST_LOG=info cargo run --example server
    Finished dev [unoptimized + debuginfo] target(s) in 0.07s
     Running `~/.target/debug/examples/server`
2022-08-22T06:10:59.474271Z  INFO trust_dns_server::store::forwarder::authority: loading forwarder config: .
2022-08-22T06:10:59.475073Z  INFO trust_dns_server::store::forwarder::authority: forward resolver configured: .:
2022-08-22T06:11:01.746236Z  INFO trust_dns_server::server::server_future: request:27566 src:UDP://127.0.0.1#52589 QUERY:tyr.test.:A:IN qflags:RD,AD response:NoError rr:1/0/0 rflags:RD,AA

依赖项

~22–35MB
~645K SLoC