diff --git a/apps/liteprotocoltester/liteprotocoltester.nim b/apps/liteprotocoltester/liteprotocoltester.nim index 58f6bd2e3..991e9ba78 100644 --- a/apps/liteprotocoltester/liteprotocoltester.nim +++ b/apps/liteprotocoltester/liteprotocoltester.nim @@ -96,7 +96,6 @@ when isMainModule: wakuConf.restPort = conf.restPort wakuConf.restAllowOrigin = conf.restAllowOrigin - wakuConf.dnsAddrs = true wakuConf.dnsAddrsNameServers = @[parseIpAddress("8.8.8.8"), parseIpAddress("1.1.1.1")] wakuConf.shards = @[conf.shard] diff --git a/waku/factory/builder.nim b/waku/factory/builder.nim index d1cede969..18f1535ea 100644 --- a/waku/factory/builder.nim +++ b/waku/factory/builder.nim @@ -79,6 +79,7 @@ proc withNetworkConfigurationDetails*( wssEnabled: bool = false, wakuFlags = none(CapabilitiesBitfield), dns4DomainName = none(string), + dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], ): WakuNodeBuilderResult {. deprecated: "use 'builder.withNetworkConfiguration()' instead" .} = @@ -94,6 +95,7 @@ proc withNetworkConfigurationDetails*( wssEnabled = wssEnabled, wakuFlags = wakuFlags, dns4DomainName = dns4DomainName, + dnsNameServers = dnsNameServers, ) builder.withNetworkConfiguration(netConfig) ok() @@ -166,6 +168,10 @@ proc build*(builder: WakuNodeBuilder): Result[WakuNode, string] = if builder.netConfig.isNone(): return err("network configuration is required") + let netConfig = builder.netConfig.get() + if netConfig.dnsNameServers.len == 0: + return err("DNS name servers are required for WakuNode") + if builder.record.isNone(): return err("node record is required") @@ -196,8 +202,6 @@ proc build*(builder: WakuNodeBuilder): Result[WakuNode, string] = except CatchableError: return err("failed to create switch: " & getCurrentExceptionMsg()) - let netConfig = builder.netConfig.get() - let peerManager = PeerManager.new( switch = switch, storage = builder.peerStorage.get(nil), diff --git a/waku/factory/conf_builder/dns_discovery_conf_builder.nim b/waku/factory/conf_builder/dns_discovery_conf_builder.nim index 8ac33a18f..dbb2c5fd3 100644 --- a/waku/factory/conf_builder/dns_discovery_conf_builder.nim +++ b/waku/factory/conf_builder/dns_discovery_conf_builder.nim @@ -21,9 +21,6 @@ proc withEnabled*(b: var DnsDiscoveryConfBuilder, enabled: bool) = proc withEnrTreeUrl*(b: var DnsDiscoveryConfBuilder, enrTreeUrl: string) = b.enrTreeUrl = some(enrTreeUrl) -proc withNameServers*(b: var DnsDiscoveryConfBuilder, nameServers: seq[IpAddress]) = - b.nameServers = concat(b.nameServers, nameServers) - proc build*(b: DnsDiscoveryConfBuilder): Result[Option[DnsDiscoveryConf], string] = if not b.enabled.get(false): return ok(none(DnsDiscoveryConf)) diff --git a/waku/factory/conf_builder/waku_conf_builder.nim b/waku/factory/conf_builder/waku_conf_builder.nim index ab53a965f..f1f0ba471 100644 --- a/waku/factory/conf_builder/waku_conf_builder.nim +++ b/waku/factory/conf_builder/waku_conf_builder.nim @@ -107,7 +107,6 @@ type WakuConfBuilder* = object extMultiAddrs: seq[string] extMultiAddrsOnly: Option[bool] - dnsAddrs: Option[bool] dnsAddrsNameServers: seq[IpAddress] peerPersistence: Option[bool] @@ -193,9 +192,6 @@ proc withRemotePeerExchangeNode*( ) = b.remotePeerExchangeNode = some(remotePeerExchangeNode) -proc withDnsAddrs*(b: var WakuConfBuilder, dnsAddrs: bool) = - b.dnsAddrs = some(dnsAddrs) - proc withPeerPersistence*(b: var WakuConfBuilder, peerPersistence: bool) = b.peerPersistence = some(peerPersistence) @@ -208,7 +204,7 @@ proc withMaxConnections*(b: var WakuConfBuilder, maxConnections: int) = proc withDnsAddrsNameServers*( b: var WakuConfBuilder, dnsAddrsNameServers: seq[IpAddress] ) = - b.dnsAddrsNameServers = concat(b.dnsAddrsNameServers, dnsAddrsNameServers) + b.dnsAddrsNameServers.insert(dnsAddrsNameServers) proc withLogLevel*(b: var WakuConfBuilder, logLevel: logging.LogLevel) = b.logLevel = some(logLevel) @@ -541,13 +537,6 @@ proc build*( warn "Whether to only announce external multiaddresses is not specified, defaulting to false" false - let dnsAddrs = - if builder.dnsAddrs.isSome(): - builder.dnsAddrs.get() - else: - warn "Whether to resolve DNS multiaddresses was not specified, defaulting to false." - false - let dnsAddrsNameServers = if builder.dnsAddrsNameServers.len != 0: builder.dnsAddrsNameServers @@ -627,7 +616,6 @@ proc build*( ), portsShift: portsShift, webSocketConf: webSocketConf, - dnsAddrs: dnsAddrs, dnsAddrsNameServers: dnsAddrsNameServers, peerPersistence: peerPersistence, peerStoreCapacity: builder.peerStoreCapacity, diff --git a/waku/factory/conf_builder/web_socket_conf_builder.nim b/waku/factory/conf_builder/web_socket_conf_builder.nim index 25ff6461d..5ed3d230a 100644 --- a/waku/factory/conf_builder/web_socket_conf_builder.nim +++ b/waku/factory/conf_builder/web_socket_conf_builder.nim @@ -1,5 +1,5 @@ import chronicles, std/[net, options], results -import ../network_conf +import ../networks_config logScope: topics = "waku conf builder websocket" diff --git a/waku/factory/external_config.nim b/waku/factory/external_config.nim index 2b156fc8e..9617d4403 100644 --- a/waku/factory/external_config.nim +++ b/waku/factory/external_config.nim @@ -245,12 +245,6 @@ type WakuNodeConf* = object .}: bool ## DNS addrs config - dnsAddrs* {. - desc: "Enable resolution of `dnsaddr`, `dns4` or `dns6` multiaddrs", - defaultValue: true, - name: "dns-addrs" - .}: bool - dnsAddrsNameServers* {. desc: "DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated.", @@ -567,12 +561,6 @@ with the drawback of consuming some more bandwidth.""", name: "dns-discovery-url" .}: string - dnsDiscoveryNameServers* {. - desc: "DNS name server IPs to query. Argument may be repeated.", - defaultValue: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], - name: "dns-discovery-name-server" - .}: seq[IpAddress] - ## Discovery v5 config discv5Discovery* {. desc: "Enable discovering nodes via Node Discovery v5.", @@ -962,7 +950,6 @@ proc toWakuConf*(n: WakuNodeConf): ConfResult[WakuConf] = b.withPeerStoreCapacity(n.peerStoreCapacity.get()) b.withPeerPersistence(n.peerPersistence) - b.withDnsAddrs(n.dnsAddrs) b.withDnsAddrsNameServers(n.dnsAddrsNameServers) b.withDns4DomainName(n.dns4DomainName) b.withCircuitRelayClient(n.isRelayClient) @@ -1024,7 +1011,6 @@ proc toWakuConf*(n: WakuNodeConf): ConfResult[WakuConf] = b.dnsDiscoveryConf.withEnabled(n.dnsDiscovery) b.dnsDiscoveryConf.withEnrTreeUrl(n.dnsDiscoveryUrl) - b.dnsDiscoveryConf.withNameServers(n.dnsDiscoveryNameServers) if n.discv5Discovery.isSome(): b.discv5Conf.withEnabled(n.discv5Discovery.get()) diff --git a/waku/factory/internal_config.nim b/waku/factory/internal_config.nim index 72af28340..4f252fd00 100644 --- a/waku/factory/internal_config.nim +++ b/waku/factory/internal_config.nim @@ -12,7 +12,7 @@ import ../waku_enr, ../waku_core, ./waku_conf, - ./network_conf + ./networks_config proc enrConfiguration*( conf: WakuConf, netConfig: NetConfig @@ -139,6 +139,7 @@ proc networkConfiguration*( dns4DomainName = conf.dns4DomainName, discv5UdpPort = discv5UdpPort, wakuFlags = some(wakuFlags), + dnsNameServers = dnsAddrsNameServers, ) return netConfigRes diff --git a/waku/factory/network_conf.nim b/waku/factory/network_conf.nim deleted file mode 100644 index c5179e53a..000000000 --- a/waku/factory/network_conf.nim +++ /dev/null @@ -1,34 +0,0 @@ -import std/[net, options, strutils] -import libp2p/multiaddress - -type WebSocketSecureConf* {.requiresInit.} = object - keyPath*: string - certPath*: string - -type WebSocketConf* = object - port*: Port - secureConf*: Option[WebSocketSecureConf] - -type NetworkConf* = object - natStrategy*: string # TODO: make enum - p2pTcpPort*: Port - dns4DomainName*: Option[string] - p2pListenAddress*: IpAddress - extMultiAddrs*: seq[MultiAddress] - extMultiAddrsOnly*: bool - webSocketConf*: Option[WebSocketConf] - -proc validateNoEmptyStrings(networkConf: NetworkConf): Result[void, string] = - if networkConf.dns4DomainName.isSome() and - isEmptyOrWhiteSpace(networkConf.dns4DomainName.get().string): - return err("dns4DomainName is an empty string, set it to none(string) instead") - - if networkConf.webSocketConf.isSome() and - networkConf.webSocketConf.get().secureConf.isSome(): - let secureConf = networkConf.webSocketConf.get().secureConf.get() - if isEmptyOrWhiteSpace(secureConf.keyPath): - return err("websocket.secureConf.keyPath is an empty string") - if isEmptyOrWhiteSpace(secureConf.certPath): - return err("websocket.secureConf.certPath is an empty string") - - return ok() diff --git a/waku/factory/networks_config.nim b/waku/factory/networks_config.nim index 8b5f4a628..619a1a7c5 100644 --- a/waku/factory/networks_config.nim +++ b/waku/factory/networks_config.nim @@ -1,6 +1,14 @@ {.push raises: [].} -import stint +import stint, std/[nativesockets, options] + +type WebSocketSecureConf* {.requiresInit.} = object + keyPath*: string + certPath*: string + +type WebSocketConf* = object + port*: Port + secureConf*: Option[WebSocketSecureConf] # TODO: Rename this type to match file name diff --git a/waku/factory/node_factory.nim b/waku/factory/node_factory.nim index a03e2a1e1..5dc549317 100644 --- a/waku/factory/node_factory.nim +++ b/waku/factory/node_factory.nim @@ -67,17 +67,6 @@ proc initNode( ## file. Optionally include persistent peer storage. ## No protocols are mounted yet. - var dnsResolver: DnsResolver - if conf.dnsAddrs: - # Support for DNS multiaddrs - var nameServers: seq[TransportAddress] - for ip in conf.dnsAddrsNameServers: - nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 - - dnsResolver = DnsResolver.new(nameServers) - - var node: WakuNode - let pStorage = if peerStore.isNone(): nil @@ -91,6 +80,9 @@ proc initNode( else: (none(string), none(string)) + let nameResolver = + DnsResolver.new(conf.dnsAddrsNameServers.mapIt(initTAddress(it, Port(53)))) + # Build waku node instance var builder = WakuNodeBuilder.init() builder.withRng(rng) @@ -102,7 +94,7 @@ proc initNode( maxConnections = some(conf.maxConnections.int), secureKey = secureKey, secureCert = secureCert, - nameResolver = dnsResolver, + nameResolver = nameResolver, sendSignedPeerRecord = conf.relayPeerExchange, # We send our own signed peer record when peer exchange enabled agentString = some(conf.agentString), @@ -132,7 +124,7 @@ proc initNode( builder.withRateLimit(conf.rateLimits) builder.withCircuitRelay(relay) - node = + let node = ?builder.build().mapErr( proc(err: string): string = "failed to create waku node instance: " & err diff --git a/waku/factory/waku_conf.nim b/waku/factory/waku_conf.nim index 94b89a26e..caf925ff2 100644 --- a/waku/factory/waku_conf.nim +++ b/waku/factory/waku_conf.nim @@ -13,7 +13,7 @@ import ../node/waku_metrics, ../common/logging, ../waku_enr/capabilities, - ./network_conf + ./networks_config export RlnRelayConf, RlnRelayCreds, RestServerConf, Discv5Conf, MetricsServerConf @@ -95,7 +95,6 @@ type WakuConf* {.requiresInit.} = ref object webSocketConf*: Option[WebSocketConf] portsShift*: uint16 - dnsAddrs*: bool dnsAddrsNameServers*: seq[IpAddress] networkConf*: NetworkConfig wakuFlags*: CapabilitiesBitfield diff --git a/waku/node/net_config.nim b/waku/node/net_config.nim index a45d95f92..4802694c4 100644 --- a/waku/node/net_config.nim +++ b/waku/node/net_config.nim @@ -78,7 +78,7 @@ proc init*( discv5UdpPort = none(Port), clusterId: uint16 = 0, wakuFlags = none(CapabilitiesBitfield), - dnsNameServers = newSeq[IpAddress](), + dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], ): NetConfigResult = ## Initialize and validate waku node network configuration diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 40a13b601..707738e5f 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -1048,7 +1048,7 @@ proc new*( maxFailedAttempts = MaxFailedAttempts, colocationLimit = DefaultColocationLimit, shardedPeerManagement = false, - dnsNameServers = newSeq[IpAddress](), + dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], ): PeerManager {.gcsafe.} = let capacity = switch.peerStore.capacity let maxConnections = switch.connManager.inSema.size