Use normal udp

This commit is contained in:
Owen
2025-07-25 11:05:24 -07:00
parent 27561f52ca
commit f17dbe1fef

View File

@@ -766,25 +766,27 @@ func (s *WireGuardService) sendUDPHolePunch(serverAddr string) error {
return fmt.Errorf("failed to resolve server hostname") return fmt.Errorf("failed to resolve server hostname")
} }
// Get client IP based on route to server // Get client IP based on route to server for local binding
clientIP := network.GetClientIP(serverIPAddr.IP) clientIP := network.GetClientIP(serverIPAddr.IP)
// Create server and client configs // Create local UDP address using the same port as WireGuard
server := &network.Server{ localAddr := &net.UDPAddr{
Hostname: serverHostname, IP: clientIP,
Addr: serverIPAddr, Port: int(s.Port),
Port: uint16(serverPort),
} }
client := &network.PeerNet{ // Create remote server address
IP: clientIP, remoteAddr := &net.UDPAddr{
Port: s.Port, IP: serverIPAddr.IP,
NewtID: s.newtId, Port: int(serverPort),
} }
// Setup raw connection with BPF filtering // Create UDP connection bound to the same port as WireGuard
rawConn := network.SetupRawConn(server, client) conn, err := net.DialUDP("udp", localAddr, remoteAddr)
defer rawConn.Close() if err != nil {
return fmt.Errorf("failed to create UDP connection: %v", err)
}
defer conn.Close()
// Create JSON payload // Create JSON payload
payload := struct { payload := struct {
@@ -807,12 +809,20 @@ func (s *WireGuardService) sendUDPHolePunch(serverAddr string) error {
return fmt.Errorf("failed to encrypt payload: %v", err) return fmt.Errorf("failed to encrypt payload: %v", err)
} }
// Send the encrypted packet using the raw connection // Convert encrypted payload to JSON
err = network.SendDataPacket(encryptedPayload, rawConn, server, client) jsonData, err := json.Marshal(encryptedPayload)
if err != nil {
return fmt.Errorf("failed to marshal encrypted payload: %v", err)
}
// Send the encrypted packet using the UDP connection
_, err = conn.Write(jsonData)
if err != nil { if err != nil {
return fmt.Errorf("failed to send UDP packet: %v", err) return fmt.Errorf("failed to send UDP packet: %v", err)
} }
logger.Debug("Sent UDP hole punch to %s from port %d", remoteAddr.String(), s.Port)
return nil return nil
} }