HOW TO (как сделать) свой sip сервер для голосового общения без посторонних ушей, установка, запуск

Подняв свой почтовый сервер, файловый, календаря и адресных книг, теперь хочу и свой сип-сервер. Я хочу простой, просто простейший sip сервер буквально масштаба междусобойчика, в пределах пары десятков клиентов. Мне не надо (не хочется) для регистрации и учета клиентов своей телефонной сети использовать базы данных. Несмотря на то, что хотелось чего по-проще, типа opensips или Kamailio, пришлось все же ставить asterisk, который оказался и простым, и гибким. Без всяких ГУИ.

Ставим вариант самого сервера и кодеков к нему. Следует отметить, что кодек g729 т.н. "коммерческий", он есть не во всех клиентских программах (которыми и будем звонить), да и сам Астериск его будет использовать ограниченно - без транскодинга (т.е. только звонок с 729 на 279 кодек). Это существенно. Сам сервер будет реализовывать несколько задач - связь между своими клиентами (хозяевами и их приятелями), и звонки во внешний мир. Звонки во внешний мир будут реализованы через посредников (шлюзы) типа sipnet.tu и мегафоноф мультифон. Разумеется, для удобства будут запущены сервисы маршрутизации - типа набираешь 7-мизначный номер, сервер сам понимает, что звоним внутри Города и дописывая нужные циферки для понимаемого шлюзом размера направляет звонок в нужное место.
Сама установка -

yaourt -S asterisk asterisk-g72x

cd /etc/asterisk

