Pick up the existing interface private key

This commit is contained in:
Owen
2025-09-28 16:26:36 -07:00
parent 5d891225de
commit 4e648af8e9

View File

@@ -152,6 +152,7 @@ func NewWireGuardService(interfaceName string, mtu int, generateAndSaveKeyTo str
} }
var key wgtypes.Key var key wgtypes.Key
var port uint16
// if generateAndSaveKeyTo is provided, generate a private key and save it to the file. if the file already exists, load the key from the file // if generateAndSaveKeyTo is provided, generate a private key and save it to the file. if the file already exists, load the key from the file
key, err = wgtypes.GeneratePrivateKey() key, err = wgtypes.GeneratePrivateKey()
if err != nil { if err != nil {
@@ -177,40 +178,43 @@ func NewWireGuardService(interfaceName string, mtu int, generateAndSaveKeyTo str
} }
} }
service := &WireGuardService{ // Get the existing wireguard port
interfaceName: interfaceName, device, err := wgClient.Device(interfaceName)
mtu: mtu,
client: wsClient,
wgClient: wgClient,
key: key,
keyFilePath: generateAndSaveKeyTo,
newtId: newtId,
host: host,
lastReadings: make(map[string]PeerReading),
stopHolepunch: make(chan struct{}),
}
// Get the existing wireguard port (keep this part)
device, err := service.wgClient.Device(service.interfaceName)
if err == nil { if err == nil {
service.Port = uint16(device.ListenPort) port = uint16(device.ListenPort)
if service.Port != 0 { // also set the private key to the existing key
logger.Info("WireGuard interface %s already exists with port %d\n", service.interfaceName, service.Port) key = device.PrivateKey
if port != 0 {
logger.Info("WireGuard interface %s already exists with port %d\n", interfaceName, port)
} else { } else {
service.Port, err = FindAvailableUDPPort(49152, 65535) port, err = FindAvailableUDPPort(49152, 65535)
if err != nil { if err != nil {
fmt.Printf("Error finding available port: %v\n", err) fmt.Printf("Error finding available port: %v\n", err)
return nil, err return nil, err
} }
} }
} else { } else {
service.Port, err = FindAvailableUDPPort(49152, 65535) port, err = FindAvailableUDPPort(49152, 65535)
if err != nil { if err != nil {
fmt.Printf("Error finding available port: %v\n", err) fmt.Printf("Error finding available port: %v\n", err)
return nil, err return nil, err
} }
} }
service := &WireGuardService{
interfaceName: interfaceName,
mtu: mtu,
client: wsClient,
wgClient: wgClient,
key: key,
Port: port,
keyFilePath: generateAndSaveKeyTo,
newtId: newtId,
host: host,
lastReadings: make(map[string]PeerReading),
stopHolepunch: make(chan struct{}),
}
// Register websocket handlers // Register websocket handlers
wsClient.RegisterHandler("newt/wg/receive-config", service.handleConfig) wsClient.RegisterHandler("newt/wg/receive-config", service.handleConfig)
wsClient.RegisterHandler("newt/wg/peer/add", service.handleAddPeer) wsClient.RegisterHandler("newt/wg/peer/add", service.handleAddPeer)