mirror of
https://github.com/fosrl/newt.git
synced 2026-03-06 10:46:40 +00:00
Use normal udp
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user