diff --git a/netclient/local/local.go b/netclient/local/local.go index 6fa489b0..12518766 100644 --- a/netclient/local/local.go +++ b/netclient/local/local.go @@ -19,7 +19,9 @@ func SetIPForwarding() error { var err error switch os { case "linux": - err = SetIPForwardingLinux() + err = SetIPForwardingUnix() + case "freebsd": + err = SetIPForwardingFreeBSD() case "darwin": err = SetIPForwardingMac() default: @@ -29,7 +31,7 @@ func SetIPForwarding() error { } // SetIPForwardingLinux - sets the ipforwarding for linux -func SetIPForwardingLinux() error { +func SetIPForwardingUnix() error { out, err := ncutils.RunCmd("sysctl net.ipv4.ip_forward", true) if err != nil { log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.") @@ -47,6 +49,25 @@ func SetIPForwardingLinux() error { return nil } +// SetIPForwardingLinux - sets the ipforwarding for linux +func SetIPForwardingFreeBSD() error { + out, err := ncutils.RunCmd("sysctl net.inet.ip.forwarding", true) + if err != nil { + log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.") + return err + } else { + s := strings.Fields(string(out)) + if s[1] != "1" { + _, err = ncutils.RunCmd("sysctl -w net.inet.ip.forwarding=1", true) + if err != nil { + log.Println("WARNING: Error encountered setting ip forwarding. You may want to investigate this.") + return err + } + } + } + return nil +} + // SetIPForwardingMac - sets ip forwarding for mac func SetIPForwardingMac() error { _, err := ncutils.RunCmd("sysctl -w net.inet.ip.forwarding=1", true) diff --git a/netclient/ncutils/netclientutils.go b/netclient/ncutils/netclientutils.go index 764406e2..5c0d0772 100644 --- a/netclient/ncutils/netclientutils.go +++ b/netclient/ncutils/netclientutils.go @@ -1,6 +1,8 @@ package ncutils import ( + "context" + "syscall" "crypto/tls" "errors" "fmt" @@ -16,7 +18,6 @@ import ( "strconv" "strings" "time" - "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" "google.golang.org/grpc" @@ -368,8 +369,14 @@ func Copy(src, dst string) (int64, error) { // RunCmd - runs a local command func RunCmd(command string, printerr bool) (string, error) { args := strings.Fields(command) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() cmd := exec.Command(args[0], args[1:]...) - cmd.Wait() + cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + go func() { + <- ctx.Done() + _ = syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL) + }() out, err := cmd.CombinedOutput() if err != nil && printerr { log.Println("error running command:", command) diff --git a/netclient/wireguard/common.go b/netclient/wireguard/common.go index 1669bc6e..57e31672 100644 --- a/netclient/wireguard/common.go +++ b/netclient/wireguard/common.go @@ -279,7 +279,7 @@ func SetWGConfig(network string, peerupdate bool) error { if err != nil { return err } - if peerupdate { + if peerupdate && runtime.GOOS != "freebsd"{ var iface string iface = nodecfg.Interface if ncutils.IsMac() { diff --git a/netclient/wireguard/unix.go b/netclient/wireguard/unix.go index ccb8115e..6f685896 100644 --- a/netclient/wireguard/unix.go +++ b/netclient/wireguard/unix.go @@ -2,7 +2,6 @@ package wireguard import ( "io/ioutil" - "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/netclient/config" "github.com/gravitl/netmaker/netclient/ncutils" @@ -50,7 +49,8 @@ func SetWGKeyConfig(network string, serveraddr string) error { // ApplyWGQuickConf - applies wg-quick commands if os supports func ApplyWGQuickConf(confPath string) error { - if _, err := ncutils.RunCmd("wg-quick up "+confPath, true); err != nil { + _, _ = ncutils.RunCmd("wg-quick down "+confPath, false) + if _, err := ncutils.RunCmd("wg-quick up "+confPath, false); err != nil { return err } return nil