diff --git a/include/connectionmanager.h b/include/connectionmanager.h
index 5a97280abb6c09954e683c8c9c3bde61a99fcb06..086981f6825487729a44d03c46e546d375cff1a4 100644
--- a/include/connectionmanager.h
+++ b/include/connectionmanager.h
@@ -321,6 +321,8 @@ struct ConnectionManager::Config
      */
     bool getUPnPActive() const;
 
+    /** Optional pseudo random generator to be used, allowing to control the seed. */
+    std::unique_ptr<std::mt19937_64> rng;
 };
 
 } // namespace dhtnet
\ No newline at end of file
diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp
index 87704a8d702dae42e953ddf4e686c00ab1f45249..2e0e99b451453e5a931f703c4c0ced018c6c7975 100644
--- a/src/connectionmanager.cpp
+++ b/src/connectionmanager.cpp
@@ -381,7 +381,7 @@ class ConnectionManager::Impl : public std::enable_shared_from_this<ConnectionMa
 public:
     explicit Impl(std::shared_ptr<ConnectionManager::Config> config_)
         : config_ {std::move(createConfig(config_))}
-        , rand_ {dht::crypto::getSeededRandomEngine<std::mt19937_64>()}
+        , rand_ {config_->rng ? *config_->rng : dht::crypto::getSeededRandomEngine<std::mt19937_64>()}
     {
         loadTreatedMessages();
         if(!config_->ioContext) {