How to make SIP to be through with NAT

Hi all, i have researched about asterisk. My system, i want to extend it, i want clients on the outside can connect and call to my system. But my asterisk server is as a server behind NAT, so it’s so hard for SIP through with NAT. My simplest server is below. So, please help me to configure at asterisk and softhphone to register and call to my asterisk server.
thanks alot!!

“Modem ADSL” is a router indeed?
It should have options like ‘virtual server’ or DMZ to make your asterisk server or some of its ‘ports’ to appear outside of your network.

For example, if someone is asking external ip-address of your “Modem ADSL” for port tcp/5060, the router must “forward” this packet to your Asterisk server, “forward” the reply to a callee.