p2p VoIP calls. Any software? SIP PBX?

Until now I've used plain old cellphone when supporting users. Sometimes it turns into many hours of conversations, so I'd like to try any p2p solution. Unfortunately, I can't find anything good enough to fit my requirements:
- Should work without 3rd party server (but it's ok to set up my own)
- Client is behind NAT
- Small multiplatform app (client side: Windows, Linux, FreeBSD, my side: FreeBSD or Android)
- No complex registration for user. (Ideally only enter my IP and thats all)
- Don't care about ssl much, typically I'm not saying anything confidentional.
There are many SIP clients, but I can't connect SIP to SIP if one if them is behind NAT. I know very few about SIP protocol. All I can see is that caller connects to UDP port 5060 of acceptor to negotitate call, then acceptor connects back to caller from UDP port 4000 to dynamic UDP port for actual voice channel, but if caller is behind NAT that is not possible, and both sides hear silence.
Question: Does setting up some PBX like Asteriks can fix that?

Other solutions (pure p2p) I found is:
- Fideliphone https://sourceforge.net/p/fideliphone/
This is FM radio quality (44100, celt 20-96kbps) telephone/conferencing over single UDP port. Dated year 2010, does not builds on my FreeBSD 12.2 desktop, need fix for modern wx widgets. But there are old windows builds laying around on the net (~4MB in size), they seems to be usable under wine.
- Dualarrow https://sourceforge.net/projects/dualarrow/
Pure java p2p phone (speex codec?). Didn't test that yet. Can't consider java lightweight.
Is there are anything better?