Nine DNS 是一个灵活的 DNS 服务器,可根据问题来源提供 DNS 解析。
NineDNS
旨在提供一种灵活的方式来解析 DNS 记录。
您可以通过cidr、端口、协议等来匹配不同的问题源。
客户端可以根据自己的网络环境使用不同的dns解析。
例如,您可以按 cidr 过滤客户端,并为它们解析不同的 dns 记录。
此外,NineDNS 支持从远程数据库(例如 MySQL 或 PostgreSQL)检索 DNS 记录。
集中管理 DNS 记录很容易。
NineDNS
可以集成为云原生组件的一部分。它支持缓存共享、负载均衡和日志跟踪。
我们创建NineDNS
原因是为了提供一种灵活的方式来根据问题来源解析 DNS 记录。
例如,您可以通过cidr、端口、协议等来匹配不同的问题源。
客户端可以根据自己的网络环境使用不同的dns解析。
您的服务器部署了内联网,并通过跳转服务器或隧道公开了服务器端口。
当客户端在内网时,您希望将服务器域解析为内网IP;当客户端在外网时,您希望将服务器域解析为公网IP。
这是NineDNS
的典型用例。您只需将您的域名NS
到NineDNS
服务器,并配置NineDNS
根据客户端的网络环境解析域名,例如cidr。
作为一个功能齐全的DNS服务器, NineDNS
支持从MySQL、文件、lark等远程数据库中检索DNS记录。
就像任何 Cloud DNS 提供商一样,您可以以集中方式轻松管理 DNS 记录。
定义一个配置:
{
"addr" : " :53 " , // listen address
"debug" : true , // debug mode
"domains" : { // dns resolve domain key-value pairs. domain <===> resolve config
"example.com" : {
"authoritative" : true , // authoritative mode
"recursion" : false , // recursion mode
"upstream" : " 223.5.5.5:53 " , // upstream dns server, only works in recursion mode
"ttl" : 600 , // default ttl, attention: ttl is server level, not record level. server re-fetch record source ttl
"providers" : { // record source providers. Read [Record Provider](#record-provider) for more details
"mysql" : " root:123456@tcp(localhost:3306)/dns " ,
"sqlite" : " dns.db "
},
"rules" : { // dns resolve match rules. name <===> rule. Name is also used as table name in mysql record source
"all" : {
"cidrs" : [ // cidr match
" 0.0.0.0/0 "
],
"ports" : [
" 1-65535 " // port match
]
}
}
}
},
"redis" : { // redis config
"addr" : " localhost:6379 " ,
"db" : 8
}
}
当出现 dns 问题时,
NineDNS
会查找定义的规则,该规则既匹配域名又匹配规则。然后在规则中定义的记录源中查找记录。
有关providers
更多详细信息,请阅读记录提供者。
仅此而已!现在使用配置文件运行NineDNS
:
$ ninedns -c config.json
如果未指定
-c
,NineDNS
会自动加载当前目录中的ninedns.json
。
从发布页面下载。
姓名 | 描述 |
---|---|
ninedns-mini | NineDNS 二进制文件,没有大多数提供商。 |
ninedns | NineDNS 二进制文件,带有 mysql 提供程序和文件提供程序 |
ninedns-full | NineDNS 与所有提供商的二进制文件。 |
特别感谢miekg优雅且精心设计的go dns库miekg/dns