diff --git a/lib/defines.h b/lib/defines.h
index ae41050d062802e0345d61feceeeb4519112a5c6..e0cf92d80e347b59ab130237d2f40cadab40efad 100644
--- a/lib/defines.h
+++ b/lib/defines.h
@@ -35,3 +35,5 @@
  */
 #define KR_DNS_PORT   53
 #define KR_DNAME_ROOT ((const knot_dname_t*)"")
+#define KR_EDNS_VERSION 0
+#define KR_EDNS_PAYLOAD 4096
diff --git a/lib/layer/iterate.c b/lib/layer/iterate.c
index 99ab3aa1a7062f64042bc61a3dc64e55a7a20caa..ddcf7c2f94bc8cd15cac4d932f738f9ae7926af5 100644
--- a/lib/layer/iterate.c
+++ b/lib/layer/iterate.c
@@ -296,6 +296,20 @@ static int prepare_query(knot_layer_t *ctx, knot_pkt_t *pkt)
 
 	cur->id = knot_random_uint16_t();
 	knot_wire_set_id(pkt->wire, cur->id);
+	
+	/* Declare EDNS0 support. */
+	knot_rrset_t opt_rr;
+	ret = knot_edns_init(&opt_rr, KR_EDNS_PAYLOAD, 0, KR_EDNS_VERSION, &pkt->mm);
+	if (ret != KNOT_EOK) {
+		return KNOT_NS_PROC_FAIL;
+	}
+
+	knot_pkt_begin(pkt, KNOT_ADDITIONAL);
+	ret = knot_pkt_put(pkt, KNOT_COMPR_HINT_NONE, &opt_rr, KNOT_PF_FREE);
+	if (ret != KNOT_EOK) {
+		knot_rrset_clear(&opt_rr, &pkt->mm);
+		return KNOT_NS_PROC_FAIL;
+	}
 
 #ifndef NDEBUG
 	char name_str[KNOT_DNAME_MAXLEN], zonecut_str[KNOT_DNAME_MAXLEN], ns_str[KNOT_DNAME_MAXLEN], type_str[16];