One-way audio on SIP calls is almost always a NAT problem: your audio is sent to an address the other side can't reach. Fix it in order: disable SIP ALG on the router, set your PBX's external address and local networks, open the RTP port range, then limit codecs to G.711. Calls dropping at 30 seconds is usually SIP ALG.
Test your trunk without your PBX: Open your Edesy trunk and use the Call me test to see which side the problem is on.
Why SIP audio breaks behind a router
A SIP call has two parts. Signalling (SIP) sets the call up and tears it down. Media (RTP) carries the audio, on separate UDP ports. Inside the SIP messages, your PBX writes the IP address and port where it wants to receive audio and replies.
Behind a router, your PBX only knows its private address, such as 192.168.1.20. If it writes that address
into its messages, the provider sends audio and replies to an address that doesn't exist on the internet.
The call may ring and connect, but audio only flows one way, or not at all.
Symptoms and causes
| Symptom | Most likely cause | First thing to try |
|---|---|---|
| You hear them, they don't hear you | PBX advertises its private IP; outbound RTP blocked | Set External Address and Local Networks |
| They hear you, you don't hear them | Inbound RTP blocked or not forwarded | Open and forward the RTP range |
| Every call drops at about 30 seconds | SIP ALG rewriting ports; replies lost | Disable SIP ALG, reboot router |
| No audio either way | Both of the above, or codec mismatch | Work through all four fixes |
| One-way audio only to some destinations | Codec negotiated that part of the path doesn't carry | Offer a single G.711 codec |
| Audio fine for a while, then stops | Router closes idle UDP mappings | Enable qualify/keepalive (for example every 60 s) |
Fix 1: Turn off SIP ALG
SIP ALG is a "helper" built into many routers that rewrites SIP messages on the way out. In practice it often breaks them. A typical failure looks like this:
- Your PBX sends from port 5060.
- SIP ALG changes the source port to, say, 12001 on the way out.
- The provider receives the call from 12001, but the message still says "reply to me at 5060".
- Replies go to 5060, the router has no mapping for it, and drops them.
- Your PBX waits for a reply that never arrives, and hangs up after about 32 seconds (the standard SIP transaction timeout).
That is why every call dies at the same point. Port forwarding cannot fix this: forwarding handles traffic coming in, SIP ALG changes traffic going out.
How to turn it off:
- Open your router admin page (often
192.168.1.1or192.168.0.1) and log in. - Look under Advanced, NAT, Firewall, WAN or VoIP for a setting named SIP ALG, SIP Transformations, SIP Passthrough or VoIP ALG.
- Disable it. Watch the wording: on some routers the checkbox is labelled "Disable SIP ALG", so it must be ticked.
- Save and reboot the router.
Common locations:
| Router | Where to look |
|---|---|
| TP-Link | Advanced > NAT Forwarding > ALG > SIP ALG off |
| Netgear | Advanced > WAN Setup > SIP ALG setting (wording may be reversed) |
| D-Link | Advanced > Firewall / ALG Settings > SIP off |
| Asus | WAN > NAT Passthrough > SIP Passthrough: Disable |
| MikroTik | IP > Firewall > Service Ports > disable sip |
| ISP-supplied fibre routers | Advanced, Security or NAT; if absent, ask the ISP to disable it |
Fix 2: Tell the PBX its public address
In FreePBX 17: Settings > Asterisk SIP Settings > chan_pjsip.
- External Address: your public IP, or a dynamic DNS name if your IP changes.
- Local Networks: every LAN subnet, for example
192.168.0.0/24.
The PBX then writes its public address into SIP messages for the trunk, and keeps private addresses for internal phones. Apply config and restart if your version asks for it. The full trunk setup is in FreePBX SIP trunk setup for India.
Fix 3: Open and forward the RTP range
Audio uses a range of UDP ports, 10000 to 20000 by default on Asterisk.
- Allow outbound UDP from the PBX to the provider's signalling and media addresses.
- Allow inbound UDP from the provider on the RTP range.
- If the PBX is not the edge device, forward the RTP range to the PBX's LAN IP.
- Keep the PBX's configured RTP range and the router's forwarded range identical.
On Edesy, the trunk page shows the signalling IP to allow, and SIP runs on port 5070.
Fix 4: Keep codecs simple
Edesy trunks carry G.711. Enable only alaw and ulaw on the trunk and disable g722, g729 and opus. Mismatched codecs can cause transcoding failures or silence.
A less obvious case: when one end offers two codecs and the other end answers with both, the call can settle on a codec that one hop further down the route doesn't actually carry. Calls to most destinations work, but calls to a particular region have one-way audio. The fix is to offer a single codec on that path, so the answer can only contain one. In India, alaw (PCMA) is the usual choice. If one-way audio is limited to specific destinations, try alaw only before anything else, and tell your provider which numbers fail.
A troubleshooting order that works
- Run the trunk's Call me test from the Edesy portal. Two-way audio there means the provider side is fine.
- Disable SIP ALG and reboot the router.
- Set External Address and Local Networks; apply.
- Check the RTP range is open and forwarded.
- Limit codecs to alaw and ulaw; then try alaw only.
- Enable qualify every 60 seconds so the router keeps the mapping open.
- Still broken? Send the provider a call time, the number dialled, and your router brand and model.
Frequently missed details
- Two routers in a row (an ISP router plus your own) means two NATs and possibly two SIP ALGs.
- A dynamic public IP changes; use dynamic DNS for External Address.
- Firewalls on the PBX itself (iptables, the FreePBX firewall module) can block RTP even when the router doesn't.
More help on the FreePBX setup page, the SIP trunking page and the SIP ALG troubleshooting docs.
Open the Edesy portal to run a trunk test, or contact us with your router model.