A simple, go-based DNS resolver/caching server
Go to file
kenshin 9ddf8a8939 finally. fix hosts query 2013-07-26 18:54:19 +08:00
README.MD finally. fix hosts query 2013-07-26 18:54:19 +08:00
cache.go cache add expire strategy 2013-07-25 00:09:07 +08:00
godns.conf finally. fix hosts query 2013-07-26 18:54:19 +08:00
godns_test.go add benchmark test 2013-07-25 12:32:57 +08:00
handler.go finally. fix hosts query 2013-07-26 18:54:19 +08:00
hosts.go finally. fix hosts query 2013-07-26 18:54:19 +08:00
main.go add benchmark test 2013-07-25 12:32:57 +08:00
resolver.go finally. fix hosts query 2013-07-26 18:54:19 +08:00
server.go first commit 2013-07-23 19:10:38 +08:00
settings.go finally. fix hosts query 2013-07-26 18:54:19 +08:00

README.MD

GODNS

A simple and fast dns cache server written by go.

Similar as dnsmasq ,but support some difference features:

  • Keep hosts records in redis instead of the local file /etc/hosts

  • Atuo-Reload when hosts configuration changed. (Yes,dnsmasq need restart)

  • Cache records save in memory or redis configurable

Install & Running

  1. Install

     $ go get github.com/kenshinx/godns
    
  2. Build

     $ cd $GOPATH/src/github.com/kenshinx/godns 
     $ go build -o godns *.go
    
  3. Running

     $ sudo ./godns -c godns.conf
    
  4. Use

     $ sudo vi /etc/resolv.conf
     nameserver 127.0.0.1
    

Configuration

All the configuration on godns.conf a TOML formating config file.
More about Toml :https://github.com/mojombo/toml

resolv.conf

Upstream server can be configuration by change file from somewhere other that "/etc/resolv.conf"

[resolv]
resolv-file = "/etc/resolv.conf"

If multi namerserver set at resolv.conf, the upsteam server will try in order of up to botton

hosts

Force resolv domain to assigned ip, support two types hosts configuration: locale file and remote redis

#hosts file#
can be

cache

Only the local memory storage backend implemented now. The redis backend is in todo list

[cache]
backend = "memory"   
expire = 600  # default expire time 10 minutes
maxcount = 100000

Benchmak

$ go test -bench=.

testing: warning: no tests to run
PASS
BenchmarkDig-4	    5000	    435141 ns/op
ok  	_/Users/kenshin/workspace/godns	2.270s

The result : 2200 queries/per second

The enviroment of test:

MacBook Air

  • CPU:
    Inter Core i5 1.7G
    Double cores

  • MEM:
    8G

TODO

  • The redis cache backend
  • Update ttl