add ingress rules to peer update

This commit is contained in:
abhishek9686
2024-10-21 12:35:10 +04:00
parent 6b93163bd5
commit 7fa6580103
4 changed files with 26 additions and 12 deletions

View File

@@ -396,20 +396,29 @@ func ToggleExtClientConnectivity(client *models.ExtClient, enable bool) (models.
return newClient, nil
}
func GetExtPeers(node, peer *models.Node) ([]wgtypes.PeerConfig, []models.IDandAddr, []models.EgressNetworkRoutes, error) {
func GetExtPeers(node, peer *models.Node) ([]wgtypes.PeerConfig, []models.IDandAddr, []models.EgressNetworkRoutes, []net.IP, error) {
var peers []wgtypes.PeerConfig
var idsAndAddr []models.IDandAddr
var egressRoutes []models.EgressNetworkRoutes
var extUserIps []net.IP
extPeers, err := GetNetworkExtClients(node.Network)
if err != nil {
return peers, idsAndAddr, egressRoutes, err
return peers, idsAndAddr, egressRoutes, extUserIps, err
}
host, err := GetHost(node.HostID.String())
if err != nil {
return peers, idsAndAddr, egressRoutes, err
return peers, idsAndAddr, egressRoutes, extUserIps, err
}
for _, extPeer := range extPeers {
extPeer := extPeer
if extPeer.RemoteAccessClientID != "" {
if extPeer.AddressIPNet4().IP != nil {
extUserIps = append(extUserIps, extPeer.AddressIPNet4().IP)
}
if extPeer.AddressIPNet6().IP != nil {
extUserIps = append(extUserIps, extPeer.AddressIPNet6().IP)
}
}
if !IsClientNodeAllowed(&extPeer, peer.ID.String()) {
continue
}
@@ -479,7 +488,7 @@ func GetExtPeers(node, peer *models.Node) ([]wgtypes.PeerConfig, []models.IDandA
IsExtClient: true,
})
}
return peers, idsAndAddr, egressRoutes, nil
return peers, idsAndAddr, egressRoutes, extUserIps, nil
}

View File

@@ -74,7 +74,8 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
ServerVersion: servercfg.GetVersion(),
ServerAddrs: []models.ServerAddr{},
FwUpdate: models.FwUpdate{
EgressInfo: make(map[string]models.EgressInfo),
EgressInfo: make(map[string]models.EgressInfo),
IngressInfo: make(map[string]models.IngressInfo),
},
PeerIDs: make(models.PeerMap, 0),
Peers: []wgtypes.PeerConfig{},
@@ -287,9 +288,13 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
var extPeers []wgtypes.PeerConfig
var extPeerIDAndAddrs []models.IDandAddr
var egressRoutes []models.EgressNetworkRoutes
var extUserIps []net.IP
if node.IsIngressGateway {
extPeers, extPeerIDAndAddrs, egressRoutes, err = GetExtPeers(&node, &node)
extPeers, extPeerIDAndAddrs, egressRoutes, extUserIps, err = GetExtPeers(&node, &node)
if err == nil {
hostPeerUpdate.FwUpdate.IngressInfo[node.ID.String()] = models.IngressInfo{
UserIps: extUserIps,
}
hostPeerUpdate.EgressRoutes = append(hostPeerUpdate.EgressRoutes, egressRoutes...)
hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, extPeers...)
for _, extPeerIdAndAddr := range extPeerIDAndAddrs {
@@ -421,7 +426,7 @@ func GetAllowedIPs(node, peer *models.Node, metrics *models.Metrics) []net.IPNet
// handle ingress gateway peers
if peer.IsIngressGateway {
extPeers, _, _, err := GetExtPeers(peer, node)
extPeers, _, _, _, err := GetExtPeers(peer, node)
if err != nil {
logger.Log(2, "could not retrieve ext peers for ", peer.ID.String(), err.Error())
}

View File

@@ -28,8 +28,7 @@ type HostPeerUpdate struct {
// IngressInfo - struct for ingress info
type IngressInfo struct {
ExtPeers map[string]ExtClientInfo `json:"ext_peers" yaml:"ext_peers"`
EgressRanges []string `json:"egress_ranges" yaml:"egress_ranges"`
UserIps []net.IP
}
// EgressInfo - struct for egress info
@@ -77,8 +76,9 @@ type KeyUpdate struct {
// FwUpdate - struct for firewall updates
type FwUpdate struct {
IsEgressGw bool `json:"is_egress_gw"`
EgressInfo map[string]EgressInfo `json:"egress_info"`
IsEgressGw bool `json:"is_egress_gw"`
EgressInfo map[string]EgressInfo `json:"egress_info"`
IngressInfo map[string]IngressInfo `json:"ingress_info"`
}
// FailOverMeReq - struct for failover req

View File

@@ -148,7 +148,7 @@ func GetFailOverPeerIps(peer, node *models.Node) []net.IPNet {
}
// handle ingress gateway peers
if failOverpeer.IsIngressGateway {
extPeers, _, _, err := logic.GetExtPeers(&failOverpeer, node)
extPeers, _, _, _, err := logic.GetExtPeers(&failOverpeer, node)
if err != nil {
logger.Log(2, "could not retrieve ext peers for ", peer.ID.String(), err.Error())
}