diff options
| author | Xe <me@christine.website> | 2022-12-30 15:31:44 -0500 |
|---|---|---|
| committer | Xe <me@christine.website> | 2022-12-30 15:31:44 -0500 |
| commit | 45ddea9aca135f522dde57a62bf58c563f8bdf94 (patch) | |
| tree | e2ef8d07edf0a6e2b5dabc020154d342947eebf6 /cmd/dnsd | |
| parent | 6a0ed693247e268322d34fad3aa793e16071a7d2 (diff) | |
| download | x-45ddea9aca135f522dde57a62bf58c563f8bdf94.tar.xz x-45ddea9aca135f522dde57a62bf58c563f8bdf94.zip | |
remove deprecated code
Signed-off-by: Xe <me@christine.website>
Diffstat (limited to 'cmd/dnsd')
| -rw-r--r-- | cmd/dnsd/Dockerfile | 11 | ||||
| -rw-r--r-- | cmd/dnsd/README.md | 88 | ||||
| -rw-r--r-- | cmd/dnsd/dnsd.conf | 7 | ||||
| -rw-r--r-- | cmd/dnsd/dnsd.service | 12 | ||||
| -rw-r--r-- | cmd/dnsd/main.go | 169 |
5 files changed, 0 insertions, 287 deletions
diff --git a/cmd/dnsd/Dockerfile b/cmd/dnsd/Dockerfile deleted file mode 100644 index 7cd22bf..0000000 --- a/cmd/dnsd/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -ARG X_VERSION - -FROM xena/xperimental:$X_VERSION as build -FROM xena/alpine - -ENV PORT 53 -ENV FORWARD_SERVER 1.1.1.1:53 -EXPOSE 53/udp - -COPY --from=build /usr/local/bin/dnsd /usr/local/bin/dnsd -CMD /usr/local/bin/dnsd diff --git a/cmd/dnsd/README.md b/cmd/dnsd/README.md deleted file mode 100644 index cb3921c..0000000 --- a/cmd/dnsd/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# dnsd - -A custom [DNS](https://en.wikipedia.org/wiki/Domain_Name_System) server for my network. DNS zone files are dynamically downloaded on -startup and are continuously monitored for changes. When the DNS zone is changed, -the service reloads it. - -I primarily use this to give myself a limited form of piHole DNS adblocking, as -well as serving my [home network services](https://home.cetacean.club). - -This is related to my [WireGuard Site to Site VPN](https://christine.website/blog/site-to-site-wireguard-part-1-2019-04-02) -project. - -## How to Configure `dnsd` - -`dnsd` relies on [RFC 1035](https://tools.ietf.org/html/rfc1035) zone files. This -is a file that looks roughly like this: - -```rfc1035 -$TTL 60 -$ORIGIN pele. -@ IN SOA oho.pele. some@email.address. ( - 2019040601 ; serial number YYYYMMDDNN - 28800 ; Refresh - 7200 ; Retry - 864000 ; Expire - 60 ; Minimum DNS TTL - ) - IN NS oho.pele. - -oho IN A 10.55.0.1 -1.0.55.10.in-addr.arpa. IN PTR oho.pele. - -;; apps -prometheus IN CNAME oho.pele. -grafana IN CNAME oho.pele. -``` - -Put this file in a publicly available place and then set its URL as a -`-zone-file` in the command line configuration. This file will be monitored -every minute for changes (via the proxy of the ETag of the HTTP responses). - -If you need to change the DNS forwarding server, set the value of the environment -variable `FORWARD_SERVER` or the command line flag `-forward-server`. - -## Installation - -### Docker - -```console -$ export DNSD_VERSION=v1.0.3 -$ docker run --name dnsd -p 53:53/udp -dit --restart always xena/dnsd:$DNSD_VERSION \ - dnsd -zone-url https://domain.hostname.tld/path/to/your.zone \ - -zone-url https://domain.hostname.tld/path/to/adblock.zone \ - -forward-server 1.1.1.1:53 -``` - -### From Git with systemd - -```console -$ go get -u -v github.com/Xe/x/cmd/dnsd@latest -$ GOBIN=$(pwd) go install github.com/Xe/x/cmd/dnsd -$ sudo cp dnsd /usr/local/bin/dnsd -<edit dnsd.service as needed> -$ sudo cp dnsd.service /etc/systemd/system/dnsd.service -$ sudo systemctl daemon-reload -$ sudo systemctl start dnsd -$ sudo systemctl status dnsd -$ sudo systemctl enable dnsd -``` - -## Testing - -```console -$ dig @127.0.0.1 google.com -$ dig @127.0.0.1 oho.pele -``` - -## Support - -If you need help with this, please [contact](https://christine.website/contact) me. -This is fairly simplistic software. If you need anything more, I'd suggest using -[CoreDNS](https://coredns.io) or similar. - -If you like this software, please consider donating on [Patreon](https://www.patreon.com/cadey) -or [Ko-Fi](https://www.ko-fi.com/christinedodrill). I use this software daily on my personal -network to service most of my devices. - -Thanks and be well. diff --git a/cmd/dnsd/dnsd.conf b/cmd/dnsd/dnsd.conf deleted file mode 100644 index e490d13..0000000 --- a/cmd/dnsd/dnsd.conf +++ /dev/null @@ -1,7 +0,0 @@ -port 5900 -forward-server 1.1.1.1:53 - -zone-url ( - https://xena.greedo.xeserv.us/files/akua.zone - https://xena.greedo.xeserv.us/files/adblock.zone -)
\ No newline at end of file diff --git a/cmd/dnsd/dnsd.service b/cmd/dnsd/dnsd.service deleted file mode 100644 index 73add3d..0000000 --- a/cmd/dnsd/dnsd.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=dnsd - -[Service] -Environment=PORT=53 -Environment=FORWARD_SERVER=1.1.1.1:53 -ExecStart=/usr/local/bin/dnsd -zone-file https://host.domain.tld/path/to/your.zone -zone-file https://host.domain.tld/path/to/adblock.zone -Restart=always -RestartSec=1s - -[Install] -WantedBy=multi-user.target diff --git a/cmd/dnsd/main.go b/cmd/dnsd/main.go deleted file mode 100644 index c84a54b..0000000 --- a/cmd/dnsd/main.go +++ /dev/null @@ -1,169 +0,0 @@ -// Command dnsd is a simple DNS server for my network. It has O(n) lookup times. -package main - -import ( - "bufio" - "flag" - "log" - "net/http" - "os" - "os/signal" - "syscall" - "time" - - "github.com/miekg/dns" - "github.com/mmikulicic/stringlist" - "within.website/x/internal" -) - -var ( - port = flag.String("port", "53", "UDP port to listen on for DNS") - server = flag.String("forward-server", "1.1.1.1:53", "forward DNS server") - - zoneURLs = stringlist.Flag("zone-url", "DNS zonefiles to load") -) - -var ( - defaultZoneURLS = []string{ - "https://xena.greedo.xeserv.us/files/akua.zone", - "https://xena.greedo.xeserv.us/files/adblock.zone", - } -) - -func monitorURLs(urls []string) { - etags := make(map[string]string) - - t := time.NewTicker(time.Minute) - defer t.Stop() - - for { - select { - case <-t.C: - for _, urli := range urls { - resp, err := http.Get(urli) - if err != nil { - panic(err) - } - - et := resp.Header.Get("ETag") - - ot, ok := etags[urli] - if !ok { - log.Printf("stored %s:%s", urli, et) - etags[urli] = et - } - if ok && et != ot { - log.Fatalf("url %s has new etag %s and wanted old etag %s", urli, et, ot) - } - } - } - } -} - -func main() { - internal.HandleStartup() - - if len(*zoneURLs) == 0 { - *zoneURLs = defaultZoneURLS - } - - go monitorURLs(*zoneURLs) - - for _, zurl := range *zoneURLs { - log.Printf("conf: -zone-url=%s", zurl) - } - log.Printf("conf: -port=%s", *port) - log.Printf("conf: -forward-server=%s", *server) - - rrs := []dns.RR{} - ns := []dns.RR{} - - for _, zurl := range *zoneURLs { - resp, err := http.Get(zurl) - if err != nil { - panic(err) - } - - reader := bufio.NewReaderSize(resp.Body, 2048) - - var i int - zp := dns.NewZoneParser(reader, "", zurl) - for rr, ok := zp.Next(); ok; rr, ok = zp.Next() { - rrs = append(rrs, rr) - - if rr.Header().Rrtype == dns.TypeNS { - ns = append(ns, rr) - } - - i++ - } - - if zp.Err() != nil { - panic(zp.Err()) - } - - resp.Body.Close() - - log.Printf("%s: %d records", zurl, i) - } - - dns.HandleFunc(".", func(w dns.ResponseWriter, r *dns.Msg) { - m := new(dns.Msg) - m.SetReply(r) - m.Authoritative = true - - for _, q := range r.Question { - answers := []dns.RR{} - for _, rr := range rrs { - rh := rr.Header() - - if rh.Rrtype == dns.TypeCNAME && q.Name == rh.Name { - answers = append(answers, rr) - - for _, a := range resolver("127.0.0.1:"+*port, rr.(*dns.CNAME).Target, q.Qtype) { - answers = append(answers, a) - } - } - - if q.Name == rh.Name && q.Qtype == rh.Rrtype && q.Qclass == rh.Class { - answers = append(answers, rr) - } - } - if len(answers) == 0 && *server != "" { - for _, a := range resolver(*server, q.Name, q.Qtype) { - answers = append(answers, a) - } - } else { - m.Ns = ns - } - for _, a := range answers { - m.Answer = append(m.Answer, a) - } - } - w.WriteMsg(m) - }) - - go func() { - srv := &dns.Server{Addr: ":" + *port, Net: "udp"} - if err := srv.ListenAndServe(); err != nil { - log.Fatalf("Failed to set udp listener %s\n", err.Error()) - } - }() - - sig := make(chan os.Signal) - signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) - s := <-sig - log.Fatalf("Signal (%v) received, stopping\n", s) -} - -func resolver(server, fqdn string, r_type uint16) []dns.RR { - m1 := new(dns.Msg) - m1.Id = dns.Id() - m1.SetQuestion(fqdn, r_type) - - in, err := dns.Exchange(m1, server) - if err == nil { - return in.Answer - } - return []dns.RR{} -} |
