Client of ours has had problems with VOIP problems for a good long time. We've done quite a bit to try to fix the problems, but we still have dropped calls, and haven't found a reason for them.
They're using a Hosted PBX running 3cx, which is not behind a NAT.
They're also using a dedicated onsite SBC (3cxSBC), which only runs the SBC application. (Windows 7 PRO x64, plenty of resources).
We had them running on a Sonicwall previously, but after enough recommendations, segregated their entire phone system onto it's own switch/router (netgear FS728, and Cisco RV series router.)
They're using sotel systems for their SIP trunking service, Yealink T46 and 41G phones, and regularly encounter issues like the phones dropping calls, or being unable to place outbound calls. Their Desktop HUDs will typically show "problem connecting to 3cx tunnel".
We've opened tickets with several support vendors, including the PBX software vendor, the hosted server vendor, and have outsourced a little as well with VOIP specialists.
In one recent example, a call was dropped after 3 minutes in duration, and audio was live on both sides of the call at the time of the drop-out. The sip trunk provider states that the call (outbound) was dropped on the recipient side, by the carrier. SIP-ALG is not enabled on the router itself, and there is no need for port forwarding/etc. If anyone has any interest in this, please let me know and I can give you any more information that you might need, packet captures ,etc.