diff --git a/client/cmd/up.go b/client/cmd/up.go index 2156358643f..f69e9eb2749 100644 --- a/client/cmd/up.go +++ b/client/cmd/up.go @@ -42,7 +42,10 @@ func init() { upCmd.PersistentFlags().BoolVarP(&foregroundMode, "foreground-mode", "F", false, "start service in foreground") upCmd.PersistentFlags().StringVar(&interfaceName, interfaceNameFlag, iface.WgInterfaceDefault, "Wireguard interface name") upCmd.PersistentFlags().Uint16Var(&wireguardPort, wireguardPortFlag, iface.DefaultWgPort, "Wireguard interface listening port") - upCmd.PersistentFlags().BoolVarP(&networkMonitor, networkMonitorFlag, "N", false, "Enable network monitoring") + upCmd.PersistentFlags().BoolVarP(&networkMonitor, networkMonitorFlag, "N", networkMonitor, + `Manage network monitoring. Defaults to true on Windows and macOS, false on Linux. `+ + `E.g. --network-monitor=false to disable or --network-monitor=true to enable.`, + ) upCmd.PersistentFlags().StringSliceVar(&extraIFaceBlackList, extraIFaceBlackListFlag, nil, "Extra list of default interfaces to ignore for listening") upCmd.PersistentFlags().DurationVar(&dnsRouteInterval, dnsRouteIntervalFlag, time.Minute, "DNS route update interval") } diff --git a/client/internal/config.go b/client/internal/config.go index 0b55d5ccbfd..461dcdd9650 100644 --- a/client/internal/config.go +++ b/client/internal/config.go @@ -6,6 +6,7 @@ import ( "net/url" "os" "reflect" + "runtime" "strings" "time" @@ -67,7 +68,7 @@ type Config struct { AdminURL *url.URL WgIface string WgPort int - NetworkMonitor bool + NetworkMonitor *bool IFaceBlackList []string DisableIPv6Discovery bool RosenpassEnabled bool @@ -310,12 +311,21 @@ func (config *Config) apply(input ConfigInput) (updated bool, err error) { updated = true } - if input.NetworkMonitor != nil && *input.NetworkMonitor != config.NetworkMonitor { + if input.NetworkMonitor != nil && input.NetworkMonitor != config.NetworkMonitor { log.Infof("switching Network Monitor to %t", *input.NetworkMonitor) - config.NetworkMonitor = *input.NetworkMonitor + config.NetworkMonitor = input.NetworkMonitor updated = true } + if config.NetworkMonitor == nil { + // enable network monitoring by default on windows and darwin clients + if runtime.GOOS == "windows" || runtime.GOOS == "darwin" { + enabled := true + config.NetworkMonitor = &enabled + updated = true + } + } + if input.CustomDNSAddress != nil && string(input.CustomDNSAddress) != config.CustomDNSAddress { log.Infof("updating custom DNS address %#v (old value %#v)", string(input.CustomDNSAddress), config.CustomDNSAddress) diff --git a/client/internal/connect.go b/client/internal/connect.go index eee8e97c58a..c83a5622b0d 100644 --- a/client/internal/connect.go +++ b/client/internal/connect.go @@ -316,7 +316,7 @@ func createEngineConfig(key wgtypes.Key, config *Config, peerConfig *mgmProto.Pe DisableIPv6Discovery: config.DisableIPv6Discovery, WgPrivateKey: key, WgPort: config.WgPort, - NetworkMonitor: config.NetworkMonitor, + NetworkMonitor: *config.NetworkMonitor, SSHKey: []byte(config.SSHKey), NATExternalIPs: config.NATExternalIPs, CustomDNSAddress: config.CustomDNSAddress,