diff --git a/client/internal/connect.go b/client/internal/connect.go index 366a4ac60..cf2b2c61e 100644 --- a/client/internal/connect.go +++ b/client/internal/connect.go @@ -290,6 +290,10 @@ func (c *ConnectClient) run(mobileDependency MobileDependency, runningChan chan return wrapErr(err) } + if relayClient.IsDisableRelay() { + relayURLs = []string{} + } + relayManager := relayClient.NewManager(engineCtx, relayURLs, myPrivateKey.PublicKey().String(), engineConfig.MTU) c.statusRecorder.SetRelayMgr(relayManager) if len(relayURLs) > 0 { diff --git a/client/internal/engine.go b/client/internal/engine.go index af8c4fdba..99bb041e3 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -942,7 +942,9 @@ func (e *Engine) handleRelayUpdate(update *mgmProto.RelayConfig) error { return fmt.Errorf("update relay token: %w", err) } - e.relayManager.UpdateServerURLs(update.Urls) + if !relayClient.IsDisableRelay() { + e.relayManager.UpdateServerURLs(update.Urls) + } // Just in case the agent started with an MGM server where the relay was disabled but was later enabled. // We can ignore all errors because the guard will manage the reconnection retries. diff --git a/client/internal/peer/ice/agent.go b/client/internal/peer/ice/agent.go index c74b46d10..2f2c54483 100644 --- a/client/internal/peer/ice/agent.go +++ b/client/internal/peer/ice/agent.go @@ -12,6 +12,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/netbirdio/netbird/client/internal/stdnet" + relayClient "github.com/netbirdio/netbird/shared/relay/client" ) const ( @@ -125,6 +126,10 @@ func GenerateICECredentials() (string, string, error) { } func CandidateTypes() []ice.CandidateType { + if relayClient.IsDisableRelay() { + return []ice.CandidateType{ice.CandidateTypeHost, ice.CandidateTypeServerReflexive, ice.CandidateTypeRelay} + } + if hasICEForceRelayConn() { return []ice.CandidateType{ice.CandidateTypeRelay} } diff --git a/shared/relay/client/env.go b/shared/relay/client/env.go new file mode 100644 index 000000000..93fb349ed --- /dev/null +++ b/shared/relay/client/env.go @@ -0,0 +1,15 @@ +package client + +import ( + "os" + "strconv" +) + +const ( + envKeyNBDebugDisableRelay = "NB_DEBUG_DISABLE_RELAY" +) + +func IsDisableRelay() bool { + v, _ := strconv.ParseBool(os.Getenv(envKeyNBDebugDisableRelay)) + return v +}