I am reading an article on the 3cx trying to figure out this issue. The section "keep alive" seems to decribe my issue. do you know what this means:
STUN Client Functionality
This is an absolute requirement for a phone to be able to function as an External Extension. The phone will use the services of a STUN Server to understand what its public IP Address is, and what port address translations will occur as the traffic it sends and receives to/from the PBX traverses the WAN-to-LAN boundary at the remote location.
Without STUN support, it will be necessary to perform some custom configurations on the WAN-to-LAN device in the remote location. This implies that you will need, for each phone in the remote location, to configure on the phones SIP and RTP ports that are unique for each unit, then also statically configure on the phone what is the public IP Address it is using, and then create the necessary port forwarding rules on the remote location’s WAN-to-LAN device. This is inconvenient to say the least, requires a static public IP Address at the remote location, and is definitely to be avoided for anything beyond casual use, or if you have absolutely no other option. Troubleshooting such setups can rapidly consume so much time that purchasing a phone device that has STUN support is a more cost-effective option.
Keep-Alive Functionality
A phone which is NAT-aware will almost always provide Keep-Alive functionality. The phone will periodically send keep-alive messages to the PBX. The scope of sending keep-alive messages is to ensure that the NAT mappings which the WAN-to-LAN device (between the phone and its internet connection) creates remain the same. Without this, shortly after the phone registers the NAT mapping on the WAN-to-LAN device would expire, and there would be no way for the WAN-to-LAN device to know where to route incoming SIP messages from the PBX to the phone.