Dropped calls are the most frustrating issue in any Asterisk-based call center. Every disconnected call means a lost customer interaction, a frustrated agent, and potentially lost revenue. Worse, call drops are notoriously difficult to diagnose because they can stem from dozens of different root causes — from simple NAT misconfigurations to complex network quality issues.
This guide covers every common cause of Asterisk call drops, provides exact diagnostic commands and configuration fixes, and shows you how to set up proactive monitoring so you can catch problems before they affect your callers.
Understanding Why Asterisk Drops Calls
Before diving into fixes, it helps to understand the call flow. An Asterisk call involves three distinct phases, and drops can occur in any of them:
- —Call setup (INVITE, 200 OK, ACK): Drops here appear as calls that connect momentarily then disconnect, typically within 0-5 seconds.
- —Media exchange (RTP audio streams): Drops during the call itself, often after 15, 30, or 60 seconds — or at random intervals.
- —Session maintenance (re-INVITE, OPTIONS, session timers): Drops at predictable intervals like exactly 15 or 30 minutes.
Each phase has its own set of failure modes. Let us work through them systematically.
Cause 1: NAT Traversal Issues
Symptoms: Calls drop after exactly 30 seconds. One-way audio before the drop. Calls work on the local network but fail for remote extensions.
NAT problems are the single most common cause of Asterisk call drops. When your Asterisk server sits behind a NAT router, the SIP signaling and RTP media streams carry internal IP addresses that external endpoints cannot reach.
Diagnosis
Check your current NAT configuration:
# For chan_sip (legacy)
asterisk -rx "sip show settings" | grep -i nat
# For chan_pjsip (modern)
asterisk -rx "pjsip show endpoint <endpoint_name>"Enable SIP debugging to trace what is happening:
asterisk -rx "pjsip set logger on"
# Make a test call, then check the SIP headers for internal IPs
# Look for Contact: and Via: headers containing 192.168.x.x or 10.x.x.xFix
For pjsip.conf (recommended for Asterisk 16+):
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
external_media_address=YOUR.PUBLIC.IP
external_signaling_address=YOUR.PUBLIC.IP
local_net=192.168.0.0/16
local_net=10.0.0.0/8
local_net=172.16.0.0/12
[endpoint-template](!)
type=endpoint
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yesFor sip.conf (legacy):
[general]
externip=YOUR.PUBLIC.IP
localnet=192.168.0.0/255.255.0.0
localnet=10.0.0.0/255.0.0.0
nat=force_rport,comedia
directmedia=noKey point: direct_media=no (or canreinvite=no in legacy) forces all RTP through Asterisk. This uses more resources but solves 90% of NAT-related call drops.
Cause 2: SIP ALG (Application Layer Gateway)
Symptoms: Random call drops. Calls work from some networks but not others. SIP headers are mangled — ports or IPs do not match what Asterisk sent.
Many consumer and business routers include a SIP ALG that attempts to help SIP traffic by rewriting packet headers. In practice, SIP ALG almost always causes more problems than it solves.
Diagnosis
Compare what Asterisk sends versus what the remote endpoint receives:
# Capture SIP traffic on the Asterisk server
tcpdump -i eth0 -n -s 0 port 5060 -w /tmp/sip_capture.pcap
# Analyze in Wireshark or with sngrep
sngrep -I /tmp/sip_capture.pcapFix
Disable SIP ALG on your router or firewall:
- —Linux iptables:
modprobe -r nf_nat_sip nf_conntrack_sip - —pfSense: System, Advanced, Firewall and NAT, uncheck Disable Firewall Scrub
- —Ubiquiti/EdgeRouter:
set system conntrack modules sip disable - —Most consumer routers: Look for SIP ALG, SIP Passthrough, or VoIP Passthrough in the firewall settings and disable it
Cause 3: Session Timer Mismatches
Symptoms: Calls drop at exactly 15 minutes, 30 minutes, or another predictable interval.
SIP session timers (RFC 4028) are designed to detect dead calls by periodically refreshing the session. If the timer values between Asterisk and the remote endpoint do not agree, one side will consider the session expired and terminate the call.
Diagnosis
asterisk -rx "pjsip show endpoint <endpoint>" | grep -i timer
grep -i "session-expires" /var/log/asterisk/fullFix
; pjsip.conf
[endpoint-template](!)
type=endpoint
timers=no ; Disable session timers entirely
; OR configure them properly:
timers=yes
timers_min_se=90 ; Minimum session expiry (seconds)
timers_sess_expires=1800 ; Session expiry (default 1800 = 30 min)If your SIP provider requires session timers, match their Min-SE value:
timers_min_se=900 ; Match provider minimum (often 900s = 15 min)
timers_sess_expires=1800 ; Set higher than min_seCause 4: Codec Negotiation Failures
Symptoms: Call connects but drops immediately (within 1-3 seconds). No audio at any point. SIP 488 Not Acceptable Here in traces.
When Asterisk and the remote endpoint cannot agree on a common audio codec, the call either fails to connect or drops immediately after the media session begins.
Diagnosis
asterisk -rx "pjsip show endpoint <endpoint>" | grep -i allow
asterisk -rx "core show channels verbose"Fix
Ensure both sides share at least one codec:
; pjsip.conf
[endpoint-template](!)
type=endpoint
allow=!all,g722,ulaw,alaw ; g722 preferred (wideband), fallback to ulaw/alawPro tip: Order matters. The first codec listed is the preferred one. Put your best-quality codec first.
Cause 5: Resource Exhaustion
Symptoms: Drops increase under load. Asterisk becomes unresponsive during peak hours. Audio quality degrades before drops occur (choppy, robotic voice).
Asterisk is CPU-intensive, especially when transcoding audio between different codecs or recording calls. Running out of CPU, memory, or file descriptors will cause call drops.
Tired of guessing what's happening in your queues?
Astervis gives you 30+ real-time charts, operator KPIs, and CRM integration for your Asterisk PBX. Self-hosted. Install in 5 minutes. From $119/mo flat — unlimited operators.
Diagnosis
asterisk -rx "core show channels count"
asterisk -rx "core show uptime"
top -bn1 | head -20
free -h
ulimit -n # File descriptor limit
ss -unp | grep asterisk | wc -lFix
- —Increase file descriptors:
# /etc/security/limits.conf
asterisk soft nofile 65536
asterisk hard nofile 65536- —
Avoid unnecessary transcoding — use the same codec on both sides of the call.
- —
Optimize RTP port range:
; rtp.conf
[general]
rtpstart=10000
rtpend=20000 ; 10,000 ports = 5,000 concurrent calls- —Monitor CPU usage — if Asterisk consistently uses more than 80% CPU, scale horizontally or upgrade hardware.
Cause 6: Firewall and Network Issues
Symptoms: Intermittent drops that correlate with network events. Drops affect some trunks but not others. Audio gaps or one-way audio before the drop.
Firewalls that do not properly handle UDP connection tracking will drop RTP packets. Network congestion, jitter, and packet loss all cause audio degradation and eventual call drops.
Diagnosis
ping -c 100 provider.sip.address | tail -5
cat /proc/sys/net/netfilter/nf_conntrack_udp_timeout
cat /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream
asterisk -rx "rtp show stats"Fix
# Increase UDP connection tracking timeout (default 30s is too short for calls)
echo 180 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout
echo 180 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream
# Make persistent in /etc/sysctl.conf
net.netfilter.nf_conntrack_udp_timeout=180
net.netfilter.nf_conntrack_udp_timeout_stream=180Ensure your firewall allows:
- —SIP signaling: UDP/TCP 5060 (or your custom port)
- —RTP media: UDP 10000-20000 (match your rtp.conf range)
- —TLS/SRTP: TCP 5061 for encrypted SIP
Cause 7: Qualify and Keep-Alive Failures
Symptoms: Endpoints show as Unreachable or UNKNOWN in pjsip show endpoints. Calls to specific extensions fail while others work.
Asterisk uses OPTIONS or NOTIFY messages to check whether endpoints are still reachable. If an endpoint does not respond to qualify checks, Asterisk marks it as unreachable.
Diagnosis
asterisk -rx "pjsip show endpoints" | grep -E "Unavail|Unreachable"
asterisk -rx "pjsip show aor <aor_name>"Fix
; pjsip.conf
[aor-template](!)
type=aor
qualify_frequency=60 ; Check every 60 seconds
qualify_timeout=5.0 ; Wait 5 seconds for response
max_contacts=1For unreliable networks, increase the timeout:
qualify_timeout=10.0 ; More lenient for high-latency connectionsProactive Monitoring: Stop Drops Before They Happen
Troubleshooting call drops reactively — after customers complain — is expensive and stressful. The real solution is proactive monitoring that catches degradation before it causes drops.
What to Monitor
| Metric | Why It Matters | Alert Threshold |
|---|---|---|
| Active channels | Capacity planning | More than 80% of max |
| Call duration distribution | Drops show as short calls | Spike in calls under 10s |
| ASR (Answer-Seizure Ratio) | Failed call percentage | Below 90% |
| ACD (Average Call Duration) | Sudden drops indicate issues | Below 50% of normal |
| RTP packet loss | Audio quality | Above 1% |
| Jitter | Audio quality | Above 30ms |
| SIP response codes | Error patterns | Spike in 408, 480, 503 |
| Trunk registration status | Connectivity | Any trunk unregistered |
| CPU/Memory usage | Resource exhaustion | CPU above 80% |
Analyzing Call Drops in CDR Data
Your CDR (Call Detail Records) database contains valuable forensic data. Query it to find drop patterns:
-- Find calls with abnormally short duration (potential drops)
SELECT calldate, src, dst, duration, disposition, channel
FROM cdr
WHERE duration < 10
AND disposition = 'ANSWERED'
AND calldate > NOW() - INTERVAL 24 HOUR
ORDER BY calldate DESC;
-- Call drop rate by hour (find peak problem times)
SELECT
HOUR(calldate) as hour,
COUNT(*) as total_calls,
SUM(CASE WHEN duration < 10 AND disposition = 'ANSWERED' THEN 1 ELSE 0 END) as short_calls,
ROUND(SUM(CASE WHEN duration < 10 AND disposition = 'ANSWERED' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) as drop_rate_pct
FROM cdr
WHERE calldate > NOW() - INTERVAL 7 DAY
GROUP BY HOUR(calldate)
ORDER BY drop_rate_pct DESC;
-- Drop rate by trunk (identify problematic providers)
SELECT
SUBSTRING_INDEX(channel, '-', 1) as trunk,
COUNT(*) as total_calls,
SUM(CASE WHEN duration < 10 AND disposition = 'ANSWERED' THEN 1 ELSE 0 END) as potential_drops,
ROUND(AVG(duration), 1) as avg_duration
FROM cdr
WHERE calldate > NOW() - INTERVAL 30 DAY
GROUP BY trunk
ORDER BY potential_drops DESC;Using Astervis for Automated Drop Detection
While CLI commands and SQL queries work for one-time troubleshooting, they do not scale for continuous monitoring. Astervis provides real-time dashboards specifically designed for Asterisk call centers that automate this entire process:
- —Real-time call monitoring — see every active call, its duration, codec, and quality metrics on a live dashboard
- —Automated drop detection — Astervis flags abnormally short calls and highlights trunk-specific issues with heatmaps showing exactly when and where drops occur
- —Operator performance tracking — correlate call drops with specific agents, queues, or time periods to identify systemic versus agent-specific issues
- —Trunk health monitoring — registration status, call volume, and quality metrics per trunk with instant alerts when a trunk goes down
- —Historical analytics — 30+ charts covering call volume trends, queue wait times, operator KPIs, and more — all without writing SQL
Astervis connects to your Asterisk server in minutes with a single install command and starts collecting data immediately. Combined with the manual troubleshooting steps above, you get both deep diagnostic capability and automated monitoring that prevents future problems.
Quick Reference: Diagnosis by Symptom
| Symptom | Most Likely Cause | First Command to Run |
|---|---|---|
| Drops at exactly 30 seconds | NAT issues | pjsip show endpoint |
| Drops at 15 or 30 minutes | Session timer mismatch | Check timers config |
| Random drops, some trunks | SIP ALG | Disable ALG, run tcpdump |
| No audio then drop | Codec mismatch | Check allow settings |
| Drops during peak hours | Resource exhaustion | top, core show channels count |
| One extension unreachable | Qualify timeout | pjsip show endpoints |
| Drops on remote extensions | Firewall/UDP timeout | Check conntrack settings |
Prevention Checklist
Use this checklist when setting up a new Asterisk deployment to prevent call drops from the start:
- —Set
direct_media=noon all endpoints - —Configure
external_media_addressandexternal_signaling_addresscorrectly - —Disable SIP ALG on all routers in the path
- —Set UDP conntrack timeout to at least 180 seconds
- —Match codec lists between Asterisk and all SIP providers
- —Configure session timers to match your provider or disable them
- —Set file descriptor limits to 65536+
- —Open firewall for both SIP (5060) and full RTP range (10000-20000)
- —Set up monitoring for trunk registration status and call quality
- —Test with simultaneous calls at expected peak capacity
Conclusion
Asterisk call drops almost always have a specific, fixable cause. The most common culprits — NAT misconfigurations, SIP ALG interference, and session timer mismatches — account for the vast majority of cases and are straightforward to fix once identified.
The key to eliminating call drops long-term is not just fixing the current issue, but implementing monitoring that catches the next problem before your customers notice. Whether you use CLI commands, CDR queries, or a dedicated tool like Astervis, the goal is the same: visibility into every call, every trunk, and every potential failure point.
Your Asterisk call center deserves better than dropped calls. Start monitoring, start fixing, and start delivering the reliable communication your customers expect.
Stop guessing. Start monitoring.
See your Asterisk call center's real performance — queue wait times, agent activity, trunk usage, and 30+ charts. Self-hosted on your server. Install in 5 minutes. No credit card required.
From $119/mo flat. Unlimited operators. 14-day free trial.
