From 0fca3457c3ab5c13d8809c2939b59841f2d7048f Mon Sep 17 00:00:00 2001 From: Owen Date: Wed, 10 Dec 2025 14:06:55 -0500 Subject: [PATCH] Rename logs, optional port --- clients.go | 2 +- clients/clients.go | 16 +++++++++------- main.go | 16 +++++++++++++++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/clients.go b/clients.go index 3f28f4c..94586a2 100644 --- a/clients.go +++ b/clients.go @@ -37,7 +37,7 @@ func setupClients(client *websocket.Client) { } // Create WireGuard service - wgService, err = wgnetstack.NewWireGuardService(interfaceName, mtuInt, host, id, client, dns, useNativeInterface) + wgService, err = wgnetstack.NewWireGuardService(interfaceName, port, mtuInt, host, id, client, dns, useNativeInterface) if err != nil { logger.Fatal("Failed to create WireGuard service: %v", err) } diff --git a/clients/clients.go b/clients/clients.go index ed35567..9b17d07 100644 --- a/clients/clients.go +++ b/clients/clients.go @@ -104,17 +104,19 @@ type WireGuardService struct { wgTesterServer *wgtester.Server } -func NewWireGuardService(interfaceName string, mtu int, host string, newtId string, wsClient *websocket.Client, dns string, useNativeInterface bool) (*WireGuardService, error) { +func NewWireGuardService(interfaceName string, port uint16, mtu int, host string, newtId string, wsClient *websocket.Client, dns string, useNativeInterface bool) (*WireGuardService, error) { key, err := wgtypes.GeneratePrivateKey() if err != nil { return nil, fmt.Errorf("failed to generate private key: %v", err) } - // Find an available port - port, err := util.FindAvailableUDPPort(49152, 65535) - - if err != nil { - return nil, fmt.Errorf("error finding available port: %v", err) + if port == 0 { + // Find an available port + portRandom, err := util.FindAvailableUDPPort(49152, 65535) + if err != nil { + return nil, fmt.Errorf("error finding available port: %v", err) + } + port = uint16(portRandom) } // Create shared UDP socket for both holepunch and WireGuard @@ -522,7 +524,7 @@ func (s *WireGuardService) ensureWireguardInterface(wgconfig WgConfig) error { // Create WireGuard device using the shared bind s.device = device.NewDevice(s.tun, s.sharedBind, device.NewLogger( device.LogLevelSilent, - "wireguard: ", + "client-wireguard: ", )) fileUAPI, err := func() (*os.File, error) { diff --git a/main.go b/main.go index 0879a96..2ca0e35 100644 --- a/main.go +++ b/main.go @@ -116,6 +116,7 @@ var ( err error logLevel string interfaceName string + port uint16 disableClients bool updownScript string dockerSocket string @@ -167,6 +168,7 @@ func main() { logLevel = os.Getenv("LOG_LEVEL") updownScript = os.Getenv("UPDOWN_SCRIPT") interfaceName = os.Getenv("INTERFACE") + portStr := os.Getenv("PORT") // Metrics/observability env mirrors metricsEnabledEnv := os.Getenv("NEWT_METRICS_PROMETHEUS_ENABLED") @@ -235,6 +237,9 @@ func main() { if interfaceName == "" { flag.StringVar(&interfaceName, "interface", "newt", "Name of the WireGuard interface") } + if portStr == "" { + flag.StringVar(&portStr, "port", "", "Port for client WireGuard interface") + } if useNativeInterfaceEnv == "" { flag.BoolVar(&useNativeInterface, "native", false, "Use native WireGuard interface") } @@ -297,6 +302,15 @@ func main() { pingTimeout = 5 * time.Second } + if portStr != "" { + portInt, err := strconv.Atoi(portStr) + if err != nil { + logger.Warn("Failed to parse PORT, choosing a random port") + } else { + port = uint16(portInt) + } + } + if dockerEnforceNetworkValidation == "" { flag.StringVar(&dockerEnforceNetworkValidation, "docker-enforce-network-validation", "false", "Enforce validation of container on newt network (true or false)") } @@ -641,7 +655,7 @@ func main() { // Create WireGuard device dev = device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger( util.MapToWireGuardLogLevel(loggerLevel), - "wireguard: ", + "gerbil-wireguard: ", )) host, _, err := net.SplitHostPort(wgData.Endpoint)