mirror of
https://github.com/fosrl/newt.git
synced 2026-03-06 10:46:40 +00:00
Pm working
This commit is contained in:
28
main.go
28
main.go
@@ -420,7 +420,7 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
if len(wgData.Targets.TCP) > 0 {
|
if len(wgData.Targets.TCP) > 0 {
|
||||||
updateTargets(pm, "add", wgData.TunnelIP, "tcp", TargetData{Targets: wgData.Targets.TCP})
|
updateTargets(pm, "add", wgData.TunnelIP, "tcp", TargetData{Targets: wgData.Targets.TCP})
|
||||||
// Also update wgnetstack proxy manager
|
// Also update wgnetstack proxy manager
|
||||||
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
if wgService != nil {
|
||||||
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "tcp", TargetData{Targets: wgData.Targets.TCP})
|
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "tcp", TargetData{Targets: wgData.Targets.TCP})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -428,7 +428,7 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
if len(wgData.Targets.UDP) > 0 {
|
if len(wgData.Targets.UDP) > 0 {
|
||||||
updateTargets(pm, "add", wgData.TunnelIP, "udp", TargetData{Targets: wgData.Targets.UDP})
|
updateTargets(pm, "add", wgData.TunnelIP, "udp", TargetData{Targets: wgData.Targets.UDP})
|
||||||
// Also update wgnetstack proxy manager
|
// Also update wgnetstack proxy manager
|
||||||
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
if wgService != nil {
|
||||||
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "udp", TargetData{Targets: wgData.Targets.UDP})
|
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "udp", TargetData{Targets: wgData.Targets.UDP})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -647,9 +647,9 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
updateTargets(pm, "add", wgData.TunnelIP, "tcp", targetData)
|
updateTargets(pm, "add", wgData.TunnelIP, "tcp", targetData)
|
||||||
|
|
||||||
// Also update wgnetstack proxy manager
|
// Also update wgnetstack proxy manager
|
||||||
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
// if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "tcp", targetData)
|
// updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "tcp", targetData)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -672,9 +672,9 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
updateTargets(pm, "add", wgData.TunnelIP, "udp", targetData)
|
updateTargets(pm, "add", wgData.TunnelIP, "udp", targetData)
|
||||||
|
|
||||||
// Also update wgnetstack proxy manager
|
// Also update wgnetstack proxy manager
|
||||||
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
// if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "udp", targetData)
|
// updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "udp", targetData)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -697,9 +697,9 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
updateTargets(pm, "remove", wgData.TunnelIP, "udp", targetData)
|
updateTargets(pm, "remove", wgData.TunnelIP, "udp", targetData)
|
||||||
|
|
||||||
// Also update wgnetstack proxy manager
|
// Also update wgnetstack proxy manager
|
||||||
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
// if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
updateTargets(wgService.GetProxyManager(), "remove", wgData.TunnelIP, "udp", targetData)
|
// updateTargets(wgService.GetProxyManager(), "remove", wgData.TunnelIP, "udp", targetData)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -722,9 +722,9 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
updateTargets(pm, "remove", wgData.TunnelIP, "tcp", targetData)
|
updateTargets(pm, "remove", wgData.TunnelIP, "tcp", targetData)
|
||||||
|
|
||||||
// Also update wgnetstack proxy manager
|
// Also update wgnetstack proxy manager
|
||||||
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
// if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
updateTargets(wgService.GetProxyManager(), "remove", wgData.TunnelIP, "tcp", targetData)
|
// updateTargets(wgService.GetProxyManager(), "remove", wgData.TunnelIP, "tcp", targetData)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -29,8 +29,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type WgConfig struct {
|
type WgConfig struct {
|
||||||
IpAddress string `json:"ipAddress"`
|
IpAddress string `json:"ipAddress"`
|
||||||
Peers []Peer `json:"peers"`
|
Peers []Peer `json:"peers"`
|
||||||
|
Targets TargetsByType `json:"targets"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TargetsByType struct {
|
||||||
|
UDP []string `json:"udp"`
|
||||||
|
TCP []string `json:"tcp"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TargetData struct {
|
||||||
|
Targets []string `json:"targets"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Peer struct {
|
type Peer struct {
|
||||||
@@ -348,6 +358,18 @@ func (s *WireGuardService) handleConfig(msg websocket.WSMessage) {
|
|||||||
if err := s.ensureWireguardPeers(config.Peers); err != nil {
|
if err := s.ensureWireguardPeers(config.Peers); err != nil {
|
||||||
logger.Error("Failed to ensure WireGuard peers: %v", err)
|
logger.Error("Failed to ensure WireGuard peers: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add the targets if there are any
|
||||||
|
if len(config.Targets.TCP) > 0 {
|
||||||
|
updateTargets(s.proxyManager, "add", config.IpAddress, "tcp", TargetData{Targets: config.Targets.TCP})
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(config.Targets.UDP) > 0 {
|
||||||
|
updateTargets(s.proxyManager, "add", config.IpAddress, "udp", TargetData{Targets: config.Targets.UDP})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create ProxyManager for this tunnel
|
||||||
|
s.proxyManager.Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *WireGuardService) ensureWireguardInterface(wgconfig WgConfig) error {
|
func (s *WireGuardService) ensureWireguardInterface(wgconfig WgConfig) error {
|
||||||
@@ -410,9 +432,6 @@ func (s *WireGuardService) ensureWireguardInterface(wgconfig WgConfig) error {
|
|||||||
|
|
||||||
logger.Info("WireGuard netstack device created and configured")
|
logger.Info("WireGuard netstack device created and configured")
|
||||||
|
|
||||||
// Create ProxyManager for this tunnel
|
|
||||||
s.proxyManager.Start()
|
|
||||||
|
|
||||||
// Store callback and tnet reference before releasing mutex
|
// Store callback and tnet reference before releasing mutex
|
||||||
callback := s.onNetstackReady
|
callback := s.onNetstackReady
|
||||||
tnet := s.tnet
|
tnet := s.tnet
|
||||||
@@ -967,3 +986,52 @@ func (s *WireGuardService) keepSendingUDPHolePunch(host string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateTargets(pm *proxy.ProxyManager, action string, tunnelIP string, proto string, targetData TargetData) error {
|
||||||
|
for _, t := range targetData.Targets {
|
||||||
|
// Split the first number off of the target with : separator and use as the port
|
||||||
|
parts := strings.Split(t, ":")
|
||||||
|
if len(parts) != 3 {
|
||||||
|
logger.Info("Invalid target format: %s", t)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the port as an int
|
||||||
|
port := 0
|
||||||
|
_, err := fmt.Sscanf(parts[0], "%d", &port)
|
||||||
|
if err != nil {
|
||||||
|
logger.Info("Invalid port: %s", parts[0])
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if action == "add" {
|
||||||
|
target := parts[1] + ":" + parts[2]
|
||||||
|
|
||||||
|
// Call updown script if provided
|
||||||
|
processedTarget := target
|
||||||
|
|
||||||
|
// Only remove the specific target if it exists
|
||||||
|
err := pm.RemoveTarget(proto, tunnelIP, port)
|
||||||
|
if err != nil {
|
||||||
|
// Ignore "target not found" errors as this is expected for new targets
|
||||||
|
if !strings.Contains(err.Error(), "target not found") {
|
||||||
|
logger.Error("Failed to remove existing target: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the new target
|
||||||
|
pm.AddTarget(proto, tunnelIP, port, processedTarget)
|
||||||
|
|
||||||
|
} else if action == "remove" {
|
||||||
|
logger.Info("Removing target with port %d", port)
|
||||||
|
|
||||||
|
err := pm.RemoveTarget(proto, tunnelIP, port)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("Failed to remove target: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user