mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 08:47:35 +08:00
remote route on delete
This commit is contained in:
@@ -29,10 +29,14 @@ func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.Object) (*
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
node.NetworkSettings, err = logic.GetNetworkSettings(node.Network)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
node.SetLastCheckIn()
|
||||
// Cast to ReadNodeRes type
|
||||
nodeData, err := json.Marshal(&node)
|
||||
if err != nil {
|
||||
nodeData, errN := json.Marshal(&node)
|
||||
if errN != nil {
|
||||
return nil, err
|
||||
}
|
||||
logic.UpdateNode(&node, &node)
|
||||
@@ -75,7 +79,14 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodeData, err := json.Marshal(&node)
|
||||
node.NetworkSettings, err = logic.GetNetworkSettings(node.Network)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodeData, errN := json.Marshal(&node)
|
||||
if errN != nil {
|
||||
return nil, err
|
||||
}
|
||||
// return the node in a CreateNodeRes type
|
||||
response := &nodepb.Object{
|
||||
Data: string(nodeData),
|
||||
@@ -107,10 +118,14 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodeData, err := json.Marshal(&newnode)
|
||||
newnode.NetworkSettings, err = logic.GetNetworkSettings(node.Network)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodeData, errN := json.Marshal(&newnode)
|
||||
if errN != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &nodepb.Object{
|
||||
Data: string(nodeData),
|
||||
Type: nodepb.NODE_TYPE,
|
||||
|
@@ -51,6 +51,21 @@ func GetParentNetwork(networkname string) (models.Network, error) {
|
||||
return network, nil
|
||||
}
|
||||
|
||||
// GetParentNetwork - get parent network
|
||||
func GetNetworkSettings(networkname string) (models.Network, error) {
|
||||
|
||||
var network models.Network
|
||||
networkData, err := database.FetchRecord(database.NETWORKS_TABLE_NAME, networkname)
|
||||
if err != nil {
|
||||
return network, err
|
||||
}
|
||||
if err = json.Unmarshal([]byte(networkData), &network); err != nil {
|
||||
return models.Network{}, err
|
||||
}
|
||||
network.AccessKeys = []models.AccessKey{}
|
||||
return network, nil
|
||||
}
|
||||
|
||||
// UniqueAddress - see if address is unique
|
||||
func UniqueAddress(networkName string) (string, error) {
|
||||
|
||||
|
@@ -31,7 +31,7 @@ type Node struct {
|
||||
Address6 string `json:"address6" bson:"address6" yaml:"address6" validate:"omitempty,ipv6"`
|
||||
LocalAddress string `json:"localaddress" bson:"localaddress" yaml:"localaddress" validate:"omitempty,ip"`
|
||||
Name string `json:"name" bson:"name" yaml:"name" validate:"omitempty,max=32,in_charset"`
|
||||
NetworkSettings Network `json:"networksettings" bson:"networksettings" yaml:"networksettings"`
|
||||
NetworkSettings Network `json:"networksettings" bson:"networksettings" yaml:"networksettings" validate:"-"`
|
||||
ListenPort int32 `json:"listenport" bson:"listenport" yaml:"listenport" validate:"omitempty,numeric,min=1024,max=65535"`
|
||||
PublicKey string `json:"publickey" bson:"publickey" yaml:"publickey" validate:"required,base64"`
|
||||
Endpoint string `json:"endpoint" bson:"endpoint" yaml:"endpoint" validate:"required,ip"`
|
||||
@@ -205,7 +205,7 @@ func (node *Node) SetDefaultName() {
|
||||
}
|
||||
}
|
||||
|
||||
func (newNode *Node) Fill(currentNode *Node, nodeNetwork *Network) {
|
||||
func (newNode *Node) Fill(currentNode *Node) {
|
||||
if newNode.ID == "" {
|
||||
newNode.ID = currentNode.ID
|
||||
}
|
||||
@@ -351,7 +351,6 @@ func (newNode *Node) Fill(currentNode *Node, nodeNetwork *Network) {
|
||||
if newNode.IsRelayed == "" {
|
||||
newNode.IsRelayed = currentNode.IsRelayed
|
||||
}
|
||||
newNode.NetworkSettings = *nodeNetwork
|
||||
}
|
||||
|
||||
func StringWithCharset(length int, charset string) string {
|
||||
|
@@ -1,86 +0,0 @@
|
||||
package wireguard
|
||||
|
||||
import (
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
"golang.zx2c4.com/wireguard/wgctrl/internal/wguser"
|
||||
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||
)
|
||||
|
||||
// SetPeers - sets peers on a given WireGuard interface
|
||||
func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error {
|
||||
|
||||
client, err := wguser.New()
|
||||
if err != nil {
|
||||
ncutils.PrintLog("failed to start wgctrl", 0)
|
||||
return err
|
||||
}
|
||||
|
||||
device, err := client.Device(iface)
|
||||
if err != nil {
|
||||
ncutils.PrintLog("failed to parse interface", 0)
|
||||
return err
|
||||
}
|
||||
devicePeers := device.Peers
|
||||
if len(devicePeers) > 1 && len(peers) == 0 {
|
||||
ncutils.PrintLog("no peers pulled", 1)
|
||||
return err
|
||||
}
|
||||
|
||||
for _, peer := range peers {
|
||||
|
||||
for _, currentPeer := range devicePeers {
|
||||
if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
|
||||
currentPeer.PublicKey.String() != peer.PublicKey.String() {
|
||||
_, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
|
||||
if err != nil {
|
||||
log.Println("error removing peer", peer.Endpoint.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
udpendpoint := peer.Endpoint.String()
|
||||
var allowedips string
|
||||
var iparr []string
|
||||
for _, ipaddr := range peer.AllowedIPs {
|
||||
iparr = append(iparr, ipaddr.String())
|
||||
}
|
||||
allowedips = strings.Join(iparr, ",")
|
||||
keepAliveString := strconv.Itoa(int(keepalive))
|
||||
if keepAliveString == "0" {
|
||||
keepAliveString = "5"
|
||||
}
|
||||
if peer.Endpoint != nil {
|
||||
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
|
||||
" endpoint "+udpendpoint+
|
||||
" persistent-keepalive "+keepAliveString+
|
||||
" allowed-ips "+allowedips, true)
|
||||
} else {
|
||||
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
|
||||
" persistent-keepalive "+keepAliveString+
|
||||
" allowed-ips "+allowedips, true)
|
||||
}
|
||||
if err != nil {
|
||||
log.Println("error setting peer", peer.PublicKey.String())
|
||||
}
|
||||
}
|
||||
|
||||
for _, currentPeer := range devicePeers {
|
||||
shouldDelete := true
|
||||
for _, peer := range peers {
|
||||
if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
|
||||
shouldDelete = false
|
||||
}
|
||||
}
|
||||
if shouldDelete {
|
||||
output, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
|
||||
if err != nil {
|
||||
log.Println(output, "error removing peer", currentPeer.PublicKey.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
@@ -206,6 +206,16 @@ func LeaveNetwork(network string) error {
|
||||
}
|
||||
}
|
||||
}
|
||||
//extra network route setting required for freebsd and windows
|
||||
if ncutils.IsWindows() {
|
||||
ip, mask, err := ncutils.GetNetworkIPMask(node.NetworkSettings.AddressRange)
|
||||
if err != nil {
|
||||
ncutils.PrintLog(err.Error(), 1)
|
||||
}
|
||||
_, _ = ncutils.RunCmd("route delete "+ip+" mask "+mask+" "+node.Address, true)
|
||||
} else if ncutils.IsFreeBSD() {
|
||||
_, _ = ncutils.RunCmd("route del -net "+node.NetworkSettings.AddressRange+" -interface "+node.Interface, true)
|
||||
}
|
||||
return RemoveLocalInstance(cfg, network)
|
||||
}
|
||||
|
||||
|
@@ -272,6 +272,16 @@ func GetLocalIP(localrange string) (string, error) {
|
||||
return local, nil
|
||||
}
|
||||
|
||||
func GetNetworkIPMask(networkstring string) (string, string, error) {
|
||||
ip, ipnet, err := net.ParseCIDR(networkstring)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
ipstring := ip.String()
|
||||
maskstring := ipnet.Mask.String()
|
||||
return ipstring, maskstring, err
|
||||
}
|
||||
|
||||
// GetFreePort - gets free port of machine
|
||||
func GetFreePort(rangestart int32) (int32, error) {
|
||||
if rangestart == 0 {
|
||||
|
@@ -282,9 +282,13 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig
|
||||
|
||||
//extra network route setting required for freebsd and windows
|
||||
if ncutils.IsWindows() {
|
||||
_, _ = ncutils.RunCmd("route add -net "+subnet+" -interface "+ifacename, true)
|
||||
ip, mask, err := ncutils.GetNetworkIPMask(nodecfg.NetworkSettings.AddressRange)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, _ = ncutils.RunCmd("route add "+ip+" mask "+mask+" "+node.Address, true)
|
||||
} else if ncutils.IsFreeBSD() {
|
||||
_, _ = ncutils.RunCmd(ipExec+" -4 route add "+gateway+" dev "+ifacename, true)
|
||||
_, _ = ncutils.RunCmd("route add -net "+nodecfg.NetworkSettings.AddressRange+" -interface "+ifacename, true)
|
||||
}
|
||||
|
||||
return err
|
||||
|
Reference in New Issue
Block a user