1 个不稳定版本
0.1.0 | 2022 年 8 月 22 日 |
---|
#6 在 #soa
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