diff --git a/agent/agent.go b/agent/agent.go index 5fb4dd8..9e29645 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -66,6 +66,9 @@ type Agent struct { Platform string GoArch string ServiceConfig *service.Config + NatsServer string + NatsProxyPath string + NatsProxyPort string } const ( @@ -139,6 +142,17 @@ func New(logger *logrus.Logger, version string) *Agent { }, } + var natsProxyPath, natsProxyPort string + if ac.NatsProxyPath == "" { + natsProxyPath = "natsws" + } + + if ac.NatsProxyPort == "" { + natsProxyPort = "443" + } + + natsServer := fmt.Sprintf("wss://%s:%s", ac.APIURL, natsProxyPort) + return &Agent{ Hostname: info.Hostname, BaseURL: ac.BaseURL, @@ -163,6 +177,9 @@ func New(logger *logrus.Logger, version string) *Agent { Platform: runtime.GOOS, GoArch: runtime.GOARCH, ServiceConfig: svcConf, + NatsServer: natsServer, + NatsProxyPath: natsProxyPath, + NatsProxyPort: natsProxyPort, } } @@ -359,6 +376,7 @@ func (a *Agent) setupNatsOptions() []nats.Option { opts = append(opts, nats.RetryOnFailedConnect(true)) opts = append(opts, nats.MaxReconnects(-1)) opts = append(opts, nats.ReconnectBufSize(-1)) + opts = append(opts, nats.ProxyPath("natsws")) return opts } diff --git a/agent/agent_unix.go b/agent/agent_unix.go index ddd5bac..42630c7 100644 --- a/agent/agent_unix.go +++ b/agent/agent_unix.go @@ -154,6 +154,8 @@ func NewAgentConfig() *rmm.AgentConfig { Cert: viper.GetString("cert"), Proxy: viper.GetString("proxy"), CustomMeshDir: viper.GetString("meshdir"), + NatsProxyPath: viper.GetString("natsproxypath"), + NatsProxyPort: viper.GetString("natsproxyport"), } return ret } diff --git a/agent/agent_windows.go b/agent/agent_windows.go index 541184b..5b83535 100644 --- a/agent/agent_windows.go +++ b/agent/agent_windows.go @@ -61,6 +61,8 @@ func NewAgentConfig() *rmm.AgentConfig { cert, _, _ := k.GetStringValue("Cert") proxy, _, _ := k.GetStringValue("Proxy") customMeshDir, _, _ := k.GetStringValue("MeshDir") + natsProxyPath, _, _ := k.GetStringValue("NatsProxyPath") + natsProxyPort, _, _ := k.GetStringValue("NatsProxyPort") return &rmm.AgentConfig{ BaseURL: baseurl, @@ -72,6 +74,8 @@ func NewAgentConfig() *rmm.AgentConfig { Cert: cert, Proxy: proxy, CustomMeshDir: customMeshDir, + NatsProxyPath: natsProxyPath, + NatsProxyPort: natsProxyPort, } } diff --git a/agent/checkin.go b/agent/checkin.go index 1deebbd..9990198 100644 --- a/agent/checkin.go +++ b/agent/checkin.go @@ -12,7 +12,6 @@ https://license.tacticalrmm.com package agent import ( - "fmt" "runtime" "time" @@ -78,8 +77,7 @@ func (a *Agent) NatsMessage(nc *nats.Conn, mode string) { func (a *Agent) DoNatsCheckIn() { opts := a.setupNatsOptions() - server := fmt.Sprintf("tls://%s:4222", a.ApiURL) - nc, err := nats.Connect(server, opts...) + nc, err := nats.Connect(a.NatsServer, opts...) if err != nil { a.Logger.Errorln(err) return diff --git a/agent/install.go b/agent/install.go index db8fad3..a975581 100644 --- a/agent/install.go +++ b/agent/install.go @@ -82,11 +82,6 @@ func (a *Agent) Install(i *Installer) { a.Logger.Debugln("API:", i.SaltMaster) - terr := TestTCP(fmt.Sprintf("%s:4222", i.SaltMaster)) - if terr != nil { - a.installerMsg(fmt.Sprintf("ERROR: Either port 4222 TCP is not open on your RMM, or nats.service is not running.\n\n%s", terr.Error()), "error", i.Silent) - } - baseURL := u.Scheme + "://" + u.Host a.Logger.Debugln("Base URL:", baseURL) diff --git a/agent/rpc.go b/agent/rpc.go index 7d24d0b..e457ecd 100644 --- a/agent/rpc.go +++ b/agent/rpc.go @@ -54,8 +54,7 @@ func (a *Agent) RunRPC() { var wg sync.WaitGroup wg.Add(1) opts := a.setupNatsOptions() - server := fmt.Sprintf("tls://%s:4222", a.ApiURL) - nc, err := nats.Connect(server, opts...) + nc, err := nats.Connect(a.NatsServer, opts...) if err != nil { a.Logger.Fatalln("RunRPC() nats.Connect()", err) } diff --git a/agent/svc.go b/agent/svc.go index 6e21b15..e360ebf 100644 --- a/agent/svc.go +++ b/agent/svc.go @@ -12,7 +12,6 @@ https://license.tacticalrmm.com package agent import ( - "fmt" "sync" "time" @@ -38,8 +37,7 @@ func (a *Agent) AgentSvc() { time.Sleep(time.Duration(sleepDelay) * time.Second) opts := a.setupNatsOptions() - server := fmt.Sprintf("tls://%s:4222", a.ApiURL) - nc, err := nats.Connect(server, opts...) + nc, err := nats.Connect(a.NatsServer, opts...) if err != nil { a.Logger.Fatalln("AgentSvc() nats.Connect()", err) } diff --git a/shared/types.go b/shared/types.go index 64ae5be..683b85b 100644 --- a/shared/types.go +++ b/shared/types.go @@ -42,6 +42,8 @@ type AgentConfig struct { Cert string Proxy string CustomMeshDir string + NatsProxyPath string + NatsProxyPort string } type RunScriptResp struct {