mirror of
https://github.com/gravitl/netmaker.git
synced 2025-11-17 14:38:41 +08:00
add udp port for relay
This commit is contained in:
parent
c383ec0747
commit
3fca11c1df
1 changed files with 30 additions and 8 deletions
|
|
@ -24,13 +24,6 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|||
var peerUpdate models.PeerUpdate
|
||||
var peers []wgtypes.PeerConfig
|
||||
var serverNodeAddresses = []models.ServerAddr{}
|
||||
currentPeers, err := GetNetworkNodes(node.Network)
|
||||
if err != nil {
|
||||
return models.PeerUpdate{}, err
|
||||
}
|
||||
if node.IsRelayed == "yes" {
|
||||
return GetPeerUpdateForRelayedNode(node)
|
||||
}
|
||||
|
||||
// udppeers = the peers parsed from the local interface
|
||||
// gives us correct port to reach
|
||||
|
|
@ -39,6 +32,15 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|||
logger.Log(2, errN.Error())
|
||||
}
|
||||
|
||||
currentPeers, err := GetNetworkNodes(node.Network)
|
||||
if err != nil {
|
||||
return models.PeerUpdate{}, err
|
||||
}
|
||||
|
||||
if node.IsRelayed == "yes" {
|
||||
return GetPeerUpdateForRelayedNode(node, udppeers)
|
||||
}
|
||||
|
||||
// #1 Set Keepalive values: set_keepalive
|
||||
// #2 Set local address: set_local - could be a LOT BETTER and fix some bugs with additional logic
|
||||
// #3 Set allowedips: set_allowedips
|
||||
|
|
@ -342,7 +344,7 @@ func getPeerDNS(network string) string {
|
|||
|
||||
// GetPeerUpdateForRelayedNode - calculates peer update for a relayed node by getting the relay
|
||||
// copying the relay node's allowed ips and making appropriate substitutions
|
||||
func GetPeerUpdateForRelayedNode(node *models.Node) (models.PeerUpdate, error) {
|
||||
func GetPeerUpdateForRelayedNode(node *models.Node, udppeers map[string]string) (models.PeerUpdate, error) {
|
||||
var peerUpdate models.PeerUpdate
|
||||
var peers []wgtypes.PeerConfig
|
||||
var serverNodeAddresses = []models.ServerAddr{}
|
||||
|
|
@ -352,6 +354,7 @@ func GetPeerUpdateForRelayedNode(node *models.Node) (models.PeerUpdate, error) {
|
|||
if relay == nil {
|
||||
return models.PeerUpdate{}, errors.New("not found")
|
||||
}
|
||||
|
||||
//add relay to lists of allowed ip
|
||||
if relay.Address != "" {
|
||||
relayIP := net.IPNet{
|
||||
|
|
@ -403,6 +406,25 @@ func GetPeerUpdateForRelayedNode(node *models.Node) (models.PeerUpdate, error) {
|
|||
if err != nil {
|
||||
return models.PeerUpdate{}, err
|
||||
}
|
||||
var setUDPPort = false
|
||||
if relay.UDPHolePunch == "yes" && CheckEndpoint(udppeers[relay.PublicKey]) {
|
||||
endpointstring := udppeers[relay.PublicKey]
|
||||
endpointarr := strings.Split(endpointstring, ":")
|
||||
if len(endpointarr) == 2 {
|
||||
port, err := strconv.Atoi(endpointarr[1])
|
||||
if err == nil {
|
||||
setUDPPort = true
|
||||
relay.ListenPort = int32(port)
|
||||
}
|
||||
}
|
||||
}
|
||||
// if udp hole punching is on, but udp hole punching did not set it, use the LocalListenPort instead
|
||||
// or, if port is for some reason zero use the LocalListenPort
|
||||
// but only do this if LocalListenPort is not zero
|
||||
if ((relay.UDPHolePunch == "yes" && !setUDPPort) || relay.ListenPort == 0) && relay.LocalListenPort != 0 {
|
||||
relay.ListenPort = relay.LocalListenPort
|
||||
}
|
||||
|
||||
endpoint := relay.Endpoint + ":" + strconv.FormatInt(int64(relay.ListenPort), 10)
|
||||
address, err := net.ResolveUDPAddr("udp", endpoint)
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue