From d1d5d37d7264f8cb3bce1787849f2fb736bb290c Mon Sep 17 00:00:00 2001 From: Tadas V Date: Thu, 12 Jul 2018 13:00:41 +0300 Subject: [PATCH] Display port forwarding hint in case of outbound and public ip mismatch --- cmd/commands/server/command_server.go | 18 +++++------------- cmd/commands/server/factory.go | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/cmd/commands/server/command_server.go b/cmd/commands/server/command_server.go index 792f98d85a..e417571a6a 100644 --- a/cmd/commands/server/command_server.go +++ b/cmd/commands/server/command_server.go @@ -54,6 +54,7 @@ type Command struct { vpnServer openvpn.Process checkOpenvpn func() error + openvpnServiceAddress func() (string, error) protocol string proposalAnnouncementStopped *sync.WaitGroup } @@ -75,11 +76,6 @@ func (cmd *Command) Start() (err error) { cmd.dialogWaiter = cmd.dialogWaiterFactory(providerID) providerContact, err := cmd.dialogWaiter.Start() - publicIP, err := cmd.ipResolver.GetPublicIP() - if err != nil { - return err - } - // if for some reason we will need truly external IP, use GetPublicIP() outboundIP, err := cmd.ipResolver.GetOutboundIP() if err != nil { @@ -110,16 +106,12 @@ func (cmd *Command) Start() (err error) { return err } - if outboundIP != publicIP { - log.Infof( - `It seems that publicaly visible ip: [%s] does not match your local machines ip: [%s]. -You should probaly need to do port forwarding on your router.`, - publicIP, - outboundIP, - ) + openvpnServiceAddress, err := cmd.openvpnServiceAddress() + if err != nil { + return err } - sessionManager := cmd.sessionManagerFactory(primitives, publicIP) + sessionManager := cmd.sessionManagerFactory(primitives, openvpnServiceAddress) dialogHandler := session.NewDialogHandler(proposal.ID, sessionManager) if err := cmd.dialogWaiter.ServeDialogs(dialogHandler); err != nil { diff --git a/cmd/commands/server/factory.go b/cmd/commands/server/factory.go index 5c84b22f13..58000bb0e8 100644 --- a/cmd/commands/server/factory.go +++ b/cmd/commands/server/factory.go @@ -18,6 +18,8 @@ package server import ( + "fmt" + log "github.com/cihub/seelog" "github.com/ethereum/go-ethereum/accounts/keystore" identity_handler "github.com/mysterium/node/cmd/commands/server/identity" "github.com/mysterium/node/communication" @@ -137,6 +139,31 @@ func NewCommandWith( checkOpenvpn: func() error { return openvpn.CheckOpenvpnBinary(options.OpenvpnBinary) }, + openvpnServiceAddress: func() (string, error) { + publicIP, err := ipResolver.GetPublicIP() + if err != nil { + return "", err + } + + outboundIP, err := ipResolver.GetOutboundIP() + if err != nil { + return "", err + } + + if publicIP != outboundIP { + forwardInfo := fmt.Sprintf("%s:%v -> %s:%v", publicIP, options.OpenvpnPort, outboundIP, options.OpenvpnPort) + log.Warnf( + `WARNING: It seems that publicaly visible ip: [%s] does not match your local machines ip: [%s]. +You should probaly need to do port forwarding on your router: %s.`, + publicIP, + outboundIP, + forwardInfo, + ) + + } + + return publicIP, nil + }, protocol: options.Protocol, proposalAnnouncementStopped: &sync.WaitGroup{}, }