28 lines
564 B
Go
28 lines
564 B
Go
|
package ingress
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"net"
|
||
|
)
|
||
|
|
||
|
type UDPProxy struct {
|
||
|
io.ReadWriteCloser
|
||
|
}
|
||
|
|
||
|
func DialUDP(dstIP net.IP, dstPort uint16) (*UDPProxy, error) {
|
||
|
dstAddr := &net.UDPAddr{
|
||
|
IP: dstIP,
|
||
|
Port: int(dstPort),
|
||
|
}
|
||
|
|
||
|
// We use nil as local addr to force runtime to find the best suitable local address IP given the destination
|
||
|
// address as context.
|
||
|
udpConn, err := net.DialUDP("udp", nil, dstAddr)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("unable to create UDP proxy to origin (%v:%v): %w", dstIP, dstPort, err)
|
||
|
}
|
||
|
|
||
|
return &UDPProxy{udpConn}, nil
|
||
|
}
|