TL;DR If your 3CXPhone app and/or your desktop phone are not able to connect to a remote 3CX server, test connectivity to the server on 3CX tunnel port 5090. If there’s no connection, on the server, check if anything is listening on that port. If not, restart the 3CX SIP/RTP Tunneling Service.
My 3CXPhone client connects directly to a remote server. My desk phone connects through a local Session Border Controller. Today, neither one was completing registration.
Troubleshooting
Review 3CXPhone client logs (on your local PC):
%AppData%\3CXPhone for Windows\Logs
Review Session Border Controller logs (on the machine running the SBC):
%ProgramData%\3CXSBC\Logs
Check connection on port 5090 (if you haven’t already, you’ll need to activate Telnet Client from Programs and Features > Turn Windows features on or off):
telnet [host name or IP address of server] 5090
Telnet should respond with some “garbage” characters. Press Ctrl-C to close the connection.
On the server, run this command to see if anything is listening on port 5090:
netstat -ano | find /i "listening"
You should see a process listed with port :5090, like this:
The last column is the Process ID (PID). In Task Manager, that should cross-reference back to 3CXTunnel.exe.
Resolution
If you do not see a process listening on port 5090 (I did not), open the Services app and stop and re-start the 3CX SIP/RTP Tunneling Service. In my case, the service was already running and looked fine; I had not received any alerts about it from 3CX. But once I restarted it, port 5090 appeared in the list of listening ports and both my 3CXPhone client and my desktop phone were able to register again.
I’m setting up a TCP Service Check alert on my monitoring software to let me know if port 5090 stops accepting connections.