Skip to main content

Asterisk FAQ

多租户方式#

  • 可以实现简单的多租户
    • 使用 context 隔离租户路由
    • 使用 realm 隔离租户用户
  • 复杂多租户很难实现
    • 例如 难以支持 meetme, message, transfer 等
    • 多套部署可能会简单点
  • 其他方案
    • 使用 FreeSwitch - 对多租户和大规模支持更好
    • 使用 Kamailio 前端分流和负载
  • 类似场景商业产品
  • 参考

Everyone is busy/congested at this time (1:0/0/1)#

  • 开启日志排查 pjsip set logger on
  • 遇到过的问题
    • 488 Not Acceptable Here Warning: 305 devnull "SDP: Incompatible media format: no common codec"
      • 被叫返回不支持编码
      • 尝试 allow=all 来进行调试 - 然后再修改允许的编码
  • Mysterious 'everybody is busy/congested at this time' error in Asterisk
    • 原因是被叫返回了 Do Not Disturb
  • pjsip contacts NonQual
    • 为 aor 设置 qualify 间隔
  • pjsip 注册到对方 - 对方显示 UNKNOWN
    • 在 stun 完成后即可注册成功

verbose 3 Remote UNIX connection#

  • verbose 设置为 3 时非常多这个日志
  • AMI 请求导致 - 例如 freepbx 或者其他网关接口请求
  • SNMP 请求导致
  • asterisk -r 导致
-- Remote UNIX connection-- Remote UNIX connection disconnected-- Remote UNIX connection-- Remote UNIX connection disconnected

asterisk.conf

[options]# 隐藏 remote console 连接信息hideconnect=yes
# 修改后重启asterisk -rx 'core restart now'

发起呼叫设置 CallerID#

命令行发起无法设置

#1 AMI 发起

Action: OriginateChannel: local/[email protected]Application: EchoCallerID: Asterisk <12345>

#2 extensions 设置

[outgoing]exten => 12345,1,NoOp()same => n,Verbose(1, Outgoing Caller ID: {$CALLERID(all)})same => n,Dial(SIP/${EXTEN})same => n,Hangup()
exten => 12345,1,NoOp()same => n,Set(CALLERID(num)=54321)same => n,Set(CALLERID(name)=Asterisk)same => n,Verbose(1, Outgoing Caller ID: {$CALLERID(all)})same => n,Dial(SIP/${EXTEN})same => n,Hangup()

AES encryption disabled. Install OpenSSL.#

iax2 时发生, 加载 res_crypto

cel_pgsql.c:352 pgsql_log: Reason: ERROR: value too long for type character varying#

  • 将 CEL 的 APPDATA 改为更长的类型, 如果是 pg, 建议直接改为 text
[Sep 11 09:30:06] WARNING[3434]: cel_pgsql.c:351 pgsql_log: Failed to insert call detail record into database![Sep 11 09:30:06] WARNING[3434]: cel_pgsql.c:352 pgsql_log: Reason: ERROR:  value too long for type character varying(255)

Couldn't find mailbox 4021 in context default#

注意, DADHI FXS 生成的配置文件会默认添加 voicemail, 会导致出现非常多这样的日志

[Sep 25 18:18:46] WARNING[3003]: app_voicemail.c:2476 __messagecount: Couldn't find mailbox 4021 in context default
# 关闭 `app_voicemail` 后会出现下面的问题
No voicemail provider registered.

IAX2 status UNKNOWN#

Dial 接通之前没有铃声#

可以在 Dial 之前先 Answer

The canary is no more. He has ceased to be!#

static void *canary_thread(void *unused){    struct stat canary_stat;    struct timeval now;
    /* Give the canary time to sing */    sleep(120);
    for (;;) {        now = ast_tvnow();        if (stat(canary_filename, &canary_stat) || now.tv_sec > canary_stat.st_mtime + 60) {            ast_log(LOG_WARNING,                "The canary is no more.  He has ceased to be!  "                "He's expired and gone to meet his maker!  "                "He's a stiff!  Bereft of life, he rests in peace.  "                "His metabolic processes are now history!  He's off the twig!  "                "He's kicked the bucket.  He's shuffled off his mortal coil, "                "run down the curtain, and joined the bleeding choir invisible!!  "                "THIS is an EX-CANARY.  (Reducing priority)\n");            set_priority_all(0);            pthread_exit(NULL);        }
        /* Check the canary once a minute */        sleep(60);    }}

app_dial.c: Unable to create channel of type 'IAX2' (cause 20 - Subscriber absent)#

表示 iax 未注册上

iax2 show peers

端口检测#

# 检测 iax2 端口是否开放nmap -sU --script iax2-version.nse -p 4569 192.168.1.2
# SIP 探测nmap -sU --script sip-methods -p 4569 192.168.1.2# 伪造拨号nmap --script=sip-call-spoof -sU -p 5060 --script-args 'sip-call-spoof.ua=Nmap, sip-call-spoof.from=Boss' <targets># 枚举用户nmap --script=sip-enum-users -sU -p 5060 <targets> --script-args 'sip-enum-users.padding=4, sip-enum-users.minext=1000,sip-enum-users.maxext=9999'
# STUNnmap -sU --script stun-version -p 3478 <target>nmap -sV -PN -sU -p 3478 --script stun-info <ip>