Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Fully-functional DNS server, both authoritative and recursive. Even Mysql/Sqlite dns record support

License

Notifications You must be signed in to change notification settings

wintbiit/NineDNS

Repository files navigation

Nine DNS

Build GitHub release (latest by date)

Nine DNS is a flexible DNS server that offers DNS resolution based on the question source.

Why NineDNS

1. ACL DNS Resolve

NineDNS aims to provide a flexible way to resolve DNS records.

You can match different question source by cidr, port, protocol, and so on.

Clients can use different dns resolve based on their network environment.

For example, you can filter clients by cidr, and resolve different dns records for them.

2. DNS Records from Remote

Moreover, NineDNS supports retrieving DNS records from remote databases such as MySQL or PostgreSQL.

It's easy to manage DNS records in a centralized way.

3. Cloud Native

NineDNS can integrate as part of cloud-native components. It supports cache sharing, load balancing, and log tracing.

Usage

Define a config:

{
  "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
  }
}

Read Record Provider for more details about providers.

And that's all! Run NineDNS with config file now:

$ ninedns -c config.json

NineDNS autoloads ninedns.json in current directory if -c is not specified.

Downloads

Download from releases page.

Name Description
ninedns-mini NineDNS binary without most providers.
ninedns NineDNS binary with mysql provider and file providers
ninedns-full NineDNS binary with all providers.

About

Fully-functional DNS server, both authoritative and recursive. Even Mysql/Sqlite dns record support

Topics

Resources

License

Stars

Watchers

Forks

Packages