mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-04 16:33:49 +08:00
fixing dns and various logs
This commit is contained in:
@@ -182,15 +182,16 @@ func getServerAddrs(node *models.Node) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var serverAddrs = make([]models.ServerAddr, 1)
|
var serverAddrs = make([]models.ServerAddr, 0)
|
||||||
|
|
||||||
for _, node := range serverNodes {
|
for _, node := range serverNodes {
|
||||||
|
if node.Address != "" {
|
||||||
serverAddrs = append(serverAddrs, models.ServerAddr{
|
serverAddrs = append(serverAddrs, models.ServerAddr{
|
||||||
IsLeader: logic.IsLeader(&node),
|
IsLeader: logic.IsLeader(&node),
|
||||||
Address: node.Address,
|
Address: node.Address,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
networkSettings, _ := logic.GetParentNetwork(node.Network)
|
networkSettings, _ := logic.GetParentNetwork(node.Network)
|
||||||
// TODO consolidate functionality around files
|
// TODO consolidate functionality around files
|
||||||
|
@@ -752,7 +752,7 @@ func isInterfacePresent(iface string, address string) (string, bool) {
|
|||||||
}
|
}
|
||||||
for _, addr := range currAddrs {
|
for _, addr := range currAddrs {
|
||||||
if strings.Contains(addr.String(), address) && currIface.Name != iface {
|
if strings.Contains(addr.String(), address) && currIface.Name != iface {
|
||||||
logger.Log(2, "found iface", addr.String(), currIface.Name)
|
// logger.Log(2, "found iface", addr.String(), currIface.Name)
|
||||||
interfaces = nil
|
interfaces = nil
|
||||||
currAddrs = nil
|
currAddrs = nil
|
||||||
return currIface.Name, false
|
return currIface.Name, false
|
||||||
@@ -761,6 +761,6 @@ func isInterfacePresent(iface string, address string) (string, bool) {
|
|||||||
currAddrs = nil
|
currAddrs = nil
|
||||||
}
|
}
|
||||||
interfaces = nil
|
interfaces = nil
|
||||||
logger.Log(2, "failed to find iface", iface)
|
// logger.Log(2, "failed to find iface", iface)
|
||||||
return "", true
|
return "", true
|
||||||
}
|
}
|
||||||
|
@@ -21,13 +21,13 @@ import (
|
|||||||
// SetJWT func will used to create the JWT while signing in and signing out
|
// SetJWT func will used to create the JWT while signing in and signing out
|
||||||
func SetJWT(client nodepb.NodeServiceClient, network string) (context.Context, error) {
|
func SetJWT(client nodepb.NodeServiceClient, network string) (context.Context, error) {
|
||||||
home := ncutils.GetNetclientPathSpecific()
|
home := ncutils.GetNetclientPathSpecific()
|
||||||
tokentext, err := os.ReadFile(home + "nettoken-" + network)
|
tokentext, err := ncutils.GetFileWithRetry(home+"nettoken-"+network, 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = AutoLogin(client, network)
|
err = AutoLogin(client, network)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong with Auto Login: %v", err))
|
return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong with Auto Login: %v", err))
|
||||||
}
|
}
|
||||||
tokentext, err = os.ReadFile(home + "nettoken-" + network)
|
tokentext, err = ncutils.GetFileWithRetry(home+"nettoken-"+network, 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong: %v", err))
|
return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong: %v", err))
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,7 @@ func StoreSecret(key string, network string) error {
|
|||||||
|
|
||||||
// RetrieveSecret - fetches secret locally
|
// RetrieveSecret - fetches secret locally
|
||||||
func RetrieveSecret(network string) (string, error) {
|
func RetrieveSecret(network string) (string, error) {
|
||||||
dat, err := os.ReadFile(ncutils.GetNetclientPathSpecific() + "secret-" + network)
|
dat, err := ncutils.GetFileWithRetry(ncutils.GetNetclientPathSpecific()+"secret-"+network, 3)
|
||||||
return string(dat), err
|
return string(dat), err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ func StoreTrafficKey(key *[32]byte, network string) error {
|
|||||||
|
|
||||||
// RetrieveTrafficKey - reads traffic file locally
|
// RetrieveTrafficKey - reads traffic file locally
|
||||||
func RetrieveTrafficKey(network string) (*[32]byte, error) {
|
func RetrieveTrafficKey(network string) (*[32]byte, error) {
|
||||||
data, err := os.ReadFile(ncutils.GetNetclientPathSpecific() + "traffic-" + network)
|
data, err := ncutils.GetFileWithRetry(ncutils.GetNetclientPathSpecific()+"traffic-"+network, 2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@@ -68,7 +68,7 @@ func Write(config *ClientConfig, network string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return err
|
return f.Sync()
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientConfig.ReadConfig - used to read config from client disk into memory
|
// ClientConfig.ReadConfig - used to read config from client disk into memory
|
||||||
@@ -109,7 +109,6 @@ func ModConfig(node *models.Node) error {
|
|||||||
return errors.New("no network provided")
|
return errors.New("no network provided")
|
||||||
}
|
}
|
||||||
var modconfig ClientConfig
|
var modconfig ClientConfig
|
||||||
var err error
|
|
||||||
if FileExists(ncutils.GetNetclientPathSpecific() + "netconfig-" + network) {
|
if FileExists(ncutils.GetNetclientPathSpecific() + "netconfig-" + network) {
|
||||||
useconfig, err := ReadConfig(network)
|
useconfig, err := ReadConfig(network)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -120,8 +119,7 @@ func ModConfig(node *models.Node) error {
|
|||||||
|
|
||||||
modconfig.Node = (*node)
|
modconfig.Node = (*node)
|
||||||
modconfig.NetworkSettings = node.NetworkSettings
|
modconfig.NetworkSettings = node.NetworkSettings
|
||||||
err = Write(&modconfig, network)
|
return Write(&modconfig, network)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ModConfig - overwrites the node inside client config on disk
|
// ModConfig - overwrites the node inside client config on disk
|
||||||
|
@@ -299,10 +299,9 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if newNode.DNSOn == "yes" {
|
if newNode.DNSOn == "yes" {
|
||||||
ncutils.Log("setting up DNS")
|
for _, server := range newNode.NetworkSettings.DefaultServerAddrs {
|
||||||
for _, server := range cfg.Node.NetworkSettings.DefaultServerAddrs {
|
|
||||||
if server.IsLeader {
|
if server.IsLeader {
|
||||||
go setDNS(cfg.Node.Interface, cfg.Network, server.Address)
|
go local.SetDNSWithRetry(newNode.Interface, newNode.Network, server.Address)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -581,19 +580,6 @@ func decryptMsg(cfg *config.ClientConfig, msg []byte) ([]byte, error) {
|
|||||||
return ncutils.BoxDecrypt(msg, serverPubKey, diskKey)
|
return ncutils.BoxDecrypt(msg, serverPubKey, diskKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setDNS(iface, network, address string) {
|
|
||||||
var reachable bool
|
|
||||||
for counter := 0; !reachable && counter < 5; counter++ {
|
|
||||||
reachable = local.IsDNSReachable(address)
|
|
||||||
time.Sleep(time.Second << 1)
|
|
||||||
}
|
|
||||||
if !reachable {
|
|
||||||
ncutils.Log("not setting dns, server unreachable: " + address)
|
|
||||||
} else if err := local.UpdateDNS(iface, network, address); err != nil {
|
|
||||||
ncutils.Log("error applying dns" + err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func pingServer(cfg *config.ClientConfig) error {
|
func pingServer(cfg *config.ClientConfig) error {
|
||||||
node := getServerAddress(cfg)
|
node := getServerAddress(cfg)
|
||||||
pinger, err := ping.NewPinger(node)
|
pinger, err := ping.NewPinger(node)
|
||||||
|
@@ -68,13 +68,12 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
|
|||||||
cfg.Node.TrafficKeys.Server = nil
|
cfg.Node.TrafficKeys.Server = nil
|
||||||
// == end handle keys ==
|
// == end handle keys ==
|
||||||
|
|
||||||
if cfg.Node.LocalRange != "" && cfg.Node.LocalAddress == "" {
|
if cfg.Node.LocalAddress == "" {
|
||||||
log.Println("local vpn, getting local address from range: " + cfg.Node.LocalRange)
|
|
||||||
cfg.Node.LocalAddress = getLocalIP(cfg.Node)
|
|
||||||
} else if cfg.Node.LocalAddress == "" {
|
|
||||||
intIP, err := getPrivateAddr()
|
intIP, err := getPrivateAddr()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
cfg.Node.LocalAddress = intIP
|
cfg.Node.LocalAddress = intIP
|
||||||
|
} else {
|
||||||
|
ncutils.PrintLog("error retrieving private address: "+err.Error(), 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,6 +236,14 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if node.DNSOn == "yes" {
|
||||||
|
for _, server := range node.NetworkSettings.DefaultServerAddrs {
|
||||||
|
if server.IsLeader {
|
||||||
|
go local.SetDNSWithRetry(node.Interface, node.Network, server.Address)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if cfg.Daemon != "off" {
|
if cfg.Daemon != "off" {
|
||||||
err = daemon.InstallDaemon(cfg)
|
err = daemon.InstallDaemon(cfg)
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,19 @@ import (
|
|||||||
|
|
||||||
const DNS_UNREACHABLE_ERROR = "nameserver unreachable"
|
const DNS_UNREACHABLE_ERROR = "nameserver unreachable"
|
||||||
|
|
||||||
|
func SetDNSWithRetry(iface, network, address string) {
|
||||||
|
var reachable bool
|
||||||
|
for counter := 0; !reachable && counter < 5; counter++ {
|
||||||
|
reachable = IsDNSReachable(address)
|
||||||
|
time.Sleep(time.Second << 1)
|
||||||
|
}
|
||||||
|
if !reachable {
|
||||||
|
ncutils.Log("not setting dns, server unreachable: " + address)
|
||||||
|
} else if err := UpdateDNS(iface, network, address); err != nil {
|
||||||
|
ncutils.Log("error applying dns" + err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SetDNS - sets the DNS of a local machine
|
// SetDNS - sets the DNS of a local machine
|
||||||
func SetDNS(nameserver string) error {
|
func SetDNS(nameserver string) error {
|
||||||
bytes, err := os.ReadFile("/etc/resolv.conf")
|
bytes, err := os.ReadFile("/etc/resolv.conf")
|
||||||
|
@@ -5,19 +5,25 @@ import (
|
|||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setRoute(iface string, addr *net.IPNet, address string) error {
|
func setRoute(iface string, addr *net.IPNet, address string) error {
|
||||||
var err error
|
out, err := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
|
||||||
_, err = ncutils.RunCmd(fmt.Sprintf("ip route add %s dev %s", addr.String(), iface), false)
|
if err != nil || !strings.Contains(out, iface) {
|
||||||
|
_, err = ncutils.RunCmd(fmt.Sprintf("ip route add %s dev %s", addr.String(), iface), true)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteRoute(iface string, addr *net.IPNet, address string) error {
|
func deleteRoute(iface string, addr *net.IPNet, address string) error {
|
||||||
var err error
|
var err error
|
||||||
|
out, _ := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
|
||||||
|
if strings.Contains(out, iface) {
|
||||||
_, err = ncutils.RunCmd(fmt.Sprintf("ip route del %s dev %s", addr.String(), iface), false)
|
_, err = ncutils.RunCmd(fmt.Sprintf("ip route del %s dev %s", addr.String(), iface), false)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
38
netclient/local/routes_other.go
Normal file
38
netclient/local/routes_other.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
//go:build !linux
|
||||||
|
// +build !linux
|
||||||
|
|
||||||
|
package local
|
||||||
|
|
||||||
|
import (
|
||||||
|
//"github.com/davecgh/go-spew/spew"
|
||||||
|
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
|
)
|
||||||
|
|
||||||
|
//"github.com/davecgh/go-spew/spew"
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
These functions are not used. These should only be called by Linux (see routes_linux.go). These routes return nothing if called.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
func setRoute(iface string, addr *net.IPNet) error {
|
||||||
|
out, err := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
|
||||||
|
if err != nil || !strings.Contains(out, iface) {
|
||||||
|
_, err = ncutils.RunCmd(fmt.Sprintf("ip route add %s dev %s", addr.String(), iface), true)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func deleteRoute(iface string, addr *net.IPNet) error {
|
||||||
|
var err error
|
||||||
|
out, _ := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
|
||||||
|
if strings.Contains(out, iface) {
|
||||||
|
_, err = ncutils.RunCmd(fmt.Sprintf("ip route del %s dev %s", addr.String(), iface), true)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
@@ -320,6 +320,22 @@ func GetNetclientPath() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetFileWithRetry - retry getting file X number of times before failing
|
||||||
|
func GetFileWithRetry(path string, retryCount int) ([]byte, error) {
|
||||||
|
var data []byte
|
||||||
|
var err error
|
||||||
|
for count := 0; count < retryCount; count++ {
|
||||||
|
data, err = os.ReadFile(path)
|
||||||
|
if err == nil {
|
||||||
|
return data, err
|
||||||
|
} else {
|
||||||
|
PrintLog("failed to retrieve file "+path+", retrying...", 1)
|
||||||
|
time.Sleep(time.Second >> 2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data, err
|
||||||
|
}
|
||||||
|
|
||||||
// GetNetclientPathSpecific - gets specific netclient config path
|
// GetNetclientPathSpecific - gets specific netclient config path
|
||||||
func GetNetclientPathSpecific() string {
|
func GetNetclientPathSpecific() string {
|
||||||
if IsWindows() {
|
if IsWindows() {
|
||||||
@@ -411,6 +427,7 @@ func Copy(src, dst string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = os.Chmod(dst, 0755)
|
err = os.Chmod(dst, 0755)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -126,6 +126,6 @@ func StorePrivKey(key string, network string) error {
|
|||||||
|
|
||||||
// RetrievePrivKey - reads wg priv key from local disk
|
// RetrievePrivKey - reads wg priv key from local disk
|
||||||
func RetrievePrivKey(network string) (string, error) {
|
func RetrievePrivKey(network string) (string, error) {
|
||||||
dat, err := os.ReadFile(ncutils.GetNetclientPathSpecific() + "wgkey-" + network)
|
dat, err := ncutils.GetFileWithRetry(ncutils.GetNetclientPathSpecific()+"wgkey-"+network, 2)
|
||||||
return string(dat), err
|
return string(dat), err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user