Можете получить аборт с установкой g729, это не беда, на самом деле (см. абзац ниже, о транскодинге, а также http://archlinux.org.ru/forum/topic/15534/?page=1#post-160755), он не очень и нужен. Это внешние гады пригибают к использованию g729 - путем предоставления выбора "или на полосе 32кб\с g729 или фиговая связь, требующая полосы 100кб\с с поддерживаемым кодеком", но благодаря своему серверу все будет хорошо.

Редактируем несколько конфигов. Главный, запрет на загрузку некоторых модулей и "план звонков". Вопреки конкурирующим хаутушкам я не иду "в самый конец файла" что-то дописывать. Главный (в наших целях) конфиг включает в себя описание как самих клиентов сервера, так и выходы на Город (т.н. транки). Поскольку и клиенты, и транки множественны и имеют повторяющиеся описания, для сокращения текста в конфиге применяются шаблоны-описания. Следует вновь и вновь отметить, что Астериск использует ту же логику, что и (видимо) большинство программ - по умолчанию считываются ВСЕ конфиги, лежащие в директории. В данном случае это /etc/asterisk, куда и надо попасть командой -

cd /etc/asterisk

Как и (видимо) везде, текст в конфигах ПЕРЕОПРЕДЕЛЯЕТ установки параметров по умолчанию. Как следствие - вряд ли следует использовать положенный в директорий тестовый диалплан, следует посмотреть и другие конфиги, возможно, часть из них вообще куда-нибудь вынеся. Я вынес (в другой директорий) следующие конфиги -

cdr_mysql.conf		 cel_sqlite3_custom.conf   func_odbc.conf	    res_ldap.conf
cdr_odbc.conf		 cli.conf		   phoneprov.conf	    res_odbc.conf      users.conf
cdr_pgsql.conf		 extconfig.conf		   res_config_mysql.conf    res_parking.conf
cdr_sqlite3_custom.conf  extensions.ael	   res_config_sqlite3.conf  res_pgsql.conf
cel_odbc.conf		 extensions.lua	   res_config_sqlite.conf   res_pktccops.conf
cel_pgsql.conf		 extensions_minivm.conf  res_fax.conf		    sip.conf_backup

Перед конфигурацией двух главных файлов Астериска надо продумать идеологию, терминологическую целостность, это важно. Вам надо продумать следующие вопросы - будут ли ваши клиенты пользоваться индивидуальными каналами на внешнюю связь (типа Мультифон), возможно кто-то (несколько клиентов) будет пользоваться общим для всех, кто-то своим личным (соотв. и определяться у получателей звонков они будут согласно этому выбору). От этого зависит указание меток (произвольные наборы букв, называемые Контекст).

Открыв на редактирование все пишу вверху файла -


nano sip.conf -
[shablon_user](!) ;это имя шаблона, а (!) указатель на то, что здесь мы описываем  шаблон.
;вот этот конкретный шаблон будет шаблоном пользователя

type=friend ;заставляет проверять поле username, разрешает входящие и исходящие звонки

insecure=port,invite ;port — отключается проверка порта звонящего.
;invite — отключается аутентификация при входящем звонке. Это следует сделать, если вы хотите,
;чтобы любой абонент сип-сети (любой) мог набрать вас по вашему номеру вида ваш_номе@ваш_сервер.

;context=house ;Контекст, в котором будут обрабатывается исходящие звонки от этого устройства (клиента, юзера)
;попросту правила маршрутизации, описанные в extensions.conf
;если разные пользователи сервера захотят иметь разные правила маршрутизации, то отсюда
;этот параметр надо будет перенести в описание конкретных пользователей, что я и сделал,
;закомментировав эту строку

;fromdomain=<192.168.1.1> ; мой опыт показал, что адрес СВОЕГО сервера можно и не указывать

host=dynamic ;IP-адрес клиента. В случае использования авторизации по логину и паролю — ставьте dynamic.

disallow=all ;запрет всех кодеков, кроме прямо разрешенных
;без этой опции при соединениях будут вечные попытки подсунуть левые кодеки

allow=gsm
allow=g729 ;разрешение всех кодеков alaw или конкретно указанных, что предпочтительно.
;качество сети еще не везде на 5 баллов, потому я пришел к разрешению только самых экономичных
;если кодеков несколько, их следует объявлять раздельно, а не объединять в одной строке (команде)
qualify=yes ;заставляет Астериск опрашивать устройство или софтфон пакетами OPTIONS.
canreinvite=no ;запрещает пересылать связь напрямую между устройствами.
nat=force_rport,comedia  ;клиент  за натом, максимально настойчиво
;Операторы связи, их описание и настройка

[sip](!) ;шаблон для сипнета, мультифона и т.п. сип-операторов, они имеют много общего в настройках
nat=force_rport,comedia
port=5060
qualify=yes
type=peer
disallow=all
allow=alaw
allow=ulaw
allow=g729
canreinvite=no
dtmfmode=info

[sipnet](sip) ;а вот это конкретный аккаунт, который будет использоваться в конкретных случаях
;по его имени, указанному в квадратных скобках, будет вызываться именно ЭТОТ аккаунт в диалплане
username=цифровой_логин
secret=пароль
fromdomain=sipnet.ru
host=sipnet.ru

[office](sip) ;а вот это конкретный аккаунт мультифона, который будет использоваться в конкретных случаях
;на базе созданного ранее шаблона sip
username=телефонный_номер
secret=пароль
host=sbc.megafon.ru
fromdomain=multifon.ru

[megafon1](sip)
username=телефонный_номер_другой
secret=пароль
host=sbc.megafon.ru
fromdomain=multifon.ru

[me1](shablon_user)
username=me1
secret=пароль_пользователя_1
context=ME1 ;назначен отдельный контекст этому пользователю чтобы можно было использовать ОТДЕЛЬНЫЕ настройки плана звонков

[me2](shablon_user)
username=me2
secret=пароль_пользователя_2
context=ME2 ;
[general]

nat=force_rport,comedia

;описание ВХОДЯЩИХ линий, по которых хочется принимать звонки,
;раскомментировать, когда будете знать, что делать со входящими
;для мультифона, пожалуй, следует расскоментировать сразу, поскольку
;лично я до раскомментирования (т.е. до активации входящих) при попытке совершить исходящий
;через мультифон вечно получал аборт по теме Форбидден

;register=логин_сип:пароль_сип@sipnet.ru/индивидуальная_метка1_для_использования_в_диалплане
register=телефон:пароль@multifon.ru/индивидуальная_метка2_для_использования_в_диалплане
register=телефон2:пароль2@multifon.ru/индивидуальная_метка3_для_использования_в_диалплане

context=incoming ;ключевое слово, по которому будут обрабатываться Входящие в диалплане.

;allowguest=no ;запрещает анонимные звонки через ваш сервер. Но и вам никто не сможет позвонить. Потому у меня закомменчено.

videosupport=yes ;включили видео
textsupport=yes  ;включили текстовые сообщения
tlsenable=yes ;это нужно для работы с TCP, которую требует мультифон
;блок для жуликов -
alwaysauthreject = yes ; Астериск будет отвечать жуликам одинаково в случае, когда нет пользователя и когда неправильный пароль
tcpauthtimeout = 30 ; число секунд для числа попыток ввода пароля (см. ниже)
tcpauthlimit = 3 ; против взлома - число допустимых попыток авторизации в теч. вышеуказанных сек.


Пожалуйста обратите внимание на осмысленный выбор кодеков. Поскольку сети у нас по-прежнему не Ах, то я сознательно выбрал на дистанции "сервер-телефон" кодек gsm. Я, конечно, могу пользоваться программой CSipSimle со включенным g729, но эта программа, как и большиство других, подъедает батарейку в режиме ожидания. Я пользуюсь Акробитсом, поскольку в нем есть пуш. Так вот, Астерикс транскодинг с применением g729 делать не будет, отказывается по религиозным соображениям (или я не познал как). А по требованию к сети дела обстоят так - g729 требует ок. 30кб\с, gsm ок. 32 (но качество звука хуже), а другие кодеки, совместимые с моим sipnet.ru, хотят 100 кб\с и более. Заведомо известно, что эти 100 я не везде могу получить. Заведомо известно, что от сервера до сипнета или мегафона у меня честные 100мбит. Т.е. от сервера до телефона я применю gsm, а от сервера до шлюза (транка и т.д.) - что шлюзу угодно. И от телефона до телефона (через сервер) тоже будет только кодек gsm без транскодинга (перекодирования в другие кодеки).
Также пожалуйста будьте готовы к чудесам в распределении звонков. Если, скажем, Астериск еще относительно подробно документирован, то тот же Мегафон со своим мультифоном - нет. При одновременном использовании зарегистрированного для Входящих подключения к мультифону и реальной симки в реальном телефоне могут быть чудеса. Мануалы операторов типа Мультифона могут давать свои инструкции по поднастройке, например, Мультифон дает такую http://multifon.ru/media/devices/instruction/Asterisk_set1_1.pdf. Но это полдела и эту инструкцию читать не надо. Надо на телефоне набрать *137# и указать самому Мультифону правила поведения.
С sip.conf закончили.

nano  modules.conf ;открыв на редактирование, нажимая ctl+k зачищаем файл, затем наполните новым смыслом -

[modules]
autoload=yes

;эта серия модулей выключена по указаниям мануала Мегафон Мультифон
noload => pbx_gtkconsole.so
noload => chan_console.so
noload => pbx_gtkconsole.so
noload => pbx_kdeconsole.so
noload => app_intercom.so
noload => chan_modem.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i4l.so
noload => chan_capi.so
load => res_musiconhold.so
noload => chan_alsa.so
noload => cdr_sqlite.so

;наблюдая за логами загрузки выключил те модули, на которые была ругань
;(значительная их часть связана с отказом от использования и конфигурирования баз данных)

noload => res_phoneprov.so
noload => res_config_sqlite3.so
noload => res_config_pgsql.so
noload => res_parking.so
noload => pbx_lua.so
noload => pbx_dundi.so
noload => cel_pgsql.so
noload => res_smdi.so
noload => res_config_ldap.so
noload => cel_sqlite3_custom.so
noload => cdr_odbc.so
noload => cdr_sqlite3_custom.so
noload => cdr_pgsql.so
noload => cel_odbc.so

[global]
noload => chan_oh323.so

Теперь диалплан, в котором , открыв на редактирование, нажимая ctl+k удаляем все лишнее (это особенно важно во вазимосвязи с последним абз.). На самом деле в моем случае лишним оказалось все. Это потому, что предпочтительно терминологическое единообразие - как мы яхту назвали в первом конфиге, так и в диалплане следует именовать, а не разбираться с наследием и вкусами других авторов. Что совсем нехорошо, так это то, что реальные форматы описания настроек в текущей версии (13.6) ощутимо отличаются от загаженной поисковой выдачи (это вечное "погугли", "поиск рулит" на тематических форумах...). Например во всех увиденных мануалах вместо правильного include => noday,*,*,9,may (разделитель параметров запятая)
настойчиво пишут include => noday|*|*|9|may

Лично я начинал с простого диалплана, но хотелось-то продвинутого. На личный рост от простого до продвинутого ушло около недели. В ходе этого роста пришло понимание, что имеет смысл сперва описать универсальные для всех правила звонков и затем из вставлять в индивидуальные. Какие ставились цели и задачи -
а) как ни наберешь Москву городские (+749... или 849... или 49...) звонок пойдет через Сипнет, поскольку тот на городские в небольших кол-вах бесплатен
б) как ни наберешь СПБ городские (+749... или 849... или 49... или просто семизначный) звонок пойдет через Сипнет поскольку тот на городские в небольших кол-вах бесплатен
в) как ни наберешь Российские сотовые, они пойдут через личные мегафоновы мультифоны, поскольку это что-то ок. 1,5 за минуту
вводим (напомню, открыть, полностью зачистить - это проще, чем сперва убить файл, потом создать и не забыть потом изменить права на файл) -
г) как ни наберешь номер (имя) своего, внутреннего абонента, так он и пойдет без посредников в виде ОПСОСов
д) можно даже установить правила перехвата - набираешь Кремль, а попадаешь в Палату №6. Причем индивидуально для каждого звонящего и в разное время суток

