mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-11 15:44:52 +08:00
sync peers updates with proxy
This commit is contained in:
parent
474bd14e36
commit
17e05d430b
6 changed files with 75 additions and 22 deletions
|
@ -3,6 +3,7 @@ package controller
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
|
@ -14,8 +15,10 @@ import (
|
|||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/models/promodels"
|
||||
"github.com/gravitl/netmaker/mq"
|
||||
"github.com/gravitl/netmaker/nm-proxy/manager"
|
||||
"github.com/gravitl/netmaker/servercfg"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||
)
|
||||
|
||||
func nodeHandlers(r *mux.Router) {
|
||||
|
@ -1012,6 +1015,24 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
|
|||
if servercfg.IsDNSMode() {
|
||||
logic.SetDNS()
|
||||
}
|
||||
wgPubKey, wgErr := wgtypes.ParseKey(newNode.PublicKey)
|
||||
nodeEndpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", newNode.Endpoint, newNode.LocalListenPort))
|
||||
if wgErr == nil && udpErr == nil {
|
||||
logic.ProxyMgmChan <- &manager.ManagerAction{
|
||||
Action: manager.UpdatePeer,
|
||||
Payload: manager.ManagerPayload{
|
||||
InterfaceName: newNode.Interface,
|
||||
Peers: []wgtypes.PeerConfig{
|
||||
{
|
||||
PublicKey: wgPubKey,
|
||||
Endpoint: nodeEndpoint,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
} else {
|
||||
logger.Log(1, fmt.Sprintf("failed to send node update to proxy, wgErr: %v, udpErr: %v", wgErr, udpErr))
|
||||
}
|
||||
|
||||
logger.Log(1, r.Header.Get("user"), "updated node", node.ID, "on network", node.Network)
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
@ -1100,7 +1121,20 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
|||
logger.Log(0, "failed to reset failover lists during node delete for node", node.Name, node.Network)
|
||||
}
|
||||
}
|
||||
|
||||
wgKey, _ := wgtypes.ParseKey(node.PublicKey)
|
||||
endpoint, _ := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", node.Endpoint, node.LocalListenPort))
|
||||
logic.ProxyMgmChan <- &manager.ManagerAction{
|
||||
Action: manager.DeletePeer,
|
||||
Payload: manager.ManagerPayload{
|
||||
InterfaceName: node.Interface,
|
||||
Peers: []wgtypes.PeerConfig{
|
||||
{
|
||||
PublicKey: wgKey,
|
||||
Endpoint: endpoint,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
logic.ReturnSuccessResponse(w, r, nodeid+" deleted.")
|
||||
logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"])
|
||||
runUpdates(&node, false)
|
||||
|
|
|
@ -3,6 +3,7 @@ package logic
|
|||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -31,6 +32,7 @@ func GetPeersForProxy(node *models.Node) ([]wgtypes.PeerConfig, error) {
|
|||
//skip yourself
|
||||
continue
|
||||
}
|
||||
log.Printf("----------> PEER: %s, Endpoint: %s, LocalPort: %d", peer.ID, peer.Endpoint, peer.LocalListenPort)
|
||||
pubkey, err := wgtypes.ParseKey(peer.PublicKey)
|
||||
if err != nil {
|
||||
logger.Log(1, "failed to parse node pub key: ", peer.ID)
|
||||
|
@ -47,6 +49,7 @@ func GetPeersForProxy(node *models.Node) ([]wgtypes.PeerConfig, error) {
|
|||
// set_keepalive
|
||||
keepalive, _ = time.ParseDuration(strconv.FormatInt(int64(node.PersistentKeepalive), 10) + "s")
|
||||
}
|
||||
log.Printf("---------->##### PEER: %s, Endpoint: %s, LocalPort: %d", peer.ID, endpoint, peer.LocalListenPort)
|
||||
peers = append(peers, wgtypes.PeerConfig{
|
||||
PublicKey: pubkey,
|
||||
Endpoint: endpoint,
|
||||
|
|
|
@ -19,7 +19,6 @@ import (
|
|||
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||
)
|
||||
|
||||
var ProxyStatus = "OFF"
|
||||
var ProxyMgmChan = make(chan *manager.ManagerAction, 100)
|
||||
|
||||
// EnterpriseCheckFuncs - can be set to run functions for EE
|
||||
|
@ -176,7 +175,7 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) {
|
|||
if err != nil {
|
||||
return returnNode, err
|
||||
}
|
||||
|
||||
logger.Log(0, "--------> Hereeeeeee23333")
|
||||
ProxyMgmChan <- &manager.ManagerAction{
|
||||
Action: manager.AddInterface,
|
||||
Payload: manager.ManagerPayload{
|
||||
|
|
|
@ -139,22 +139,41 @@ func setWGConfig(node *models.Node, peerupdate bool) error {
|
|||
if peerupdate {
|
||||
if err := wireguard.SetPeers(node.Interface, node, peers.Peers); err != nil {
|
||||
logger.Log(0, "error updating peers", err.Error())
|
||||
return err
|
||||
}
|
||||
// logger.Log(0, "--------> UPDATE PEERS IN PROXY.....")
|
||||
// ProxyMgmChan <- &manager.ManagerAction{
|
||||
// Action: manager.UpdatePeer,
|
||||
// Payload: manager.ManagerPayload{
|
||||
// InterfaceName: node.Interface,
|
||||
// Peers: peers.Peers,
|
||||
// },
|
||||
// }
|
||||
|
||||
logger.Log(2, "updated peers on server", node.Name)
|
||||
} else {
|
||||
err = wireguard.InitWireguard(node, privkey, peers.Peers)
|
||||
if err != nil {
|
||||
logger.Log(0, "failed to set wg config on server: ", node.Name, err.Error())
|
||||
return err
|
||||
}
|
||||
logger.Log(3, "finished setting wg config on server", node.Name)
|
||||
|
||||
}
|
||||
if ProxyStatus == "ON" {
|
||||
logger.Log(0, "--------> ADD INTERFACE TO PROXY.....")
|
||||
peersP, err := GetPeersForProxy(node)
|
||||
if err != nil {
|
||||
logger.Log(0, "failed to get peers for proxy: ", err.Error())
|
||||
} else {
|
||||
ProxyMgmChan <- &manager.ManagerAction{
|
||||
Action: manager.AddInterface,
|
||||
Payload: manager.ManagerPayload{
|
||||
InterfaceName: node.Interface,
|
||||
Peers: peers.Peers,
|
||||
Peers: peersP,
|
||||
},
|
||||
}
|
||||
}
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
func setWGKeyConfig(node *models.Node) error {
|
||||
|
|
|
@ -104,27 +104,24 @@ func UpdateNode(client mqtt.Client, msg mqtt.Message) {
|
|||
if err = PublishPeerUpdate(¤tNode, true); err != nil {
|
||||
logger.Log(0, "error updating peers when node", currentNode.Name, currentNode.ID, "informed the server of an interface change", err.Error())
|
||||
}
|
||||
pubKey, err := wgtypes.ParseKey(newNode.PublicKey)
|
||||
if err == nil {
|
||||
endpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", newNode.Endpoint, newNode.LocalListenPort))
|
||||
if err == nil {
|
||||
logic.ProxyMgmChan <- &manager.ManagerAction{
|
||||
Action: manager.UpdatePeer,
|
||||
Payload: manager.ManagerPayload{
|
||||
InterfaceName: newNode.Interface,
|
||||
Peers: []wgtypes.PeerConfig{
|
||||
{
|
||||
PublicKey: pubKey,
|
||||
Endpoint: endpoint,
|
||||
},
|
||||
pubKey, wgErr := wgtypes.ParseKey(newNode.PublicKey)
|
||||
endpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", newNode.Endpoint, newNode.LocalListenPort))
|
||||
if wgErr == nil && udpErr == nil {
|
||||
logic.ProxyMgmChan <- &manager.ManagerAction{
|
||||
Action: manager.UpdatePeer,
|
||||
Payload: manager.ManagerPayload{
|
||||
InterfaceName: newNode.Interface,
|
||||
Peers: []wgtypes.PeerConfig{
|
||||
{
|
||||
PublicKey: pubKey,
|
||||
Endpoint: endpoint,
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
logger.Log(1, "updated node", id, newNode.Name)
|
||||
}()
|
||||
}
|
||||
|
|
|
@ -87,6 +87,7 @@ func SyncServerNetworkWithProxy() error {
|
|||
logger.Log(1, "failed to retrieve peers for server node: ", serverNode.ID)
|
||||
continue
|
||||
}
|
||||
logger.Log(0, "----> HEREEEEEEEE1")
|
||||
logic.ProxyMgmChan <- &manager.ManagerAction{
|
||||
Action: manager.AddInterface,
|
||||
Payload: manager.ManagerPayload{
|
||||
|
|
Loading…
Add table
Reference in a new issue