Groundwire extension 103 + Acrobits SIPIS + Tailscale: separate SIP signaling and RTP paths
Hello,
I have a somewhat unusual PJSIP/FreePBX setup and I am trying to determine whether Asterisk can use different paths for SIP signaling and RTP for a specific extension.
My setup
I have FreePBX/PJSIP running at:
192.168.60.10
Extension:
103
The client is an iPhone running Groundwire.
The Groundwire account is configured to use:
pbx.lucar.app.br:5061
TLS
The SIP port is publicly reachable and Acrobits SIPIS push notifications are working.
The FreePBX registration shows the Acrobits SIPIS address, for example:
Contact: 103/sip:[email protected]:18937
I understand that this is the Acrobits SIPIS server and not the actual iPhone address.
Tailscale
I also have Tailscale running on a Proxmox server.
The Proxmox server advertises my internal networks to Tailscale.
The iPhone has a stable Tailscale address in the 100.64.0.0/10 range.
For example:
iPhone 103:
100.x.x.x
Proxmox:
192.168.10.20
Tailscale: 100.88.x.x
The FreePBX server can successfully ping the iPhone’s Tailscale IP, and the iPhone can reach the FreePBX through Tailscale.
What I want
I want to keep SIP signaling and push notifications exactly as they are:
iPhone
|
| SIP TLS
v
pbx.lucar.app.br:5061
|
v
Acrobits SIPIS / FreePBX
But I would like the RTP media to use the Tailscale path:
iPhone
100.x.x.x
|
| Tailscale
v
Proxmox
|
v
FreePBX
192.168.60.10
In other words:
SIP signaling = public Internet / Acrobits SIPIS
RTP media = private routed Tailscale network
Current behavior
When the iPhone is unlocked, I can get audio working when Tailscale is being used.
However, when the iPhone is locked and Groundwire is awakened by the Acrobits push notification, the media path goes through the normal iOS network interface (en0) and the call connects without audio.
The SIP signaling itself works.
The important difference appears to be the SDP/media address.
In some calls I see:
c=IN IP4 192.168.x.x
rather than the Tailscale address.
PJSIP/NAT settings
I have tested:
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
direct_media=no
I understand that rtp_symmetric can cause Asterisk to learn the RTP source after receiving RTP.
However, in this situation I would like to know whether PJSIP can be configured to explicitly use a different media path for extension 103.
My question
Would it be possible to configure extension 103 so that:
SIP signaling:
pbx.lucar.app.br:5061
while:
RTP:
Tailscale 100.x.x.x
is used for media?
I found discussions mentioning:
media_address
bind_rtp_to_media_address
and also discussions about using different PJSIP transports/interfaces.
Could either of these be used for this scenario?
The important detail is that Tailscale is not running directly on FreePBX. It is running on Proxmox, which routes the Tailscale network to FreePBX.
I would also like to avoid using a Tailscale Exit Node because I only want the VoIP media traffic to use Tailscale, not all iPhone traffic.
If this is not possible with PJSIP, is there another recommended way to tell Asterisk to send RTP for a specific endpoint to a known routed address?
Extension 103 is the test endpoint, so I can provide:
pjsip show endpoint 103
pjsip show aor 103
pjsip show transport
pjsip set logger on
as well as the SDP from a failing call.
Thanks!