mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
add explicit routing + domain for netmaker
This commit is contained in:
@@ -106,6 +106,10 @@ func startGoRoutines(wg *sync.WaitGroup) context.CancelFunc {
|
|||||||
// == subscribe to all nodes for each on machine ==
|
// == subscribe to all nodes for each on machine ==
|
||||||
serverSet[server] = true
|
serverSet[server] = true
|
||||||
logger.Log(1, "started daemon for server ", server)
|
logger.Log(1, "started daemon for server ", server)
|
||||||
|
err := local.SetNetmakerDomainRoute(cfg.Server.API)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "error setting route for netmaker: "+err.Error())
|
||||||
|
}
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go messageQueue(ctx, wg, &cfg)
|
go messageQueue(ctx, wg, &cfg)
|
||||||
}
|
}
|
||||||
|
@@ -200,6 +200,12 @@ func JoinNetwork(cfg *config.ClientConfig, privateKey string) error {
|
|||||||
if err = config.SaveBackup(node.Network); err != nil {
|
if err = config.SaveBackup(node.Network); err != nil {
|
||||||
logger.Log(0, "network:", node.Network, "failed to make backup, node will not auto restore if config is corrupted")
|
logger.Log(0, "network:", node.Network, "failed to make backup, node will not auto restore if config is corrupted")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = local.SetNetmakerDomainRoute(cfg.Server.API)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log(0, "error setting route for netmaker: "+err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
logger.Log(0, "starting wireguard")
|
logger.Log(0, "starting wireguard")
|
||||||
err = wireguard.InitWireguard(&node, privateKey, nodeGET.Peers[:], false)
|
err = wireguard.InitWireguard(&node, privateKey, nodeGET.Peers[:], false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
package local
|
package local
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
@@ -42,7 +44,7 @@ func SetPeerRoutes(iface string, oldPeers map[string]bool, newPeers []wgtypes.Pe
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, "error parsing ip:", err.Error())
|
logger.Log(0, "error parsing ip:", err.Error())
|
||||||
}
|
}
|
||||||
setRoute(gwIface, &ipNet, gwIP)
|
SetExplicitRoute(gwIface, &ipNet, gwIP)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// traverse through all remaining existing peers
|
// traverse through all remaining existing peers
|
||||||
@@ -82,9 +84,10 @@ func SetCurrentPeerRoutes(iface, currentAddr string, peers []wgtypes.PeerConfig)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log(0, "error parsing ip:", err.Error())
|
logger.Log(0, "error parsing ip:", err.Error())
|
||||||
}
|
}
|
||||||
setRoute(gwIface, &ipNet, gwIP)
|
SetExplicitRoute(gwIface, &ipNet, gwIP)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlushPeerRoutes - removes all current peer routes
|
// FlushPeerRoutes - removes all current peer routes
|
||||||
@@ -122,3 +125,35 @@ func SetCIDRRoute(iface, currentAddr string, cidr *net.IPNet) {
|
|||||||
func RemoveCIDRRoute(iface, currentAddr string, cidr *net.IPNet) {
|
func RemoveCIDRRoute(iface, currentAddr string, cidr *net.IPNet) {
|
||||||
removeCidr(iface, cidr, currentAddr)
|
removeCidr(iface, cidr, currentAddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetNetmakerDomainRoute - sets explicit route over Gateway for a given DNS name
|
||||||
|
func SetNetmakerDomainRoute(domainRaw string) error {
|
||||||
|
var address net.IPNet
|
||||||
|
|
||||||
|
domain, err := url.Parse(domainRaw)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
gwIP, gwIface, err := GetDefaultRoute()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error getting default route: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ips, err := net.LookupIP(domain.Hostname())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, ip := range ips {
|
||||||
|
if ipv4 := ip.To4(); ipv4 != nil {
|
||||||
|
address, err = ncutils.GetIPNetFromString(ipv4.String())
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err != nil || address.IP == nil {
|
||||||
|
return fmt.Errorf("address not found")
|
||||||
|
}
|
||||||
|
return SetExplicitRoute(gwIface, &address, gwIP)
|
||||||
|
}
|
||||||
|
@@ -44,6 +44,11 @@ func setRoute(iface string, addr *net.IPNet, address string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetExplicitRoute(iface string, destination *net.IPNet, gateway string) error {
|
||||||
|
_, err := ncutils.RunCmd(fmt.Sprintf("ip route add %s via %s dev %s", destination.String(), gateway, iface), false)
|
||||||
|
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)
|
out, _ := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
|
||||||
|
Reference in New Issue
Block a user