This is a light weight DNS Server which serves A type record for now.
go get github.com/openmohan/lightdns
- Go 1.90
- Import the package lightdns "github.com/openmohan/lightdns"
- Create a DNS Server dns := lightdns.NewDNSServer(port_int)
- Add Zone data using the function AddZoneData
dns.AddZoneData(zone, staticRecords, lookupFunction, ZoneType)
If the records data available we can code it and Add the zone data
	var googleRecords = map[string]string{
		"mail.google.com":  "192.168.0.2",
		"paste.google.com": "192.168.0.3",
	}
	dns.AddZoneData("google.com", googleRecords, nil, lightdns.DNSForwardLookupZone)
or
If the data is not static and has to be taken from a DB or from any other sources or calculated dynamically then use lookup function. Define a lookup function in the format
func lookupFunc(domain string) (ip string, err error) ie: given a domain name string as parameter, IP string and error value has to be returned.
	func lookupFunc(string) (string, error) {
		//Do some action
		//Get data from DB
		//Process it further more
		return "192.2.2.1", nil
	}
	dns.AddZoneData("amazon.com", nil, lookupFunc, lightdns.DNSForwardLookupZone)
- Start the DNS Server by dns.StartAndServe()
package main
import (
	lightdns "github.com/openmohan/lightdns"
)
var records = map[string]string{
	"mail.amazon.com":  "192.162.1.2",
	"paste.amazon.com": "191.165.0.3",
}
func lookupFunc(string) (string, error) {
	//Do some action
	//Get data from DB
	//Process it further more
	return "192.2.2.1", nil
}
func main() {
	var googleRecords = map[string]string{
		"mail.google.com":  "192.168.0.2",
		"paste.google.com": "192.168.0.3",
	}
	var microsoftRecords = map[string]string{
		"mail.microsoft.com":  "192.168.0.78",
		"paste.microsoft.com": "192.168.0.25",
	}
	dns := lightdns.NewDNSServer(1234)
	dns.AddZoneData("google.com", googleRecords, nil, lightdns.DNSForwardLookupZone)
	dns.AddZoneData("microsoft.com", microsoftRecords, nil, lightdns.DNSForwardLookupZone)
	/* Incase if the records are not static or to be taken from DB or from any other sources
	lookupFunc method can be used.append*/
	dns.AddZoneData("amazon.com", nil, lookupFunc, lightdns.DNSForwardLookupZone)
	dns.StartAndServe()
}
- MX, AAAA, SOA and other records
- Reverse lookup zone
- Use goroutines for optimizing the speed
- Unit Test Cases
- Logging mechanism for monitoring and debugging
- Error handling
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.