Explorar el Código

channel internet traffic of relayed node to relay's inetgw

abhishek9686 hace 1 año
padre
commit
991a1e2188
Se han modificado 5 ficheros con 32 adiciones y 30 borrados
  1. 1 1
      controllers/ext_client.go
  2. 6 4
      logic/peers.go
  3. 1 1
      pro/initialize.go
  4. 21 24
      pro/logic/nodes.go
  5. 3 0
      pro/logic/relays.go

+ 1 - 1
controllers/ext_client.go

@@ -218,7 +218,7 @@ func getExtClientConf(w http.ResponseWriter, r *http.Request) {
 		gwendpoint = fmt.Sprintf("%s:%d", host.EndpointIP.String(), host.ListenPort)
 	}
 	var newAllowedIPs string
-	if logic.IsInternetGw(gwnode) {
+	if logic.IsInternetGw(gwnode) || gwnode.InternetGwID != "" {
 		egressrange := "0.0.0.0/0"
 		if gwnode.Address6.IP != nil && client.Address6 != "" {
 			egressrange += "," + "::/0"

+ 6 - 4
logic/peers.go

@@ -37,6 +37,9 @@ var (
 	SetDefaultGw = func(node models.Node, peerUpdate models.HostPeerUpdate) models.HostPeerUpdate {
 		return peerUpdate
 	}
+	SetDefaultGwForRelayedUpdate = func(relayed, relay models.Node, peerUpdate models.HostPeerUpdate) models.HostPeerUpdate {
+		return peerUpdate
+	}
 	// UnsetInternetGw
 	UnsetInternetGw = func(node *models.Node) {
 		node.IsInternetGateway = false
@@ -49,10 +52,6 @@ var (
 	GetAllowedIpForInetNodeClient = func(node, peer *models.Node) []net.IPNet {
 		return []net.IPNet{}
 	}
-	// GetAllowedIpForInetPeerClient
-	GetAllowedIpForInetPeerClient = func(peer *models.Node) []net.IPNet {
-		return []net.IPNet{}
-	}
 )
 
 // GetPeerUpdateForHost - gets the consolidated peer update for the host from all networks
@@ -185,6 +184,9 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 					peerIndexMap[peerHost.PublicKey.String()] = len(hostPeerUpdate.Peers) - 1
 					continue
 				}
+				if node.IsRelayed && node.RelayedBy == peer.ID.String() {
+					SetDefaultGwForRelayedUpdate(node, peer, hostPeerUpdate)
+				}
 			}
 
 			uselocal := false

+ 1 - 1
pro/initialize.go

@@ -103,10 +103,10 @@ func InitPro() {
 	logic.RelayUpdates = proLogic.RelayUpdates
 	logic.GetTrialEndDate = getTrialEndDate
 	logic.SetDefaultGw = proLogic.SetDefaultGw
+	logic.SetDefaultGwForRelayedUpdate = proLogic.SetDefaultGwForRelayedUpdate
 	logic.UnsetInternetGw = proLogic.UnsetInternetGw
 	logic.SetInternetGw = proLogic.SetInternetGw
 	logic.GetAllowedIpForInetNodeClient = proLogic.GetAllowedIpForInetNodeClient
-	logic.GetAllowedIpForInetPeerClient = proLogic.GetAllowedIpForInetPeerClient
 	mq.UpdateMetrics = proLogic.MQUpdateMetrics
 	mq.UpdateMetricsFallBack = proLogic.MQUpdateMetricsFallBack
 }

+ 21 - 24
pro/logic/nodes.go

@@ -77,6 +77,27 @@ func UnsetInternetGw(node *models.Node) {
 
 }
 
+func SetDefaultGwForRelayedUpdate(relayed, relay models.Node, peerUpdate models.HostPeerUpdate) models.HostPeerUpdate {
+	if relay.InternetGwID != "" {
+		relayHost, err := logic.GetHost(relay.HostID.String())
+		if err != nil {
+			return peerUpdate
+		}
+		peerUpdate.ChangeDefaultGw = true
+		peerUpdate.DefaultGwIp = relay.Address.IP
+		mask := 32
+		if relayHost.EndpointIP.To4() == nil {
+			mask = 128
+		}
+		_, cidr, err := net.ParseCIDR(fmt.Sprintf("%s/%d", relayHost.EndpointIP.String(), mask))
+		if err != nil {
+			return peerUpdate
+		}
+		peerUpdate.DefaultGwEndpoint = *cidr
+	}
+	return peerUpdate
+}
+
 func SetDefaultGw(node models.Node, peerUpdate models.HostPeerUpdate) models.HostPeerUpdate {
 	if node.InternetGwID != "" {
 
@@ -124,27 +145,3 @@ func GetAllowedIpForInetNodeClient(node, peer *models.Node) []net.IPNet {
 	_, ipnet, _ := net.ParseCIDR("0.0.0.0/0")
 	return []net.IPNet{*ipnet}
 }
-
-// GetAllowedIpForInetPeerClient - get allowedips for inet gw peer
-func GetAllowedIpForInetPeerClient(peer *models.Node) (allowedips []net.IPNet) {
-	for _, peerID := range peer.InetNodeReq.InetNodeClientIDs {
-		peerI, err := logic.GetNodeByID(peerID)
-		if err == nil {
-			if peerI.Address.IP != nil {
-				allowed := net.IPNet{
-					IP:   peerI.Address.IP,
-					Mask: net.CIDRMask(32, 32),
-				}
-				allowedips = append(allowedips, allowed)
-			}
-			if peerI.Address6.IP != nil {
-				allowed := net.IPNet{
-					IP:   peerI.Address6.IP,
-					Mask: net.CIDRMask(128, 128),
-				}
-				allowedips = append(allowedips, allowed)
-			}
-		}
-	}
-	return
-}

+ 3 - 0
pro/logic/relays.go

@@ -208,6 +208,9 @@ func GetAllowedIpsForRelayed(relayed, relay *models.Node) (allowedIPs []net.IPNe
 		logger.Log(0, "RelayedByRelay called with invalid parameters")
 		return
 	}
+	if relay.InternetGwID != "" {
+		return GetAllowedIpForInetNodeClient(relayed, relay)
+	}
 	peers, err := logic.GetNetworkNodes(relay.Network)
 	if err != nil {
 		logger.Log(0, "error getting network clients", err.Error())