Well... that guide is showing an example when using a self hosted PBX where eveything is local.. What you are trying to do is completely different animal. As you've discovered, receiving calls isn't too difficult, however, because you have to set the IP of the gateway in the 3CX trunk settings the trick is going to be getting that through to the correct destination + port. I'd suggest, as a first step, if you haven't done so, checking the 3CX Activity Log on an outgoing call to see just where 3CX is attempting to send the Invite. Even if you are able to get the call setup working, there are still all the correct ports that have to be able to "make it through", as well.