mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 16:57:51 +08:00
added egress relayed addrs to relayed nodes
This commit is contained in:
@@ -12,7 +12,7 @@ import (
|
|||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
//setting dev by default
|
// setting dev by default
|
||||||
func getEnv() string {
|
func getEnv() string {
|
||||||
|
|
||||||
env := os.Getenv("NETMAKER_ENV")
|
env := os.Getenv("NETMAKER_ENV")
|
||||||
@@ -27,13 +27,13 @@ func getEnv() string {
|
|||||||
// Config : application config stored as global variable
|
// Config : application config stored as global variable
|
||||||
var Config *EnvironmentConfig
|
var Config *EnvironmentConfig
|
||||||
|
|
||||||
// EnvironmentConfig :
|
// EnvironmentConfig - environment conf struct
|
||||||
type EnvironmentConfig struct {
|
type EnvironmentConfig struct {
|
||||||
Server ServerConfig `yaml:"server"`
|
Server ServerConfig `yaml:"server"`
|
||||||
SQL SQLConfig `yaml:"sql"`
|
SQL SQLConfig `yaml:"sql"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServerConfig :
|
// ServerConfig - server conf struct
|
||||||
type ServerConfig struct {
|
type ServerConfig struct {
|
||||||
CoreDNSAddr string `yaml:"corednsaddr"`
|
CoreDNSAddr string `yaml:"corednsaddr"`
|
||||||
APIConnString string `yaml:"apiconn"`
|
APIConnString string `yaml:"apiconn"`
|
||||||
@@ -58,8 +58,8 @@ type ServerConfig struct {
|
|||||||
Version string `yaml:"version"`
|
Version string `yaml:"version"`
|
||||||
SQLConn string `yaml:"sqlconn"`
|
SQLConn string `yaml:"sqlconn"`
|
||||||
Platform string `yaml:"platform"`
|
Platform string `yaml:"platform"`
|
||||||
Database string `yaml:database`
|
Database string `yaml:"database"`
|
||||||
CheckinInterval string `yaml:checkininterval`
|
CheckinInterval string `yaml:"checkininterval"`
|
||||||
DefaultNodeLimit int32 `yaml:"defaultnodelimit"`
|
DefaultNodeLimit int32 `yaml:"defaultnodelimit"`
|
||||||
Verbosity int32 `yaml:"verbosity"`
|
Verbosity int32 `yaml:"verbosity"`
|
||||||
ServerCheckinInterval int64 `yaml:"servercheckininterval"`
|
ServerCheckinInterval int64 `yaml:"servercheckininterval"`
|
||||||
@@ -71,7 +71,7 @@ type ServerConfig struct {
|
|||||||
AzureTenant string `yaml:"azuretenant"`
|
AzureTenant string `yaml:"azuretenant"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generic SQL Config
|
// SQLConfig - Generic SQL Config
|
||||||
type SQLConfig struct {
|
type SQLConfig struct {
|
||||||
Host string `yaml:"host"`
|
Host string `yaml:"host"`
|
||||||
Port int32 `yaml:"port"`
|
Port int32 `yaml:"port"`
|
||||||
@@ -81,7 +81,7 @@ type SQLConfig struct {
|
|||||||
SSLMode string `yaml:"sslmode"`
|
SSLMode string `yaml:"sslmode"`
|
||||||
}
|
}
|
||||||
|
|
||||||
//reading in the env file
|
// reading in the env file
|
||||||
func readConfig() *EnvironmentConfig {
|
func readConfig() *EnvironmentConfig {
|
||||||
file := fmt.Sprintf("config/environments/%s.yaml", getEnv())
|
file := fmt.Sprintf("config/environments/%s.yaml", getEnv())
|
||||||
f, err := os.Open(file)
|
f, err := os.Open(file)
|
||||||
|
@@ -184,26 +184,18 @@ func GetNode(macaddress string, network string) (models.Node, error) {
|
|||||||
// GetNodePeers - fetches peers for a given node
|
// GetNodePeers - fetches peers for a given node
|
||||||
func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error) {
|
func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error) {
|
||||||
var peers []models.Node
|
var peers []models.Node
|
||||||
collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
|
var networkNodes, egressNetworkNodes, err = getNetworkEgressAndNodes(networkName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if database.IsEmptyRecord(err) {
|
return peers, nil
|
||||||
return peers, nil
|
|
||||||
}
|
|
||||||
logger.Log(2, err.Error())
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
udppeers, errN := database.GetPeers(networkName)
|
udppeers, errN := database.GetPeers(networkName)
|
||||||
if errN != nil {
|
if errN != nil {
|
||||||
logger.Log(2, errN.Error())
|
logger.Log(2, errN.Error())
|
||||||
}
|
}
|
||||||
for _, value := range collection {
|
|
||||||
var node = &models.Node{}
|
for _, node := range networkNodes {
|
||||||
var peer = models.Node{}
|
var peer = models.Node{}
|
||||||
err := json.Unmarshal([]byte(value), node)
|
|
||||||
if err != nil {
|
|
||||||
logger.Log(2, err.Error())
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if node.IsEgressGateway == "yes" { // handle egress stuff
|
if node.IsEgressGateway == "yes" { // handle egress stuff
|
||||||
peer.EgressGatewayRanges = node.EgressGatewayRanges
|
peer.EgressGatewayRanges = node.EgressGatewayRanges
|
||||||
peer.IsEgressGateway = node.IsEgressGateway
|
peer.IsEgressGateway = node.IsEgressGateway
|
||||||
@@ -211,7 +203,7 @@ func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error
|
|||||||
allow := node.IsRelayed != "yes" || !excludeRelayed
|
allow := node.IsRelayed != "yes" || !excludeRelayed
|
||||||
|
|
||||||
if node.Network == networkName && node.IsPending != "yes" && allow {
|
if node.Network == networkName && node.IsPending != "yes" && allow {
|
||||||
peer = setPeerInfo(node)
|
peer = setPeerInfo(&node)
|
||||||
if node.UDPHolePunch == "yes" && errN == nil && CheckEndpoint(udppeers[node.PublicKey]) {
|
if node.UDPHolePunch == "yes" && errN == nil && CheckEndpoint(udppeers[node.PublicKey]) {
|
||||||
endpointstring := udppeers[node.PublicKey]
|
endpointstring := udppeers[node.PublicKey]
|
||||||
endpointarr := strings.Split(endpointstring, ":")
|
endpointarr := strings.Split(endpointstring, ":")
|
||||||
@@ -230,6 +222,11 @@ func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error
|
|||||||
} else {
|
} else {
|
||||||
peer.AllowedIPs = append(peer.AllowedIPs, node.RelayAddrs...)
|
peer.AllowedIPs = append(peer.AllowedIPs, node.RelayAddrs...)
|
||||||
}
|
}
|
||||||
|
for _, egressNode := range egressNetworkNodes {
|
||||||
|
if egressNode.IsRelayed == "yes" && StringSliceContains(node.RelayAddrs, egressNode.Address) {
|
||||||
|
peer.AllowedIPs = append(peer.AllowedIPs, egressNode.EgressGatewayRanges...)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
peers = append(peers, peer)
|
peers = append(peers, peer)
|
||||||
}
|
}
|
||||||
@@ -286,6 +283,34 @@ func RandomString(length int) string {
|
|||||||
|
|
||||||
// == Private Methods ==
|
// == Private Methods ==
|
||||||
|
|
||||||
|
func getNetworkEgressAndNodes(networkName string) ([]models.Node, []models.Node, error) {
|
||||||
|
var networkNodes, egressNetworkNodes []models.Node
|
||||||
|
collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
|
||||||
|
if err != nil {
|
||||||
|
if database.IsEmptyRecord(err) {
|
||||||
|
return networkNodes, egressNetworkNodes, nil
|
||||||
|
}
|
||||||
|
logger.Log(2, err.Error())
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, value := range collection {
|
||||||
|
var node = models.Node{}
|
||||||
|
err := json.Unmarshal([]byte(value), &node)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(2, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if node.Network == networkName {
|
||||||
|
networkNodes = append(networkNodes, node)
|
||||||
|
if node.IsEgressGateway == "yes" {
|
||||||
|
egressNetworkNodes = append(egressNetworkNodes, node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return networkNodes, egressNetworkNodes, nil
|
||||||
|
}
|
||||||
|
|
||||||
func setPeerInfo(node *models.Node) models.Node {
|
func setPeerInfo(node *models.Node) models.Node {
|
||||||
var peer models.Node
|
var peer models.Node
|
||||||
peer.RelayAddrs = node.RelayAddrs
|
peer.RelayAddrs = node.RelayAddrs
|
||||||
@@ -326,3 +351,13 @@ func setIPForwardingLinux() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StringSliceContains - sees if a string slice contains a string element
|
||||||
|
func StringSliceContains(slice []string, item string) bool {
|
||||||
|
for _, s := range slice {
|
||||||
|
if s == item {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user