DNS SRV 故障转移在星号中不起作用

DNS SRV failover not working in asterisk

我添加了以下两条 DNS SRV 记录(TTL 10 秒)用于测试:

_sip._udp.example.com.  SRV   1   0  5060   sip101.example.com.
_sip._udp.example.com.  SRV   2   0  5060   sip102.example.com.

sip101.example.com和sip102.example.com都是两个Asterisk服务器(版本11.17.1)的有效A记录。

我正在从另一台 Asterisk 服务器(版本 11.17.1)发送呼叫,IP 地址为 X.X.X.X,拨号方案如下:

[default]
exten => 0900,1,NoOP(This is test call for checking DNS SRV example.com)
exten => 0900,n,Dial(SIP/XXXX@example.com)

发送呼叫的分机配置如下:

[XXXX]
type=friend
username=XXXX
secret=temp
host=dynamic
context=default
canreinvite=no
srvlookup=yes
qualify=yes
nat=force_rport,comedia

为了测试 DNS SRV 的故障转移,我在 sip101.example.com 上禁用了 Asterisk,这是第一优先级;所以在 sip101.example.com 上 10 秒没有响应后,它应该故障转移到 sip102.example.com.

但它并没有故障转移到第二优先级的 Asterisk,而是超时如下:

== Using SIP RTP CoS mark 5
-- Executing [0900@default:1] NoOp("SIP/XXXX-0000014e", "This is test call for checking DNS SRV example.com") in new stack
-- Executing [0900@deafult:2] Dial("SIP/XXXX-0000014e", "SIP/XXXX@example.com") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/XXXX@example.com
-- SIP/example.com-0000014f is circuit-busy
== Everyone is busy/congested at this time (1:0/1/0)
-- Auto fallthrough, channel 'SIP/XXXX-0000014e' status is 'CONGESTION'
-- Executing [h@default:1] Hangup("SIP/XXXX-0000014e", "") in new stack
== Spawn extension (default, h, 1) exited non-zero on 'SIP/XXXX-0000014e'
[Jan  3 13:48:43] WARNING[3168]: chan_sip.c:4024 retrans_pkt: Retransmission timeout reached on transmission 18da7dbf6e671fc34a20b74a64cff9a8@X.X.X.X:5060 for seqno 102 (Critical Request) -- See https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions
Packet timed out after 32000ms with no response

谁能帮我解决这个问题?

一些谷歌搜索 (1, 2, 3, 4) 表明在旧版本中:

Asterisk only reads the first SRV entry without bothering with priorities and weights.

因此您可能想尝试使用 Asterisk 13 和 PJSIP。

Asterisk 不会排在第二位。它只做一次尝试。如果您需要第二次尝试(到其他 ip),您必须在拨号计划中进行第二次呼叫。

如果您使用 chan_sip,第二个调用也将被解析为第一个 SRV 记录。使用 pjsip 它可以切换(但不被授予)。

如果您需要保证切换,请使用不同的 dns 名称或 ips 并在拨号方案中进行故障转移(例如检查 extensions.conf.sample)。

感谢大家给我回复。

很明显,Asterisk 11.17.2 没有解析多个 DNS SRV 记录的能力。

为了进一步测试,我将向 DNS SRV asterisk 发送调用的客户端(Traffic Generator)从 Asterisk 11.17 切换到 Freeswitch 1.7,它运行良好。

Freeswitch 已成功 sending/failovering 调用 DNS SRV,即 example.com。但是仍然有一个问题,Freeswitch 在恢复后永远不会将调用发送回主节点。它需要重新启动 Freeswitch 才能再次 select 主节点发送呼叫。