У смежных правил набора есть (вроде) система приоритетов - если описания правил одного уровня, то исполняется то, которое более подробно. Например, 78ХХХХХХХХХ и 789234ХХХХХ - исполнится второе. Инклуды считаются более низким уровнем. Т.е. если второй пример будет вставлен оператором include, то вопреки ожиданиям он пойдет вторым. Именно этим объясняются неразъясненные примеры экстеншенов с казалось бы лишними операторами include (т.е. когда один из include вставляет блок, используемый только в одном месте - так делается для уравнивания приоритетов).


nano extensions.conf

[ME1] ;план, маршрут звонков лично клиента me1 (специально применил разницу между заглавными и маленькими буквами). В таком
;написании "звонки через общий" могут перехватывать то, что вставлено include

include => ish_post ;внедряется заготовка с общеуниверсальным блоком плана, см. ниже

;звонки через общий (ну так договорились) мультифон
exten => _+7921XXXXXXX,1,Dial(SIP/${EXTEN}@office)
exten => _7921XXXXXXX,1,Dial(SIP/+${EXTEN}@office)
exten => _8921XXXXXXX,1,Dial(SIP/+7${EXTEN:1}@office)

[ME2] ;этот клиент будет использовать свой, личный мультифон. Здесь все правила будут иметь один приоритет, поскольку приоритеты
;выровнены include -
include => ish_post
include => me2_pers
[me2pers]
;на случай, если надо зделать конкретное направление звонков погромче
;почему-то звонки через Мегафон получались тише, чем через сипнет-
exten => +79XXXXXXXXX,1,Set(VOLUME(TX)=5)
exten => +79XXXXXXXXX,2,Set(VOLUME(RX)=5)
exten => _+79XXXXXXXXX,3,Dial(SIP/${EXTEN}@megafon1)

