·11 min·3 views

Fix Asterisk Call Drops: Monitoring & Troubleshooting Guide

Complete guide to diagnosing and fixing Asterisk call drops. Covers NAT, SIP ALG, session timers, codec issues, resource exhaustion, and proactive monitoring setup.

A
Astervis
Engineering & product team

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:

  1. Call setup (INVITE, 200 OK, ACK): Drops here appear as calls that connect momentarily then disconnect, typically within 0-5 seconds.
  2. Media exchange (RTP audio streams): Drops during the call itself, often after 15, 30, or 60 seconds — or at random intervals.
  3. 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.x

Fix

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=yes

For 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=no

Key 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.pcap

Fix

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/full

Fix

; 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_se

Cause 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/alaw

Pro 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.

Try Free

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 -l

Fix

  1. Increase file descriptors:
# /etc/security/limits.conf asterisk soft nofile 65536 asterisk hard nofile 65536
  1. Avoid unnecessary transcoding — use the same codec on both sides of the call.

  2. Optimize RTP port range:

; rtp.conf [general] rtpstart=10000 rtpend=20000 ; 10,000 ports = 5,000 concurrent calls
  1. 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=180

Ensure 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=1

For unreliable networks, increase the timeout:

qualify_timeout=10.0 ; More lenient for high-latency connections

Proactive 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

MetricWhy It MattersAlert Threshold
Active channelsCapacity planningMore than 80% of max
Call duration distributionDrops show as short callsSpike in calls under 10s
ASR (Answer-Seizure Ratio)Failed call percentageBelow 90%
ACD (Average Call Duration)Sudden drops indicate issuesBelow 50% of normal
RTP packet lossAudio qualityAbove 1%
JitterAudio qualityAbove 30ms
SIP response codesError patternsSpike in 408, 480, 503
Trunk registration statusConnectivityAny trunk unregistered
CPU/Memory usageResource exhaustionCPU 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.

Start your free 14-day trial

Quick Reference: Diagnosis by Symptom

SymptomMost Likely CauseFirst Command to Run
Drops at exactly 30 secondsNAT issuespjsip show endpoint
Drops at 15 or 30 minutesSession timer mismatchCheck timers config
Random drops, some trunksSIP ALGDisable ALG, run tcpdump
No audio then dropCodec mismatchCheck allow settings
Drops during peak hoursResource exhaustiontop, core show channels count
One extension unreachableQualify timeoutpjsip show endpoints
Drops on remote extensionsFirewall/UDP timeoutCheck conntrack settings

Prevention Checklist

Use this checklist when setting up a new Asterisk deployment to prevent call drops from the start:

  • Set direct_media=no on all endpoints
  • Configure external_media_address and external_signaling_address correctly
  • 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.

Share this article