mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
30 lines
720 B
Go
30 lines
720 B
Go
package tcp
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/pires/go-proxyproto"
|
|
)
|
|
|
|
// writeProxyProtoV2 sends a PROXY protocol v2 header to the backend connection,
|
|
// conveying the real client address.
|
|
func writeProxyProtoV2(client, backend net.Conn) error {
|
|
tp := proxyproto.TCPv4
|
|
if addr, ok := client.RemoteAddr().(*net.TCPAddr); ok && addr.IP.To4() == nil {
|
|
tp = proxyproto.TCPv6
|
|
}
|
|
|
|
header := &proxyproto.Header{
|
|
Version: 2,
|
|
Command: proxyproto.PROXY,
|
|
TransportProtocol: tp,
|
|
SourceAddr: client.RemoteAddr(),
|
|
DestinationAddr: client.LocalAddr(),
|
|
}
|
|
if _, err := header.WriteTo(backend); err != nil {
|
|
return fmt.Errorf("write PROXY protocol v2 header: %w", err)
|
|
}
|
|
return nil
|
|
}
|