optimization: only handle A and AAAA records and .lan and .internal only

This commit is contained in:
juancwu 2026-01-02 13:45:15 -05:00
commit e4bf55d8bc

20
main.go
View file

@ -39,8 +39,6 @@ type PageData struct {
Upstreams []Upstream Upstreams []Upstream
} }
func initDB(dbPath string) *sql.DB { func initDB(dbPath string) *sql.DB {
db, err := sql.Open("sqlite3", dbPath) db, err := sql.Open("sqlite3", dbPath)
if err != nil { if err != nil {
@ -72,11 +70,15 @@ func (resolver *DNSResolver) handleDNSRequest(w dns.ResponseWriter, r *dns.Msg)
switch r.Opcode { switch r.Opcode {
case dns.OpcodeQuery: case dns.OpcodeQuery:
for _, q := range m.Question { for _, q := range m.Question {
isLanOrInternal := strings.HasSuffix(q.Name, ".lan.") || strings.HasSuffix(q.Name, ".internal.")
isARecord := q.Qtype == dns.TypeA
isAaaaRecord := q.Qtype == dns.TypeAAAA
if (isARecord || isAaaaRecord) && isLanOrInternal {
var qTypeString string var qTypeString string
switch q.Qtype { if isARecord {
case dns.TypeA:
qTypeString = "A" qTypeString = "A"
case dns.TypeAAAA: } else {
qTypeString = "AAAA" qTypeString = "AAAA"
} }
@ -87,21 +89,23 @@ func (resolver *DNSResolver) handleDNSRequest(w dns.ResponseWriter, r *dns.Msg)
if err == nil { if err == nil {
m.Answer = append(m.Answer, rr) m.Answer = append(m.Answer, rr)
} }
} else { continue
}
}
// Fallback to upstream for all other cases
resp, err := resolver.resolveUpstream(r) resp, err := resolver.resolveUpstream(r)
if err == nil && resp != nil { if err == nil && resp != nil {
log.Printf("[UPSTREAM] Forwarded %s", q.Name) log.Printf("[UPSTREAM] Forwarded %s", q.Name)
m.Answer = resp.Answer m.Answer = resp.Answer
m.Ns = resp.Ns m.Ns = resp.Ns
m.Extra = resp.Extra m.Extra = resp.Extra
m.Rcode = resp.Rcode
} else { } else {
log.Printf("[ERROR] Could not resolve %s", q.Name) log.Printf("[ERROR] Could not resolve %s", q.Name)
m.Rcode = dns.RcodeServerFailure m.Rcode = dns.RcodeServerFailure
} }
} }
} }
}
w.WriteMsg(m) w.WriteMsg(m)
} }