diff --git a/NEWS b/NEWS
index 5962f1d3be7f9c06935338859cf516f0cb973951..b5dc884e23e4ff722384bee4b8b9c05bad90a9ac 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ Incompatible changes
 
 Improvements
 ------------
+- lower default EDNS buffer size to 1232 (#538, #300, !920)
 - net: split the EDNS buffer size into upstream and downstream (!1026)
 - lua-http doh: answer to /dns-query endpoint as well as /doh (!1069)
 - improve resiliency against UDP fragmentation attacks (disable PMTUD) (!1061)
diff --git a/lib/defines.h b/lib/defines.h
index 4e7c9291b3a499a080ace8c0819bf4b87ab8cb89..76a93cb1831d730a71c3dab55abc8ded3823f452 100644
--- a/lib/defines.h
+++ b/lib/defines.h
@@ -62,7 +62,7 @@ static inline int KR_COLD kr_error(int x) {
 #define KR_DNS_DOH_PORT 443
 #define KR_DNS_TLS_PORT 853
 #define KR_EDNS_VERSION 0
-#define KR_EDNS_PAYLOAD 4096 /* Default UDP payload (max unfragmented UDP is 1452B) */
+#define KR_EDNS_PAYLOAD 1232 /* Default UDP payload; see https://dnsflagday.net/2020/ */
 #define KR_CACHE_DEFAULT_TTL_MIN (5) /* avoid bursts of queries */
 #define KR_CACHE_DEFAULT_TTL_MAX (6 * 24 * 3600) /* 6 days, like the root NS TTL */