exten => _79XXXXXXXXX,1,Dial(SIP/+${EXTEN}@wmegafon1)
exten => _89XXXXXXXXX,1,Dial(SIP/+7${EXTEN:1}@wmegafon1)

[ish_post]
exten => _[a-z].,1,Dial(SIP/${EXTEN}) ;звонки внутри своей сети. Принято, что все клиенты (аккаунты)
;будут иметь буквенные имена (логины), с маленькой буквы

;городские СПБ через Сипнет, все варианты написания номеров
exten => _XXXXXXX,1,Dial(SIP/+7812${EXTEN}@sipnet)
exten => _+7812XXXXXXX,1,Dial(SIP/${EXTEN}@sipnet)
exten => _7812XXXXXXX,1,Dial(SIP/+${EXTEN}@sipnet)
exten => _812XXXXXXX,1,Dial(SIP/+7${EXTEN:1}@sipnet)

; Москва городские через Сипнет, все варианты написания номеров
exten => _+749XXXXXXXX,1,Dial(SIP/${EXTEN}@sipnet)
exten => _749XXXXXXXX,1,Dial(SIP/+${EXTEN}@sipnet)
exten => _49XXXXXXXX,1,Dial(SIP/+7${EXTEN}@sipnet)
exten => _849XXXXXXXX,1,Dial(SIP/$+7{EXTEN:1}@sipnet)

[incoming] ;обработка входящих вызовов
include => inc_post
;праздничные дни и нерабочее время
include => noday,,,,1-7,jan
include => noday,*,*,23,feb
include => noday,*,*,8,mar
include => noday,*,*,1,may
include => noday,*,*,9,may
include => noday,*,*,4,nov
include => noday,17:00-23:59,*,31,dec
include => noday,18:00-9:59,mon-fri,*,*
include => noday,*,sat-sun,*,*

