netclient for ingress gateway now working

This commit is contained in:
afeiszli
2021-05-27 14:56:08 -04:00
parent aaf184fabd
commit c27c863d6a
8 changed files with 32 additions and 28 deletions

View File

@@ -275,6 +275,7 @@ func CreateExtClient(extclient models.ExtClient) error {
} }
extclient.Address = newAddress extclient.Address = newAddress
} }
if extclient.ClientID == "" { if extclient.ClientID == "" {
clientid := StringWithCharset(7, charset) clientid := StringWithCharset(7, charset)
clientname := "client-" + clientid clientname := "client-" + clientid
@@ -314,7 +315,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
extclient.Network = networkName extclient.Network = networkName
extclient.IngressGatewayID = macaddress extclient.IngressGatewayID = macaddress
node, err := functions.GetNodeByMacAddress(networkName, macaddress) node, err := functions.GetNodeByMacAddress(networkName, macaddress)
if err != nil { if err != nil {
returnErrorResponse(w, r, formatError(err, "internal")) returnErrorResponse(w, r, formatError(err, "internal"))
return return
} }
@@ -331,6 +332,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
return return
} }
err = CreateExtClient(extclient) err = CreateExtClient(extclient)
if err != nil { if err != nil {
returnErrorResponse(w, r, formatError(err, "internal")) returnErrorResponse(w, r, formatError(err, "internal"))
return return

View File

@@ -21,7 +21,7 @@ import (
"github.com/skip2/go-qrcode" "github.com/skip2/go-qrcode"
) )
func serverClientHandlers(r *mux.Router) { func intClientHandlers(r *mux.Router) {
r.HandleFunc("/api/wgconf/{macaddress}", securityCheck(http.HandlerFunc(getWGClientConf))).Methods("GET") r.HandleFunc("/api/wgconf/{macaddress}", securityCheck(http.HandlerFunc(getWGClientConf))).Methods("GET")
r.HandleFunc("/api/register", securityCheck(http.HandlerFunc(registerClient))).Methods("POST") r.HandleFunc("/api/register", securityCheck(http.HandlerFunc(registerClient))).Methods("POST")
@@ -116,7 +116,7 @@ Endpoint = %s
json.NewEncoder(w).Encode(extclient) json.NewEncoder(w).Encode(extclient)
} }
func RegisterClient(client models.ServerClient) (models.ServerClient, error) { func RegisterClient(client models.IntClient) (models.IntClient, error) {
if client.PrivateKey == "" { if client.PrivateKey == "" {
privateKey, err := wgtypes.GeneratePrivateKey() privateKey, err := wgtypes.GeneratePrivateKey()
if err != nil { if err != nil {
@@ -145,7 +145,7 @@ func RegisterClient(client models.ServerClient) (models.ServerClient, error) {
client.ServerKey = server.ServerKey client.ServerKey = server.ServerKey
collection := mongoconn.Client.Database("netmaker").Collection("serverclients") collection := mongoconn.Client.Database("netmaker").Collection("intclients")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
// insert our network into the network table // insert our network into the network table
_, err = collection.InsertOne(ctx, client) _, err = collection.InsertOne(ctx, client)
@@ -166,7 +166,7 @@ func registerClient(w http.ResponseWriter, r *http.Request) {
Code: http.StatusInternalServerError, Message: "W1R3: It's not you it's me.", Code: http.StatusInternalServerError, Message: "W1R3: It's not you it's me.",
} }
var clientreq models.ServerClient var clientreq models.IntClient
//get node from body of request //get node from body of request
err := json.NewDecoder(r.Body).Decode(&clientreq) err := json.NewDecoder(r.Body).Decode(&clientreq)

View File

@@ -605,6 +605,7 @@ func UniqueAddress(networkName string) (string, error) {
return ip.String(), err return ip.String(), err
} }
} }
//TODO //TODO
err1 := errors.New("ERROR: No unique addresses available. Check network subnet.") err1 := errors.New("ERROR: No unique addresses available. Check network subnet.")
return "W1R3: NO UNIQUE ADDRESSES AVAILABLE", err1 return "W1R3: NO UNIQUE ADDRESSES AVAILABLE", err1
@@ -693,7 +694,6 @@ func IsIPUniqueExtClients(network string, ip string) bool {
defer cancel() defer cancel()
if err != nil { if err != nil {
fmt.Println(err)
return isunique return isunique
} }
@@ -722,7 +722,6 @@ func IsIPUnique(network string, ip string) bool {
defer cancel() defer cancel()
if err != nil { if err != nil {
fmt.Println(err)
return isunique return isunique
} }
@@ -750,7 +749,6 @@ func IsIP6Unique(network string, ip string) bool {
defer cancel() defer cancel()
if err != nil { if err != nil {
fmt.Println(err)
return isunique return isunique
} }

View File

@@ -46,6 +46,7 @@ type Node struct {
IsEgressGateway bool `json:"isegressgateway" bson:"isegressgateway"` IsEgressGateway bool `json:"isegressgateway" bson:"isegressgateway"`
IsIngressGateway bool `json:"isingressgateway" bson:"isingressgateway"` IsIngressGateway bool `json:"isingressgateway" bson:"isingressgateway"`
EgressGatewayRange string `json:"gatewayrange" bson:"gatewayrange"` EgressGatewayRange string `json:"gatewayrange" bson:"gatewayrange"`
IngressGatewayRange string `json:"ingressgatewayrange" bson:"ingressgatewayrange"`
PostChanges string `json:"postchanges" bson:"postchanges"` PostChanges string `json:"postchanges" bson:"postchanges"`
} }

View File

@@ -25,7 +25,7 @@ func CheckIn(network string) error {
} }
nodecfg := cfg.Node nodecfg := cfg.Node
servercfg := cfg.Server servercfg := cfg.Server
fmt.Println("Checking into server: " + servercfg.GRPCAddress) fmt.Println("Checking into server at " + servercfg.GRPCAddress)
setupcheck := true setupcheck := true
ipchange := false ipchange := false

View File

@@ -1,6 +1,7 @@
package functions package functions
import ( import (
"log"
"io/ioutil" "io/ioutil"
"bytes" "bytes"
"github.com/gravitl/netmaker/netclient/config" "github.com/gravitl/netmaker/netclient/config"
@@ -9,6 +10,7 @@ import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"errors" "errors"
"github.com/davecgh/go-spew/spew"
) )
func Register(cfg config.GlobalConfig) error { func Register(cfg config.GlobalConfig) error {
@@ -27,7 +29,9 @@ func Register(cfg config.GlobalConfig) error {
} }
jsonbytes := []byte(jsonstring) jsonbytes := []byte(jsonstring)
body := bytes.NewBuffer(jsonbytes) body := bytes.NewBuffer(jsonbytes)
res, err := http.Post("http:/"+cfg.Client.ServerEndpoint+"/api/register","application/json",body) log.Println(jsonstring)
log.Println("http://"+cfg.Client.ServerEndpoint+"/api/client/register","application/json")
res, err := http.Post("http://"+cfg.Client.ServerEndpoint+"/api/intclient/register","application/json",body)
if err != nil { if err != nil {
return err return err
} }
@@ -40,7 +44,8 @@ func Register(cfg config.GlobalConfig) error {
} }
var wgclient models.ServerClient var wgclient models.ServerClient
json.Unmarshal(bodyBytes, &wgclient) json.Unmarshal(bodyBytes, &wgclient)
err = config.ModGlobalConfig(wgclient) spew.Dump(wgclient)
err = config.ModGlobalConfig(wgclient)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -101,7 +101,7 @@ func ConfigureSystemD(network string) error {
systemservice := `[Unit] systemservice := `[Unit]
Description=Regularly checks for updates in peers and local config Description=network check for remote peers and local config
Wants=netclient.timer Wants=netclient.timer
[Service] [Service]

View File

@@ -49,7 +49,7 @@ func InitGRPCWireguard(client models.ServerClient) error {
} }
cmdIPDevLinkAdd := exec.Command("ip","link", "add", "dev", ifacename, "type", "wireguard" ) cmdIPDevLinkAdd := exec.Command("ip","link", "add", "dev", ifacename, "type", "wireguard" )
cmdIPAddrAdd := exec.Command("ip", "address", "add", "dev", ifacename, client.Address+"/24") cmdIPAddrAdd := exec.Command("ip", "address", "add", "dev", ifacename, client.Address+"/24")
cmdIPAddr6Add := exec.Command("ip", "address", "add", "dev", ifacename, client.Address+"/24") cmdIPAddr6Add := exec.Command("ip", "address", "add", "dev", ifacename, client.Address6+"/64")
currentiface, err := net.InterfaceByName(ifacename) currentiface, err := net.InterfaceByName(ifacename)
if err != nil { if err != nil {
err = cmdIPDevLinkAdd.Run() err = cmdIPDevLinkAdd.Run()
@@ -58,6 +58,7 @@ func InitGRPCWireguard(client models.ServerClient) error {
} }
} }
match := false match := false
match6 := false
addrs, _ := currentiface.Addrs() addrs, _ := currentiface.Addrs()
//Add IPv4Address (make into separate function) //Add IPv4Address (make into separate function)
@@ -65,30 +66,28 @@ func InitGRPCWireguard(client models.ServerClient) error {
if strings.Contains(a.String(), client.Address){ if strings.Contains(a.String(), client.Address){
match = true match = true
} }
}
if !match {
err = cmdIPAddrAdd.Run()
if err != nil {
log.Println("Error adding address")
}
}
//Add IPv6 Address (make into separate function)
for _, a := range addrs {
if strings.Contains(a.String(), client.Address6){ if strings.Contains(a.String(), client.Address6){
match = true match6 = true
} }
} }
if !match { if !match && client.Address != "" {
err = cmdIPAddrAdd.Run()
if err != nil {
log.Println("Error adding ipv4 address")
fmt.Println(err)
}
}
if !match6 && client.Address6 !=""{
err = cmdIPAddr6Add.Run() err = cmdIPAddr6Add.Run()
if err != nil { if err != nil {
log.Println("Error adding address") log.Println("Error adding ipv6 address")
fmt.Println(err)
} }
} }
var peers []wgtypes.PeerConfig var peers []wgtypes.PeerConfig
var peeraddr = net.IPNet{ var peeraddr = net.IPNet{
IP: net.ParseIP(client.ServerAddress), IP: net.ParseIP(client.ServerAddress),
Mask: net.CIDRMask(32, 32), Mask: net.CIDRMask(64, 128),
} }
var allowedips []net.IPNet var allowedips []net.IPNet
allowedips = append(allowedips, peeraddr) allowedips = append(allowedips, peeraddr)
@@ -130,7 +129,6 @@ func InitGRPCWireguard(client models.ServerClient) error {
return err return err
} }
func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig, hasGateway bool, gateways []string) error { func InitWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig, hasGateway bool, gateways []string) error {
ipExec, err := exec.LookPath("ip") ipExec, err := exec.LookPath("ip")