Compare commits
2 Commits
7d0e8e4b0d
...
85db27cdde
| Author | SHA1 | Date | |
|---|---|---|---|
| 85db27cdde | |||
| 8fdb5ac3dd |
32
README.md
Normal file
32
README.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Cool dns
|
||||||
|
|
||||||
|
A simple dns server written in Go. It supports zonefile parsing, different zones based on IP and forwarding.
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
Example config file
|
||||||
|
```yaml
|
||||||
|
zones:
|
||||||
|
- zone: example.com. # Fully qualified domain name of the zone
|
||||||
|
file: zonefile.txt # Path to the zonefile to parse
|
||||||
|
|
||||||
|
- zone: example.com.
|
||||||
|
file: zonefile2.txt
|
||||||
|
acl: # What IPs can query the zone
|
||||||
|
- lan
|
||||||
|
|
||||||
|
acl: # List of ip filter rules
|
||||||
|
- name: vpn # Name of the rule
|
||||||
|
cidr: 10.0.0.0/24 # CIDR of the rule
|
||||||
|
- name: lan
|
||||||
|
cidr: 192.168.0.0/16
|
||||||
|
- name: local
|
||||||
|
cidr: 127.0.0.1/32
|
||||||
|
|
||||||
|
forward:
|
||||||
|
acl: # What IPs are allowed
|
||||||
|
- vpn
|
||||||
|
server: "8.8.8.8:53" # DNS server to forward to
|
||||||
|
|
||||||
|
address: 0.0.0.0:8053 # What address and port to listen on
|
||||||
|
```
|
||||||
@@ -19,3 +19,5 @@ forward:
|
|||||||
acl:
|
acl:
|
||||||
- vpn
|
- vpn
|
||||||
server: "8.8.8.8:53"
|
server: "8.8.8.8:53"
|
||||||
|
|
||||||
|
address: 0.0.0.0:8053
|
||||||
11
coolDns.go
11
coolDns.go
@@ -6,7 +6,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
@@ -27,6 +26,7 @@ type config struct {
|
|||||||
Zones []configZone `yaml:"zones"`
|
Zones []configZone `yaml:"zones"`
|
||||||
ACL []configACL `yaml:"acl"`
|
ACL []configACL `yaml:"acl"`
|
||||||
Forward configForward `yaml:"forward"`
|
Forward configForward `yaml:"forward"`
|
||||||
|
Address string `yaml:"address"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type configForward struct {
|
type configForward struct {
|
||||||
@@ -211,15 +211,15 @@ func createServer(zones zoneMap, config config, aclList map[string]*net.IPNet) *
|
|||||||
return srv
|
return srv
|
||||||
}
|
}
|
||||||
|
|
||||||
func listenAndServer(server *dns.ServeMux) {
|
func listenAndServer(server *dns.ServeMux, address string) {
|
||||||
go func() {
|
go func() {
|
||||||
if err := dns.ListenAndServe(":"+strconv.Itoa(8053), "udp", server); err != nil {
|
if err := dns.ListenAndServe(address, "udp", server); err != nil {
|
||||||
log.Fatalf("Failed to set udp listener %s\n", err.Error())
|
log.Fatalf("Failed to set udp listener %s\n", err.Error())
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
if err := dns.ListenAndServe(":"+strconv.Itoa(8053), "tcp", server); err != nil {
|
if err := dns.ListenAndServe(address, "tcp", server); err != nil {
|
||||||
log.Fatalf("Failed to set tcp listener %s\n", err.Error())
|
log.Fatalf("Failed to set tcp listener %s\n", err.Error())
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@@ -341,5 +341,6 @@ func main() {
|
|||||||
|
|
||||||
server := createServer(zones, *config, aclList)
|
server := createServer(zones, *config, aclList)
|
||||||
|
|
||||||
listenAndServer(server)
|
log.Printf("Start listening on udp %s and tcp %s\n", config.Address, config.Address)
|
||||||
|
listenAndServer(server, config.Address)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user