I have local endpoint extension 105 with ip 192.168.111.92.
And have endpoint 102 outside local network. (external ip 77.XX.XX.98 and nat ip 192.168.20.2)
You are relying on symmetric RTP because the remote party is behind its own NAT, but you have received no media from them, so Asterisk is unable to learn their address.
If they aren’t expected to send media, you can only fix this at the remote end. You may be able to tell it its public address, or you may be able to point it at some sort of STUN server.
If they do send media, you will need make sure that there are static port forwarding rules in your router, for the RTP port range, as there isn’t going to be any outbound media from which it can learn a rule, until there is successful inbound media. Catch 22.
This could also happen if you had the wrong public address set, but I doubt that is the case, here.
You should examine the INVITE from Asterisk, to make sure that the SDP contains the correct public address. If it does, you need to try to capture the incoming RTP on the public side of the NAT router. If it is present there you need to work out why the router is dropping it. Your pcap will be from outside the firewall on the Asterisk machine, so the lack of incoming RTP means it either wasn’t sent, or didn’t get past the router.
I compared the packets on freepbx and there was really no incoming rtp. I turned off the keenetic sip alg and it seems the problems have gone away. I’ll check it tomorrow and write.