;для рабочего времени
include => day,10:00-17:59,mon-fri,*,*
[day]
;например, офисный телефон - сперва на me1, затем на me2, затем на музыку
exten => mf_all,1,Dial(SIP/me1,40)
exten => mf_all,2,Dial(SIP/me2,30)
exten => mf_all,3,Playback(puchkom); исполняют Потап и Настя про "все пучком"
[noday]
;офисный телефон  -  на музыку
exten => mf_all,1,Playback(puchkom)
[inc_post]

exten => _X.,1,Answer()
exten => _X.,n,Playback(puchkom)

;это разруливание индивидуальных входящих по поднятым соединениям мультифона или
;чего еще другого (см. выше концовку описания sip.conf)

exten => индивидуальная_метка2,1,Dial(SIP/me1,45);ждать 45 сек.
exten => индивидуальная_метка2,2,Playback(puchkom); поиграть музыку

[general]
static=yes
writeprotect=no
[globals]
[default]


Этого для начала достаточно. Далее можно углубляться в настройки маршрутизации звонков, принимать входящие и раздавать их лично или группам, конференц-связь, и пр. Отмечу, что музыка для проигрывания сперва должан быть сконвертирована в формат gsm и затем засунута куда надо, т.е. /var/lib/asterisk/sounds/en/puchkom.gsm

Стартуем службу и меняем права на нужный директорий для логов (и музЫк при необходимости)-


systemctl enable asterisk
systemctl start asterisk
chown -R  asterisk:asterisk  /var/log/asterisk

При изменении конфигов НЕ надо перезапускать службу. При тестировании и настройках под рутом надо войти в консоль Астериска (при запущенной службе)-

asterisk -r

Здесь будут и логи (по мере возможности, меру подробности регулируем добавлением v, т.е. asterisk -rvvvvvv), и здесь можно после изменения конфигов давать команды -

sip reload - это после изменения sip.conf
dialplan reload - это после изменения диалплана
sip show peers - а покажи мне всех известных системе клиентов и их состояние
sip show registry - а покажи мне все поднятые входящие линии
core show translation - а покажи нам таблицу кодеков, возможности перекодировки
В консоли вы увидите, как на ваш сервер почти сразу начнут ломиться враги, массово и непрерывно -

схема_1 - используется лицами для организации за чужой счет звонков по нужным им направлениям, многие ай-пи из атакующих - неожиданно из Палестины, просто пытаются совершить транзитный звонок на нужные им номера без регистрации и будут отбиты, если в терминах инструкции событие incoming у вас в диалплане не предусматривает такого транзита -

[Nov 16 16:19:25] NOTICE[568][C-000001ca]: chan_sip.c:25660 handle_request_invite: Call from '' (217.172.189.41:5082) to extension '81046184957099' rejected because extension not found in context 'incoming'.
[Nov 16 16:19:25] NOTICE[568][C-000001cb]: chan_sip.c:25660 handle_request_invite: Call from '' (88.150.240.245:5070) to extension '000810972599532378' rejected because extension not found in context 'incoming'.
[Nov 16 16:19:50] NOTICE[568][C-000001cc]: chan_sip.c:25660 handle_request_invite: Call from '' (188.138.118.21:5071) to extension '900972592549211' rejected because extension not found in context 'incoming'.
и это уже после того, как сколько-то тысяч айпишников мы забанили в iptables, который за 18 часов работы заблокировал 125 тысяч попыток (36мб).

схема_2 - будут ломиться с попытками регистрации клиентов с логинами-паролями из стандартных хаутушек, типа логин 100, пароль 100 т.п. - будет отбита при использовании нормальных паролей -

