@@ -85,37 +85,45 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
85
85
metricQueryTotal .Inc ()
86
86
87
87
// Check for known record from local storage
88
- records , err := state .GetState ().LookupRecords (
89
- []string {dns .Type (r .Question [0 ].Qtype ).String ()},
90
- strings .TrimSuffix (r .Question [0 ].Name , "." ),
91
- )
92
- if err != nil {
93
- slog .Error (
94
- fmt .Sprintf ("failed to lookup records in state: %s" , err ),
88
+ lookupRecordTypes := []uint16 {r .Question [0 ].Qtype }
89
+ switch r .Question [0 ].Qtype {
90
+ case dns .TypeA , dns .TypeAAAA :
91
+ // If the query is for A/AAAA, also try looking up matching CNAME records
92
+ lookupRecordTypes = append (lookupRecordTypes , dns .TypeCNAME )
93
+ }
94
+ for _ , lookupRecordType := range lookupRecordTypes {
95
+ records , err := state .GetState ().LookupRecords (
96
+ []string {dns .Type (lookupRecordType ).String ()},
97
+ strings .TrimSuffix (r .Question [0 ].Name , "." ),
95
98
)
96
- return
97
- }
98
- if records != nil {
99
- // Assemble response
100
- m .SetReply (r )
101
- for _ , tmpRecord := range records {
102
- tmpRR , err := stateRecordToDnsRR (tmpRecord )
103
- if err != nil {
99
+ if err != nil {
100
+ slog .Error (
101
+ fmt .Sprintf ("failed to lookup records in state: %s" , err ),
102
+ )
103
+ return
104
+ }
105
+ if records != nil {
106
+ // Assemble response
107
+ m .SetReply (r )
108
+ for _ , tmpRecord := range records {
109
+ tmpRR , err := stateRecordToDnsRR (tmpRecord )
110
+ if err != nil {
111
+ slog .Error (
112
+ fmt .Sprintf ("failed to convert state record to dns.RR: %s" , err ),
113
+ )
114
+ return
115
+ }
116
+ m .Answer = append (m .Answer , tmpRR )
117
+ }
118
+ // Send response
119
+ if err := w .WriteMsg (m ); err != nil {
104
120
slog .Error (
105
- fmt .Sprintf ("failed to convert state record to dns.RR : %s" , err ),
121
+ fmt .Sprintf ("failed to write response : %s" , err ),
106
122
)
107
- return
108
123
}
109
- m .Answer = append (m .Answer , tmpRR )
110
- }
111
- // Send response
112
- if err := w .WriteMsg (m ); err != nil {
113
- slog .Error (
114
- fmt .Sprintf ("failed to write response: %s" , err ),
115
- )
124
+ // We found our answer, to return from handler
125
+ return
116
126
}
117
- // We found our answer, to return from handler
118
- return
119
127
}
120
128
121
129
// Check for any NS records for parent domains from local storage
0 commit comments