I have self-hosted kubernetes cluster, launched on oracle cloud instances.
I want to launch there FreePBX (asterisk distribution). So, I have problems with NAT - sip protocol is terrible to work with NAT.
How can I bypass it? I have two ideas:
- create VPN (openvpn??) service in the another container in the same pod with freepbx, so, clients(app on smartphone, hardware phone) will connect to vpn, and than to freepbx
- use turn/coturn, something like this: https://github.com/l7mp/stunner
So, client will use turn, and freepbx will use turn as well
But maybe I can just somehow configure SIP protocol for server?
Basically, I have multiple NATs: client > router > external IP > internal IP of oracle cloud > metallb (which uses this internal IP > pod’s IP address.
And it kills SIP traffic. It even can’t auth :(
Also, I used gomplate template to generate ports for my service (for SIP I need high range of ports for RTP)
Use a session border controller to manage your NAT’ing
/r/freepbx
session border controller
Why? It will be the same problem with pure Asterisk.
I setup K8’s successfully using freeswitch and KAZOO/Kamailio as an SBC. Even have our webapp in Azure kubes.
NAT was a bitch… but just keep pushing through!
I highly doubt there is anything on the market that is turn key though… and this took a couple of months to program too.