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