Last active
December 7, 2023 12:34
-
-
Save mpfund/eb8d91e905279f51da9dc7251761119f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"github.com/miekg/dns" | |
) | |
func main() { | |
// Create a DNS server instance | |
server := &dns.Server{Addr: ":53", Net: "udp"} | |
// Handle DNS queries | |
dns.HandleFunc(".", func(w dns.ResponseWriter, r *dns.Msg) { | |
m := new(dns.Msg) | |
m.SetReply(r) | |
for _, q := range r.Question { | |
if q.Qtype == dns.TypeCNAME { | |
cname := "example.com." // Replace with your CNAME target | |
// Create a CNAME RR with a TTL of 3600 seconds (1 hour) | |
cnameRR := &dns.CNAME{ | |
Hdr: dns.RR_Header{ | |
Name: q.Name, | |
Rrtype: dns.TypeCNAME, | |
Class: dns.ClassINET, | |
Ttl: 3600, | |
}, | |
Target: cname, | |
} | |
// Add the CNAME RR to the answer section | |
m.Answer = append(m.Answer, cnameRR) | |
// Check if Chrome can resolve the CNAME target | |
// (You can add this part back if needed) | |
} else { | |
// Handle unspecified queries here | |
defaultIP := "192.168.1.1" // Replace with your desired default IP address | |
// Create an A or AAAA RR depending on the query type | |
if q.Qtype == dns.TypeA { | |
rr, err := dns.NewRR(fmt.Sprintf("%s IN A %s", q.Name, defaultIP)) | |
if err == nil { | |
m.Answer = append(m.Answer, rr) | |
} | |
} else if q.Qtype == dns.TypeAAAA { | |
rr, err := dns.NewRR(fmt.Sprintf("%s IN AAAA %s", q.Name, defaultIP)) | |
if err == nil { | |
m.Answer = append(m.Answer, rr) | |
} | |
} | |
} | |
} | |
if len(m.Answer) > 0 { | |
w.WriteMsg(m) | |
} else { | |
dns.HandleFailed(w, r) | |
} | |
}) | |
// Start the DNS server | |
go func() { | |
if err := server.ListenAndServe(); err != nil { | |
fmt.Printf("DNS server error: %v\n", err) | |
} | |
}() | |
fmt.Println("DNS server listening on :53 (UDP)...") | |
select {} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment