AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Subscriber absent после sip reload, realtime

Asterisk IP PBX 5 сообщений -
#1

Subscriber absent после sip reload, realtime


Asterisk 11. Есть сервер, на нем примерно 300 сип аккаунтов, среди которых народ с белыми ip и статикой, и те, кто за натом (у них host=dynamic). Включен `qualify`, `rtcachefriends`, `nat=force_rport,comedia`. Время от времени юзера что-то меняют в настройках и делается sip reload. После этого большинство пиров отваливаются и попытка позвонить на них приводит к "subscriber absent".

Далее, дабы как-то это преодолеть, я поставил `ignoreregexpire=yes`. По описанию там:
Цитата:
For realtime peers, when the peer is retrieved from realtime storage, registration information will be used regardless of whether has expired or not

То есть, если я правильно понял мануал, "Для реалтайм пиров, - когда пир вытягивается из БД, будет использована информация о регистрации, вне зависимости от того устарела она, или нет".

Но этого все равно почему-то не происходит. Поэтому не совсем понятно, при каких обстоятельствах может вылезать "Subscriber absent". Особенно, если пир был зарегистрирован сравнительно недавно.

В конфиге нет ничего интересного:
Код:

[general]
context=default
udpbindaddr=0.0.0.0

tcpenable=no
tcpbindaddr=0.0.0.0

srvlookup=yes
rtcachefriends=yes

videosupport=yes

qualify=yes
ignoreregexpire=yes
rtupdate=yes
rtptimeout=60
directmedia=nonat

;relaxdtmf=yes
;rtpholdtimeout=60
;rtpkeepalive=60
;usereqphone=yes
;useragent=SipPhone
;nat=yes
;ignoresdpversion=yes
;allowoverlap=no
;compactheaders = no

При этом, на 10 ветке такого не было. На 1.4 ветке, что была у них года 2 назад такого тоже не было, т.к. там "как-то странно работал rtcachefriends + qualify", поэтому он был выключен. Вот я и думаю, может просто отрубить qualify и вместе с ним кэшфрендз? Тогда ведь для изменения настроек сипа не надо давить reload? Или может в realtime sip_buddies не хватает каких-то полей?
Код:
CREATE TABLE `asterisk`.`sips` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`accountcode` varchar(20) DEFAULT NULL,
`disallow` varchar(100) DEFAULT 'all',
`allow` varchar(100) DEFAULT 'g729;ilbc;gsm;ulaw;alaw',
`allowoverlap` enum('yes','no') DEFAULT 'yes',
`allowsubscribe` enum('yes','no') DEFAULT 'yes',
`allowtransfer` varchar(3) DEFAULT NULL,
`amaflags` varchar(13) DEFAULT NULL,
`autoframing` varchar(3) DEFAULT NULL,
`auth` varchar(40) DEFAULT NULL,
`buggymwi` enum('yes','no') DEFAULT 'no',
`callgroup` varchar(10) DEFAULT NULL,
`callerid` varchar(80) DEFAULT NULL,
`cid_number` varchar(40) DEFAULT NULL,
`fullname` varchar(40) DEFAULT NULL,
`call-limit` int(8) DEFAULT '0',
`callingpres` varchar(80) DEFAULT NULL,
`directmedia` char(6) DEFAULT 'yes',
`context` varchar(80) DEFAULT NULL,
`defaultip` varchar(15) DEFAULT NULL,
`dtmfmode` varchar(7) DEFAULT NULL,
`fromuser` varchar(80) DEFAULT NULL,
`fromdomain` varchar(80) DEFAULT NULL,
`fullcontact` varchar(80) DEFAULT NULL,
`g726nonstandard` enum('yes','no') DEFAULT 'no',
`host` varchar(31) NOT NULL DEFAULT '',
`insecure` varchar(20) DEFAULT NULL,
`ipaddr` varchar(15) NOT NULL DEFAULT '',
`language` char(2) DEFAULT NULL,
`lastms` varchar(20) DEFAULT NULL,
`mailbox` varchar(50) DEFAULT NULL,
`maxcallbitrate` int(8) DEFAULT '384',
`mohsuggest` varchar(80) DEFAULT NULL,
`md5secret` varchar(80) DEFAULT NULL,
`musiconhold` varchar(100) DEFAULT NULL,
`name` varchar(80) NOT NULL DEFAULT '',
`nat` varchar(25) NOT NULL DEFAULT 'force_rport,comedia',
`outboundproxy` varchar(80) DEFAULT NULL,
`callbackextension` varchar(40) NOT NULL,
`deny` varchar(95) DEFAULT NULL,
`permit` varchar(95) DEFAULT NULL,
`pickupgroup` varchar(10) DEFAULT NULL,
`port` varchar(5) NOT NULL DEFAULT '',
`progressinband` enum('yes','no','never') DEFAULT 'no',
`promiscredir` enum('yes','no') DEFAULT 'no',
`qualify` char(3) DEFAULT NULL,
`regexten` varchar(80) NOT NULL DEFAULT '',
`regseconds` int(11) NOT NULL DEFAULT '0',
`rfc2833compensate` enum('yes','no') DEFAULT 'no',
`rtptimeout` char(3) DEFAULT NULL,
`rtpholdtimeout` char(3) DEFAULT NULL,
`secret` varchar(80) DEFAULT NULL,
`sendrpid` enum('yes','no') DEFAULT 'yes',
`setvar` varchar(100) NOT NULL DEFAULT '',
`subscribecontext` varchar(80) DEFAULT NULL,
`subscribemwi` varchar(3) DEFAULT NULL,
`t38pt_udptl` enum('yes','no') DEFAULT 'no',
`trustrpid` enum('yes','no') DEFAULT 'no',
`type` varchar(6) NOT NULL DEFAULT 'friend',
`useclientcode` enum('yes','no') DEFAULT 'no',
`username` varchar(80) NOT NULL DEFAULT '',
`usereqphone` varchar(3) NOT NULL DEFAULT 'no',
`videosupport` enum('yes','no') DEFAULT 'yes',
`vmexten` varchar(80) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=307 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
#2

Так же боремся, пока только уменьшили время перерегистрации всех юзеров с 3600 до 120
#3

awsswa @ Чт Дек 06, 2012 09:22 писал(а):
Так же боремся, пока только уменьшили время перерегистрации всех юзеров с 3600 до 120


При этом, я до 11 ветки обновился только потому что Rejecting non-primary audio stream: audio. Вроде бы там то ли фрисвич не понимал rfc, то ли *.

Да и нормальный редирект в google talk давно сделать хотелось.
Ночи дождусь, тоже таймаут урезать попробую.

Это вообще бага? Она есть в трекере? Интересно посмотреть, что народ пишет.
#4

Доброго!
Похоже, наткнулся на эту же проблему, только у меня не реалтайм:
dionis*CLI> core show version
Asterisk 11.3.0 built by root @ dionis on a x86_64 running Linux on 2013-05-12 14:33:39 UTC
dionis*CLI> sip show peers
Name/username Host Dyn Forcerport ACL Port Status Description
2401/2401 (Unspecified) D 0 Unmonitored
2444/2444 172.16.5.159 D 57112 Unmonitored
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 1 online, 1 offline]
dionis*CLI> sip reload
dionis*CLI> sip show peers
Name/username Host Dyn Forcerport ACL Port Status Description
2401/2401 (Unspecified) D 0 Unmonitored
2444/2444 (Unspecified) D 0 Unmonitored
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 0 online, 2 offline]
dionis*CLI>
sip.conf
[general]
context=public
allowguest=no
allowoverlap=yes
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
srvlookup=yes
language=ru
[authentication]

[test-phone](!)
type=friend
host=dynamic
nat=no
disallow=all
allow=alaw

[2401](test-phone)
context=test
secret=password
callgroup=40
pickupgroup=40

[2444](test-phone)
context=test
secret=password
callgroup=40
pickupgroup=40

И правильно я понял, что это баг, https://issues.asterisk.org/jira/browse/ASTERISK-21194?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
но он никого сильно не волнует?
Кроме как поставить маленькое время регистрации есть еще идеи?
#5

qualify=yes