1

我添加了以下两个 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 记录。

我正在使用 IP XXXX 从另一个 Asterisk 服务器(版本 11.17.1)发送呼叫,并使用以下拨号方案:

[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

谁能帮我解决这个问题?

4

3 回答 3

1

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

Asterisk 只读取第一个 SRV 条目,而不关心优先级和权重。

所以你可能想用 Asterisk 13 和 PJSIP 试试。

于 2017-01-05T19:21:46.290 回答
0

谢谢你们给我回复。

现在很清楚 Asterisk 11.17.2 没有能力解析多个 DNS SRV 记录。

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

Freeswitch 成功地向 DNS SRV 即 example.com 发送/故障转移调用。但是还有一个问题,Freeswitch 在恢复后从不向主节点发送回调。它需要重新启动 Freeswitch 以再次选择主节点来发送呼叫。

于 2017-01-09T12:00:38.353 回答
0

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

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

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

于 2017-01-05T19:30:34.613 回答