Hi Stepan,
This is exactly the point and thanks for this post

-- using ALLOWSOURCEASOUTBOUND parameter must be able to solve NAT issues (but may not work in nested NAT environment). The Asterisk systems are using the same mechanism by default.
In general (a brief summary), to solve NAT issues within SIP/SDP messages, you need one of the following at client's side:
- STUN enabled client / terminal, note that STUN may not work in some symmetric NAT environments
- SIP ALG (SIP NAT) enabled gateway - must be checked for correct operation
- local outbound proxy like 3CX and 3CX tunnel or just a VPN tunnel
or at server' side:
- using source address

ort of RTP media instead of address into SIP/SDP messages -- what the above setting is supposed to force
- outbound proxy or session border controller; they are supposed to replace the content of SIP/SDP messages using the same or similar mechanism
The router at client's side normally will NAT only the addresses into packet headers and will not translate the SIP/RTP messages. The router at server's side, if not SIP ALG capable, will also translate only the addresses into packet headers. You need static NAT / port forward for certain ports in order 3CX server behind NAT to operate correctly (STUN or static external IP for providers).
There is no universal solution or recommendation, cases may differ. Various terminals and clients may use different methods. I never came across a good guide or tool for testing the environment and suggesting solution. The 3CX firewall checker is good for server's side and is not applicable for client's side. May be a combination of several mechanisms will do the job. I don't think an Asterisk extension would be easier to set and/or debug or will operate correctly always (a comparison earlier in this threat). Tests must be performed in each specific environment. Understanding what's exactly happening is important to solve issues.
Best regards,
Orlin.