From 1f926d15b8bedeee3360889384a84b9f084dc581 Mon Sep 17 00:00:00 2001 From: Bethuel Mmbaga Date: Thu, 13 Jun 2024 18:47:25 +0300 Subject: [PATCH] Enable network monitoring for Windows and macOS clients (#2126) * Enable network monitoring by default for Windows and Darwin * Enable network monitoring by default on Windows and macOS * fix merge * Prevent updating config if no changes --- client/cmd/up.go | 5 ++++- client/internal/config.go | 16 +++++++++++++--- client/internal/connect.go | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/client/cmd/up.go b/client/cmd/up.go index 215635864..f69e9eb27 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 0b55d5ccb..461dcdd96 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 eee8e97c5..c83a5622b 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,