diff --git a/community/gdnsd/APKBUILD b/community/gdnsd/APKBUILD
index ced9ae20186feb7ada88d5082e7c0f72cc8f4913..95d5d3ba8ca4e21b7bb378e40d34220dc39f1b3e 100644
--- a/community/gdnsd/APKBUILD
+++ b/community/gdnsd/APKBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Timo Teräs <timo.teras@iki.fi>
 pkgname=gdnsd
 pkgver=3.8.2
-pkgrel=0
+pkgrel=1
 pkgdesc="Geographic Authoritative DNS server"
 url="https://github.com/gdnsd/gdnsd/"
 arch="all"
@@ -32,6 +32,7 @@ install="$pkgname.pre-install"
 subpackages="$pkgname-doc $pkgname-openrc"
 source="https://github.com/gdnsd/gdnsd/releases/download/v$pkgver/gdnsd-$pkgver.tar.xz
 	gdnsd.initd
+	net-dns-1.46.patch
 	"
 
 # secfixes:
@@ -66,4 +67,5 @@ package() {
 sha512sums="
 982d81cf3b4b20c0bbe640b3bd75697aaea08636c89077729def1c053f5cc3515854a46e1f5009367bfcb2671fa6a394152bde68307a92f3ce748a0badefa8d2  gdnsd-3.8.2.tar.xz
 7e66f9d3dab3a36334d47740f12ee7f3ffd363d416bd1fcca4b339db8ba858419555751786247ffc4e5faf68c6b5fa87b84c04ffa25133a17b186bdf83c365b9  gdnsd.initd
+4667b641eb3519fceb3884f25ae6dfff12f5b8dd0d3b55dad00d6a62394e797767520b493e78f57ee1fe8c5b8a53822594e197a35485e2de6bd2d78a7058964a  net-dns-1.46.patch
 "
diff --git a/community/gdnsd/net-dns-1.46.patch b/community/gdnsd/net-dns-1.46.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0054f29ffff29115bdd277ffc4cbea85d5ba0bef
--- /dev/null
+++ b/community/gdnsd/net-dns-1.46.patch
@@ -0,0 +1,67 @@
+From 1e91a5aa67ef2da1bbaedafd7d1a91855f4b2993 Mon Sep 17 00:00:00 2001
+From: Faidon Liambotis <paravoid@debian.org>
+Date: Wed, 11 Sep 2024 13:05:46 +0300
+Subject: [PATCH 1/2] tests: fix query ID-related Net::DNS 1.46 breakage
+
+Net::DNS 1.46, commit r1980 stopped generating random query IDs when
+->header->id() is called, instead generating them and storing them
+internally when the query is encoded. As such, calling ->header->id()
+may now return undef.
+
+Workaround this issue by calling ->encode right before retrieving the
+(potentially random) query ID.
+
+Identified by Natanael Copa.
+---
+ t/_GDT.pm | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/t/_GDT.pm b/t/_GDT.pm
+index ca94c039..ddde67e9 100644
+--- a/t/_GDT.pm
++++ b/t/_GDT.pm
+@@ -1056,6 +1056,7 @@ sub query_server {
+         );
+         send($sock, $qpacket_raw, 0);
+         if($expected) {
++            $query->encode;  # generate a random ID, required with Net::DNS >= 1.46
+             $expected->header->id($query->header->id);
+             my $res_raw;
+             recv($sock, $res_raw, 4096, 0);
+@@ -1075,6 +1076,7 @@ sub query_server {
+         }
+ 
+         if($expected) {
++            $query->encode;  # generate a random ID, required with Net::DNS >= 1.46
+             $expected->header->id($query->header->id);
+             $size = _GDT->compare_packets($res->send($query), $expected, $limit_v4, $limit_v6, $wrr_v4, $wrr_v6);
+         }
+
+From d10b7960f4f46ab48d9719aeea4019e6a24e18e7 Mon Sep 17 00:00:00 2001
+From: Faidon Liambotis <paravoid@debian.org>
+Date: Wed, 11 Sep 2024 13:13:39 +0300
+Subject: [PATCH 2/2] tests: fix UDP packet size-related Net::DNS 1.46 breakage
+
+Net::DNS 1.46, commit r1982 stopped setting the EDNS UDP packet size
+based on the resolver opts udppacketsize attribute. Do so manually.
+
+Use ->size() rather than ->udpsize() to retain < 1.37 compatibility with
+the trade-off of spurious deprecated warnings emitted with >= 1.37.
+---
+ t/_GDT.pm | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/t/_GDT.pm b/t/_GDT.pm
+index ddde67e9..f9c2f2f6 100644
+--- a/t/_GDT.pm
++++ b/t/_GDT.pm
+@@ -1075,6 +1075,9 @@ sub query_server {
+             $res->$k($ro->{$k})
+         }
+ 
++        # Net::DNS <= 1.45 (r1982) did this internally
++        $query->edns->size($ro->{udppacketsize}) if defined $ro->{udppacketsize};
++
+         if($expected) {
+             $query->encode;  # generate a random ID, required with Net::DNS >= 1.46
+             $expected->header->id($query->header->id);