diff --git a/src/dht.cpp b/src/dht.cpp
index b7e455e2cfeac689bc5e5676660a3fe71b1bc6b8..74c563b2c6867ec11d392dfe1eb4856a896772f0 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -43,6 +43,7 @@ constexpr duration Dht::LISTEN_EXPIRE_TIME;
 constexpr duration Dht::LISTEN_EXPIRE_TIME_PUBLIC;
 constexpr duration Dht::REANNOUNCE_MARGIN;
 static constexpr size_t MAX_REQUESTS_PER_SEC {8 * 1024};
+static constexpr duration BOOTSTRAP_PERIOD_MAX {std::chrono::hours(24)};
 
 NodeStatus
 Dht::updateStatus(sa_family_t af)
@@ -2058,7 +2059,7 @@ Dht::bootstrap()
     if (bootstrapJob)
         bootstrapJob->cancel();
     bootstrapJob = scheduler.add(scheduler.time() + bootstrap_period, std::bind(&Dht::bootstrap, this));
-    bootstrap_period *= 2;
+    bootstrap_period = std::min(bootstrap_period * 2, BOOTSTRAP_PERIOD_MAX);
 }
 
 void