diff --git a/clients/clients.go b/clients/clients.go index bc7140c..cb76419 100644 --- a/clients/clients.go +++ b/clients/clients.go @@ -180,9 +180,9 @@ func NewWireGuardService(interfaceName string, mtu int, generateAndSaveKeyTo str wsClient.RegisterHandler("newt/wg/peer/add", service.handleAddPeer) wsClient.RegisterHandler("newt/wg/peer/remove", service.handleRemovePeer) wsClient.RegisterHandler("newt/wg/peer/update", service.handleUpdatePeer) - wsClient.RegisterHandler("newt/wg/target/add", service.handleAddTarget) - wsClient.RegisterHandler("newt/wg/target/remove", service.handleRemoveTarget) - wsClient.RegisterHandler("newt/wg/target/update", service.handleUpdateTarget) + wsClient.RegisterHandler("newt/wg/targets/add", service.handleAddTarget) + wsClient.RegisterHandler("newt/wg/targets/remove", service.handleRemoveTarget) + wsClient.RegisterHandler("newt/wg/targets/update", service.handleUpdateTarget) return service, nil } @@ -482,7 +482,7 @@ func (s *WireGuardService) ensureTargets(targets []Target) error { s.tnet.AddProxySubnetRule(sourcePrefix, destPrefix, portRanges) - logger.Info("Added target subnet %s with port ranges: %v", target.SourcePrefix, target.PortRange) + logger.Info("Added target subnet from %s to %s with port ranges: %v", target.SourcePrefix, target.DestPrefix, target.PortRange) } return nil @@ -874,7 +874,7 @@ func (s *WireGuardService) handleAddTarget(msg websocket.WSMessage) { s.tnet.AddProxySubnetRule(sourcePrefix, destPrefix, portRanges) - logger.Info("Added target subnet %s with port ranges: %v", target.SourcePrefix, target.PortRange) + logger.Info("Added target subnet from %s to %s with port ranges: %v", target.SourcePrefix, target.DestPrefix, target.PortRange) } } @@ -916,7 +916,7 @@ func (s *WireGuardService) handleRemoveTarget(msg websocket.WSMessage) { s.tnet.RemoveProxySubnetRule(sourcePrefix, destPrefix) - logger.Info("Removed target subnet %s", target.SourcePrefix) + logger.Info("Removed target subnet %s with destination %s", target.SourcePrefix, target.DestPrefix) } } @@ -962,6 +962,7 @@ func (s *WireGuardService) handleUpdateTarget(msg websocket.WSMessage) { } s.tnet.RemoveProxySubnetRule(sourcePrefix, destPrefix) + logger.Info("Removed target subnet %s with destination %s", target.SourcePrefix, target.DestPrefix) } for _, target := range requests.NewTargets { @@ -987,6 +988,7 @@ func (s *WireGuardService) handleUpdateTarget(msg websocket.WSMessage) { } s.tnet.AddProxySubnetRule(sourcePrefix, destPrefix, portRanges) + logger.Info("Added target subnet from %s to %s with port ranges: %v", target.SourcePrefix, target.DestPrefix, target.PortRange) } } diff --git a/util/util.go b/util/util.go index ebb13da..04d8034 100644 --- a/util/util.go +++ b/util/util.go @@ -2,6 +2,7 @@ package util import ( "encoding/base64" + "encoding/binary" "encoding/hex" "fmt" "net" @@ -152,3 +153,49 @@ func MapToWireGuardLogLevel(level logger.LogLevel) int { return device.LogLevelSilent } } + +// GetProtocol returns protocol number from IPv4 packet (fast path) +func GetProtocol(packet []byte) (uint8, bool) { + if len(packet) < 20 { + return 0, false + } + version := packet[0] >> 4 + if version == 4 { + return packet[9], true + } else if version == 6 { + if len(packet) < 40 { + return 0, false + } + return packet[6], true + } + return 0, false +} + +// GetDestPort returns destination port from TCP/UDP packet (fast path) +func GetDestPort(packet []byte) (uint16, bool) { + if len(packet) < 20 { + return 0, false + } + + version := packet[0] >> 4 + var headerLen int + + if version == 4 { + ihl := packet[0] & 0x0F + headerLen = int(ihl) * 4 + if len(packet) < headerLen+4 { + return 0, false + } + } else if version == 6 { + headerLen = 40 + if len(packet) < headerLen+4 { + return 0, false + } + } else { + return 0, false + } + + // Destination port is at bytes 2-3 of TCP/UDP header + port := binary.BigEndian.Uint16(packet[headerLen+2 : headerLen+4]) + return port, true +}