}
 #endif /* NOD_ENABLED */
 
+static bool answerIsNOData(uint16_t requestedType, int rcode, const std::vector<DNSRecord>& records);
+
 int followCNAMERecords(vector<DNSRecord>& ret, const QType qtype, int rcode)
 {
   vector<DNSRecord> resolved;
 
   rcode = directResolve(target, qtype, QClass::IN, resolved, t_pdl);
 
+  if (g_dns64Prefix && qtype == QType::AAAA && answerIsNOData(qtype, rcode, resolved)) {
+    rcode = getFakeAAAARecords(target, *g_dns64Prefix, resolved);
+  }
+
   for (DNSRecord& rr : resolved) {
-    ret.push_back(std::move(rr));
+    if (rr.d_place == DNSResourceRecord::ANSWER) {
+      ret.push_back(std::move(rr));
+    }
   }
   return rcode;
 }