mirror of
https://github.com/fosrl/newt.git
synced 2026-03-05 18:26:42 +00:00
Proxy working?
This commit is contained in:
28
main.go
28
main.go
@@ -419,10 +419,18 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
// add the targets if there are any
|
// add the targets if there are any
|
||||||
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
|
||||||
|
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
|
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "tcp", TargetData{Targets: wgData.Targets.TCP})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
|
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
|
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "udp", TargetData{Targets: wgData.Targets.UDP})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clientsAddProxyTarget(pm, wgData.TunnelIP)
|
clientsAddProxyTarget(pm, wgData.TunnelIP)
|
||||||
@@ -637,6 +645,11 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
|
|
||||||
if len(targetData.Targets) > 0 {
|
if len(targetData.Targets) > 0 {
|
||||||
updateTargets(pm, "add", wgData.TunnelIP, "tcp", targetData)
|
updateTargets(pm, "add", wgData.TunnelIP, "tcp", targetData)
|
||||||
|
|
||||||
|
// Also update wgnetstack proxy manager
|
||||||
|
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
|
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "tcp", targetData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -657,6 +670,11 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
|
|
||||||
if len(targetData.Targets) > 0 {
|
if len(targetData.Targets) > 0 {
|
||||||
updateTargets(pm, "add", wgData.TunnelIP, "udp", targetData)
|
updateTargets(pm, "add", wgData.TunnelIP, "udp", targetData)
|
||||||
|
|
||||||
|
// Also update wgnetstack proxy manager
|
||||||
|
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
|
updateTargets(wgService.GetProxyManager(), "add", wgData.TunnelIP, "udp", targetData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -677,6 +695,11 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
|
|
||||||
if len(targetData.Targets) > 0 {
|
if len(targetData.Targets) > 0 {
|
||||||
updateTargets(pm, "remove", wgData.TunnelIP, "udp", targetData)
|
updateTargets(pm, "remove", wgData.TunnelIP, "udp", targetData)
|
||||||
|
|
||||||
|
// Also update wgnetstack proxy manager
|
||||||
|
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
|
updateTargets(wgService.GetProxyManager(), "remove", wgData.TunnelIP, "udp", targetData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -697,6 +720,11 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
|||||||
|
|
||||||
if len(targetData.Targets) > 0 {
|
if len(targetData.Targets) > 0 {
|
||||||
updateTargets(pm, "remove", wgData.TunnelIP, "tcp", targetData)
|
updateTargets(pm, "remove", wgData.TunnelIP, "tcp", targetData)
|
||||||
|
|
||||||
|
// Also update wgnetstack proxy manager
|
||||||
|
if wgService != nil && wgService.GetNetstackNet() != nil && wgService.GetProxyManager() != nil {
|
||||||
|
updateTargets(wgService.GetProxyManager(), "remove", wgData.TunnelIP, "tcp", targetData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,23 @@ func NewProxyManager(tnet *netstack.Net) *ProxyManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// init function without tnet
|
||||||
|
func NewProxyManagerWithoutTNet() *ProxyManager {
|
||||||
|
return &ProxyManager{
|
||||||
|
tcpTargets: make(map[string]map[int]string),
|
||||||
|
udpTargets: make(map[string]map[int]string),
|
||||||
|
listeners: make([]*gonet.TCPListener, 0),
|
||||||
|
udpConns: make([]*gonet.UDPConn, 0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to add tnet to existing ProxyManager
|
||||||
|
func (pm *ProxyManager) SetTNet(tnet *netstack.Net) {
|
||||||
|
pm.mutex.Lock()
|
||||||
|
defer pm.mutex.Unlock()
|
||||||
|
pm.tnet = tnet
|
||||||
|
}
|
||||||
|
|
||||||
// AddTarget adds as new target for proxying
|
// AddTarget adds as new target for proxying
|
||||||
func (pm *ProxyManager) AddTarget(proto, listenIP string, port int, targetAddr string) error {
|
func (pm *ProxyManager) AddTarget(proto, listenIP string, port int, targetAddr string) error {
|
||||||
pm.mutex.Lock()
|
pm.mutex.Lock()
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import (
|
|||||||
|
|
||||||
"github.com/fosrl/newt/logger"
|
"github.com/fosrl/newt/logger"
|
||||||
"github.com/fosrl/newt/network"
|
"github.com/fosrl/newt/network"
|
||||||
|
"github.com/fosrl/newt/proxy"
|
||||||
"github.com/fosrl/newt/websocket"
|
"github.com/fosrl/newt/websocket"
|
||||||
"golang.org/x/crypto/chacha20poly1305"
|
"golang.org/x/crypto/chacha20poly1305"
|
||||||
"golang.org/x/crypto/curve25519"
|
"golang.org/x/crypto/curve25519"
|
||||||
@@ -75,6 +76,30 @@ type WireGuardService struct {
|
|||||||
// Callback for when netstack is ready
|
// Callback for when netstack is ready
|
||||||
onNetstackReady func(*netstack.Net)
|
onNetstackReady func(*netstack.Net)
|
||||||
othertnet *netstack.Net
|
othertnet *netstack.Net
|
||||||
|
// Proxy manager for tunnel
|
||||||
|
proxyManager *proxy.ProxyManager
|
||||||
|
// ...existing code...
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetProxyManager returns the proxy manager for this WireGuardService
|
||||||
|
func (s *WireGuardService) GetProxyManager() *proxy.ProxyManager {
|
||||||
|
return s.proxyManager
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddProxyTarget adds a target to the proxy manager
|
||||||
|
func (s *WireGuardService) AddProxyTarget(proto, listenIP string, port int, targetAddr string) error {
|
||||||
|
if s.proxyManager == nil {
|
||||||
|
return fmt.Errorf("proxy manager not initialized")
|
||||||
|
}
|
||||||
|
return s.proxyManager.AddTarget(proto, listenIP, port, targetAddr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveProxyTarget removes a target from the proxy manager
|
||||||
|
func (s *WireGuardService) RemoveProxyTarget(proto, listenIP string, port int) error {
|
||||||
|
if s.proxyManager == nil {
|
||||||
|
return fmt.Errorf("proxy manager not initialized")
|
||||||
|
}
|
||||||
|
return s.proxyManager.RemoveTarget(proto, listenIP, port)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add this type definition
|
// Add this type definition
|
||||||
@@ -199,6 +224,7 @@ func NewWireGuardService(interfaceName string, mtu int, generateAndSaveKeyTo str
|
|||||||
stopHolepunch: make(chan struct{}),
|
stopHolepunch: make(chan struct{}),
|
||||||
Port: port,
|
Port: port,
|
||||||
dns: dnsAddrs,
|
dns: dnsAddrs,
|
||||||
|
proxyManager: proxy.NewProxyManagerWithoutTNet(),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register websocket handlers
|
// Register websocket handlers
|
||||||
@@ -356,6 +382,8 @@ func (s *WireGuardService) ensureWireguardInterface(wgconfig WgConfig) error {
|
|||||||
return fmt.Errorf("failed to create TUN device: %v", err)
|
return fmt.Errorf("failed to create TUN device: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s.proxyManager.SetTNet(s.tnet)
|
||||||
|
|
||||||
// Create WireGuard device
|
// Create WireGuard device
|
||||||
s.device = device.NewDevice(s.tun, NewFixedPortBind(s.Port), device.NewLogger(
|
s.device = device.NewDevice(s.tun, NewFixedPortBind(s.Port), device.NewLogger(
|
||||||
device.LogLevelSilent, // Use silent logging by default - could be made configurable
|
device.LogLevelSilent, // Use silent logging by default - could be made configurable
|
||||||
@@ -382,6 +410,9 @@ 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
|
||||||
|
|||||||
Reference in New Issue
Block a user