Some of the biggest problems that plague people such as "one way audio" or "Calls dropping after XX Seconds" are caused by NAT not being correctly setup.
Make sure you have a resolvable address on the Internet.
If you don't want to pay a few bucks to get a static IP address, and are served by an ISP that periodically changes your IP address, then get an account with a dynamic DNS service such as DynDNS . Your router may already have built-in support for one or more of these services, if so, use one that your router supports and then configure your router to automatically update your dynamic address when your ISP changes your IP address. Failing that, you can set up an updater program such as inadyn, there are instructions for doing that at this blog page
Adding NAT information in FreePBX
All of your settings will be under Settings > Asterisk SIP settings
This right menu is specific to FreePBX 12. In 2.11 all settings are on the main page
Set NAT as yes
Static IP from your ISP
Select "Static IP" and enter your external IP
Dynamic IP Updated through dynamic IP service
Select "Dynamic IP" and put the Full host name in such as "foo.dyndns.net"
After clicking "submit changes" and the Red Apply click "General SIP Settings" on the right menu
Under "NAT" you will see a box for "Local Networks"
Click "Submit changes" And the red "APPLY" button.
RTP Port Range
Open the SIP and RTP ports to your Asterisk server
You must make sure that you open the correct UDP ports in your router's firewall and pointed at your Asterisk server. For SIP protocol, open UDP (NOT TCP) port 5060 (SIP) AND ports 10000-20000 (RTP, which must also be defined in /etc/asterisk/rtp.conf, see below). All these ports are UDP, opening the TCP ports will NOT help anything and may expose your system needlessly. While you are in your firewall configuration, you may as well also open UDP port 4569 (IAX), since sooner or later you'll probably want to accept IAX connections.