[Nov 16 20:22:47] NOTICE[568]: chan_sip.c:27891 handle_request_register: Registration from '301 <sip:301@192.168.1.21:5060>' failed for '31.3.230.210:47707' - Wrong password
[Nov 16 20:22:47] NOTICE[568]: chan_sip.c:27891 handle_request_register: Registration from '301 <sip:301@192.168.1.21:5060>' failed for '31.3.230.210:55489' - Wrong password
[Nov 16 20:22:47] NOTICE[568]: chan_sip.c:27891 handle_request_register: Registration from '301 <sip:301@192.168.1.21:5060>' failed for '31.3.230.210:43704' - Wrong password
[Nov 16 20:22:47] NOTICE[568]: chan_sip.c:27891 handle_request_register: Registration from '301 <sip:301@192.168.1.21:5060>' failed for '31.3.230.210:58396' - Wrong password
[Nov 16 20:22:47] NOTICE[568]: chan_sip.c:27891 handle_request_register: Registration from '301 <sip:301@192.168.1.21:5060>' failed for '31.3.230.210:36330' - Wrong password
[Nov 16 20:22:47] NOTICE[568]: chan_sip.c:27891 handle_request_register: Registration from '301 <sip:301@192.168.1.21:5060>' failed for '31.3.230.210:50816' - Wrong password
[Nov 16 20:22:49] NOTICE[568]: chan_sip.c:27891 handle_request_register: Registration from '301 <sip:301@192.168.1.21:5060>' failed for '31.3.230.210:57499' - Wrong password
Это нормально. Поэтому НЕЛЬЗЯ применять глупые малозначные (типа 101) пароли даже для отладки. Наверняка ваш сервер стои ЗА роутером, потому не забудьте включить проброс портов в роутере на сервер (5060). Помните, что роутеры бывают разные и у их изготовителей могут быть своеобразные представления о роутинге (помню, вроде это был ДЛинк, имеющий внешний ip и из локалки никак не позволял обращаться к своему же внешнему ip).

Загрузки процессора как-то не особо и видно, никак не больше чем почтовый сервер.

Сейчас, на время обкатки, адаптации и тестирования, я ломящимся жуликам вместо аборта организовал поднятие трубки и проигрывание патриотической песни. Что позволило посмотреть загрузку процессора - в пределах 1-2%.
это все? а дальше? как это использовать?
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
Пока все. Я второй день развлекаюсь. Звонить себе и своей контактной группе, несколько меньше переживая о прослушке, о выносе своих данных на сторону, ну плюс вследствие единообразия технологии путем ее навязывания "младшим" (в технологическом смысле) членам семьи привыкание к воипу и снижени расходов при расширении географии общения (как минимум бесплатные звонки на городские МСК и СПБ).

Ну а как конкретно использовать - это решит сам тот, кто вдруг озадачился вопросом своего сервера, ведь ему это зачем-то надо.
wau
Ну а как конкретно использовать
ты не понял, я не в теме, как можно пользоваться этим сип? через комп что-ли?
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
через комп, конечно, тоже. Но я его делал для использования в повседневной жизни, в телефоне. В Андроиде, например, в штатной звонилке есть встроенный сип-клиент (особенно хорошо реализован в Андроиде 6), кроме этого есть CSipSimple, Акробитс и масса других аналогичных программ, вкусы у всех разные. В моем телефоне всегда есть выбор, как именно звонить, от этого выбора зависит цена и защищенность разговора, независимо от роуминга и пр. Это позволяет в обычном односимочном аппарате реализовать функционал мультисимочного телефона.
А зачем свой сервер для такого применения?
Настроить на тот же sipnet и всё.
такие дела.
cucullus
Настроить на тот же sipnet и всё.
блин что это? как настроить? хочется чего-то настроить, потому что ну сколько можно платить по 10 т.р. в месяц за связь...
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
palpalych
настроить то не проблема... вот только денег это не с экономит((
Ошибки в тексте-неповторимый стиль автора©
sipnet.ru - бесплатно на городские МСК и СПБ, и междугородка всяко дешевле, чем через сотовую (городских у меня не осталось). Есть и куча других провайдеров. которые дают хорошие тарифы на нужные пользователю направления.
Сейчас в топик допишу про разумность выбранной схемы транскоднга.
cucullus
А зачем свой сервер для такого применения?
Настроить на тот же sipnet и всё.

Я не убеждаю и не настаиваю, у каждого свои тараканы, и у меня они есть. Я вот хочу по возможности иметь все свое, не завязанное на внешних поставщиков (в возможной мере), а для связи в рамках своего междусобойчика это возможно.

Вопросы кодеков (сипнет жестко сам решает, какие применят и ему начхать на качество вашей сети), выноса своих разговоров внешним провайдерам, вопросы маршрутизации - Астериксом в диалплане я могу нарисовать что угодно и не задумываясь набирать номер и получать разные маршруты (+7921 пойдет через мультифон, +7812 через сипнет, семизначный номер автодополнится +7812 и пойдет сипнетом и пр.)
 
Зарегистрироваться или войдите чтобы оставить сообщение.