diff --git a/substrate/client/cli/src/params/network_params.rs b/substrate/client/cli/src/params/network_params.rs
index 209742f54e9b8c573f10e2f94e27f7b8ba696ecb..a973d61272ced7c47c65121f50e6c18054cc3416 100644
--- a/substrate/client/cli/src/params/network_params.rs
+++ b/substrate/client/cli/src/params/network_params.rs
@@ -21,7 +21,7 @@ use sc_network::{
 	config::{NetworkConfiguration, NodeKeyConfig, NonReservedPeerMode, TransportConfig},
 	multiaddr::Protocol,
 };
-use sc_service::{ChainSpec, config::{Multiaddr, MultiaddrWithPeerId}};
+use sc_service::{ChainSpec, ChainType, config::{Multiaddr, MultiaddrWithPeerId}};
 use std::path::PathBuf;
 use structopt::StructOpt;
 
@@ -94,7 +94,8 @@ pub struct NetworkParams {
 
 	/// Enable peer discovery on local networks.
 	///
-	/// By default this option is true for `--dev` and false otherwise.
+	/// By default this option is `true` for `--dev` or when the chain type is `Local`/`Development`
+	/// and false otherwise.
 	#[structopt(long)]
 	pub discover_local: bool,
 
@@ -139,6 +140,13 @@ impl NetworkParams {
 		let mut boot_nodes = chain_spec.boot_nodes().to_vec();
 		boot_nodes.extend(self.bootnodes.clone());
 
+		let chain_type = chain_spec.chain_type();
+		// Activate if the user explicitly requested local discovery, `--dev` is given or the
+		// chain type is `Local`/`Development`
+		let allow_non_globals_in_dht = self.discover_local
+			|| is_dev
+			|| matches!(chain_type, ChainType::Local | ChainType::Development);
+
 		NetworkConfiguration {
 			boot_nodes,
 			net_config_path,
@@ -163,7 +171,7 @@ impl NetworkParams {
 				wasm_external_transport: None,
 			},
 			max_parallel_downloads: self.max_parallel_downloads,
-			allow_non_globals_in_dht: self.discover_local || is_dev,
+			allow_non_globals_in_dht,
 			kademlia_disjoint_query_paths: self.kademlia_disjoint_query_paths,
 		}
 	}