mirror of
https://github.com/fosrl/newt.git
synced 2026-02-08 05:56:40 +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
|
||||
if len(wgData.Targets.TCP) > 0 {
|
||||
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 {
|
||||
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)
|
||||
@@ -637,6 +645,11 @@ persistent_keepalive_interval=5`, fixKey(privateKey.String()), fixKey(wgData.Pub
|
||||
|
||||
if len(targetData.Targets) > 0 {
|
||||
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 {
|
||||
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 {
|
||||
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 {
|
||||
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
|
||||
func (pm *ProxyManager) AddTarget(proto, listenIP string, port int, targetAddr string) error {
|
||||
pm.mutex.Lock()
|
||||
|
||||
@@ -17,6 +17,7 @@ import (
|
||||
|
||||
"github.com/fosrl/newt/logger"
|
||||
"github.com/fosrl/newt/network"
|
||||
"github.com/fosrl/newt/proxy"
|
||||
"github.com/fosrl/newt/websocket"
|
||||
"golang.org/x/crypto/chacha20poly1305"
|
||||
"golang.org/x/crypto/curve25519"
|
||||
@@ -75,6 +76,30 @@ type WireGuardService struct {
|
||||
// Callback for when netstack is ready
|
||||
onNetstackReady func(*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
|
||||
@@ -199,6 +224,7 @@ func NewWireGuardService(interfaceName string, mtu int, generateAndSaveKeyTo str
|
||||
stopHolepunch: make(chan struct{}),
|
||||
Port: port,
|
||||
dns: dnsAddrs,
|
||||
proxyManager: proxy.NewProxyManagerWithoutTNet(),
|
||||
}
|
||||
|
||||
// Register websocket handlers
|
||||
@@ -356,6 +382,8 @@ func (s *WireGuardService) ensureWireguardInterface(wgconfig WgConfig) error {
|
||||
return fmt.Errorf("failed to create TUN device: %v", err)
|
||||
}
|
||||
|
||||
s.proxyManager.SetTNet(s.tnet)
|
||||
|
||||
// Create WireGuard device
|
||||
s.device = device.NewDevice(s.tun, NewFixedPortBind(s.Port), device.NewLogger(
|
||||
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")
|
||||
|
||||
// Create ProxyManager for this tunnel
|
||||
s.proxyManager.Start()
|
||||
|
||||
// Store callback and tnet reference before releasing mutex
|
||||
callback := s.onNetstackReady
|
||||
tnet := s.tnet
|
||||
|
||||
Reference in New Issue
Block a user