mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-07 17:51:56 +08:00
adding gateway routes for peers
This commit is contained in:
@@ -12,6 +12,17 @@ import (
|
||||
|
||||
// SetPeerRoutes - sets/removes ip routes for each peer on a network
|
||||
func SetPeerRoutes(iface string, oldPeers map[string]bool, newPeers []wgtypes.PeerConfig) {
|
||||
|
||||
// get the default route
|
||||
var hasRoute bool
|
||||
gwIP, gwIface, err := GetDefaultRoute()
|
||||
if err != nil {
|
||||
logger.Log(0, "error getting default route:", err.Error())
|
||||
}
|
||||
if gwIP != "" && gwIface != "" && err == nil {
|
||||
hasRoute = true
|
||||
}
|
||||
|
||||
// traverse through all recieved peers
|
||||
for _, peer := range newPeers {
|
||||
for _, allowedIP := range peer.AllowedIPs {
|
||||
@@ -23,6 +34,13 @@ func SetPeerRoutes(iface string, oldPeers map[string]bool, newPeers []wgtypes.Pe
|
||||
delete(oldPeers, allowedIP.String())
|
||||
}
|
||||
}
|
||||
if hasRoute && !ncutils.IpIsPrivate(peer.Endpoint.IP) {
|
||||
ipNet, err := ncutils.GetIPNetFromString(peer.Endpoint.IP.String())
|
||||
if err != nil {
|
||||
logger.Log(0, "error parsing ip:", err.Error())
|
||||
}
|
||||
setRoute(gwIface, &ipNet, gwIP)
|
||||
}
|
||||
}
|
||||
// traverse through all remaining existing peers
|
||||
for i := range oldPeers {
|
||||
@@ -37,19 +55,55 @@ func SetPeerRoutes(iface string, oldPeers map[string]bool, newPeers []wgtypes.Pe
|
||||
|
||||
// SetCurrentPeerRoutes - sets all the current peers
|
||||
func SetCurrentPeerRoutes(iface, currentAddr string, peers []wgtypes.PeerConfig) {
|
||||
|
||||
// get the default route
|
||||
var hasRoute bool
|
||||
gwIP, gwIface, err := GetDefaultRoute()
|
||||
if err != nil {
|
||||
logger.Log(0, "error getting default route:", err.Error())
|
||||
}
|
||||
if gwIP != "" && gwIface != "" && err == nil {
|
||||
hasRoute = true
|
||||
}
|
||||
|
||||
// traverse through all recieved peers
|
||||
for _, peer := range peers {
|
||||
for _, allowedIP := range peer.AllowedIPs {
|
||||
setRoute(iface, &allowedIP, currentAddr)
|
||||
}
|
||||
if hasRoute && !ncutils.IpIsPrivate(peer.Endpoint.IP) {
|
||||
ipNet, err := ncutils.GetIPNetFromString(peer.Endpoint.IP.String())
|
||||
if err != nil {
|
||||
logger.Log(0, "error parsing ip:", err.Error())
|
||||
}
|
||||
setRoute(gwIface, &ipNet, gwIP)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FlushPeerRoutes - removes all current peer routes
|
||||
func FlushPeerRoutes(iface, currentAddr string, peers []wgtypes.Peer) {
|
||||
// get the default route
|
||||
var hasRoute bool
|
||||
gwIP, gwIface, err := GetDefaultRoute()
|
||||
if err != nil {
|
||||
logger.Log(0, "error getting default route:", err.Error())
|
||||
}
|
||||
if gwIP != "" && gwIface != "" && err == nil {
|
||||
hasRoute = true
|
||||
}
|
||||
|
||||
for _, peer := range peers {
|
||||
for _, allowedIP := range peer.AllowedIPs {
|
||||
deleteRoute(iface, &allowedIP, currentAddr)
|
||||
}
|
||||
if hasRoute && !ncutils.IpIsPrivate(peer.Endpoint.IP) {
|
||||
ipNet, err := ncutils.GetIPNetFromString(peer.Endpoint.IP.String())
|
||||
if err != nil {
|
||||
logger.Log(0, "error parsing ip:", err.Error())
|
||||
}
|
||||
deleteRoute(gwIface, &ipNet, gwIP)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user