--- a/crates/trippy-dns/src/lazy_resolver.rs
+++ b/crates/trippy-dns/src/lazy_resolver.rs
@@ -98,2 +98,2 @@
-    use hickory_resolver::error::{ResolveError, ResolveErrorKind};
-    use hickory_resolver::proto::error::ProtoError;
+    use hickory_resolver::ResolveError;
+    use hickory_resolver::proto::ProtoError;
@@ -143 +143 @@
-        TrustDns(Arc<Resolver>),
+        TrustDns(Arc<(hickory_resolver::TokioResolver, tokio::runtime::Runtime)>),
@@ -186 +186 @@
-                        Resolver::new(resolver_cfg, options)
+                        Resolver::builder_with_config(resolver_cfg, Default::default()).with_options(options).build()
@@ -188 +188 @@
-                    ResolveMethod::Google => Resolver::new(ResolverConfig::google(), options),
+                    ResolveMethod::Google => Resolver::builder_with_config(ResolverConfig::google(), Default::default()).with_options(options).build(),
@@ -190 +190 @@
-                        Resolver::new(ResolverConfig::cloudflare(), options)
+                        Resolver::builder_with_config(ResolverConfig::cloudflare(), Default::default()).with_options(options).build()
@@ -193,2 +193,2 @@
-                }?;
-                let resolver = Arc::new(res);
+                };
+                let resolver = Arc::new((res, tokio::runtime::Runtime::new()?));
@@ -225 +225 @@
-                    .lookup_ip(hostname)
+                    .1.block_on(resolver.0.lookup_ip(hostname))
@@ -392 +392 @@
-            DnsProvider::TrustDns(resolver) => match resolver.reverse_lookup(addr) {
+            DnsProvider::TrustDns(resolver) => match resolver.1.block_on(resolver.0.reverse_lookup(addr)) {
@@ -412,2 +412,2 @@
-                Err(err) => match err.kind() {
-                    ResolveErrorKind::NoRecordsFound { .. } => {
+                Err(err) => match err.proto().map(ProtoError::kind) {
+                    Some(hickory_resolver::proto::ProtoErrorKind::NoRecordsFound { .. }) => {
@@ -424 +424 @@
-                    ResolveErrorKind::Timeout => CacheEntry::new(DnsEntry::Timeout(addr), now),
+                    Some(hickory_resolver::proto::ProtoErrorKind::Timeout) => CacheEntry::new(DnsEntry::Timeout(addr), now),
@@ -432 +432 @@
-    fn lookup_asinfo(resolver: &Arc<Resolver>, addr: IpAddr) -> Result<AsInfo> {
+    fn lookup_asinfo(resolver: &Arc<(hickory_resolver::TokioResolver, tokio::runtime::Runtime)>, addr: IpAddr) -> Result<AsInfo> {
@@ -451 +451 @@
-    fn query_asn_ipv4(resolver: &Arc<Resolver>, addr: Ipv4Addr) -> Result<String> {
+    fn query_asn_ipv4(resolver: &Arc<(hickory_resolver::TokioResolver, tokio::runtime::Runtime)>, addr: Ipv4Addr) -> Result<String> {
@@ -458 +458 @@
-            .lookup(name, RecordType::TXT)
+            .1.block_on(resolver.0.lookup(name, RecordType::TXT))
@@ -469 +469 @@
-    fn query_asn_ipv6(resolver: &Arc<Resolver>, addr: Ipv6Addr) -> Result<String> {
+    fn query_asn_ipv6(resolver: &Arc<(hickory_resolver::TokioResolver, tokio::runtime::Runtime)>, addr: Ipv6Addr) -> Result<String> {
@@ -480 +480 @@
-            .lookup(name, RecordType::TXT)
+            .1.block_on(resolver.0.lookup(name, RecordType::TXT))
@@ -491 +491 @@
-    fn query_asn_name(resolver: &Arc<Resolver>, asn: &str) -> Result<String> {
+    fn query_asn_name(resolver: &Arc<(hickory_resolver::TokioResolver, tokio::runtime::Runtime)>, asn: &str) -> Result<String> {
@@ -495 +495 @@
-            .lookup(name, RecordType::TXT)
+            .1.block_on(resolver.0.lookup(name, RecordType::TXT))
--- a/crates/trippy-dns/Cargo.toml
+++ b/crates/trippy-dns/Cargo.toml
@@ -21,0 +22 @@
+tokio.workspace = true
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -50 +50 @@
-hickory-resolver = "0.24.4"
+hickory-resolver = "0.25"
