воскресенье, 10 декабря 2017 г.

DX500-MSG1 - SIP-шлюз для АТС DX500

Прямо скажем- я не в восторге от этой поделки. Плата, тупо занимающая один из потоков Е1 станции и конфигурирующаяся посредством скачивания xml-конфига с твоего компа- ну это какой то костыль. Чем это лучше любого шлюза ISDN-SIP - не нашел ни единого аргумента, ну кроме разве что того что плата находится в кассете станции, а не отдельно.
 Окончили пятиминутку ненависти, далее сухая техническая инфа. Плата содержит 3 интерфейса Ethernet (снизу вверх)  и один USB-B, который на самом деле RS-232 и изначально плата конфигурируется через него.
 Ethernet:
1. Менеджмент ( через него можно ломиться телнетом, для Linux-юзеров грабли в виде кодировки iso 8859-1)
2. SIP ( именно он, без RTP)
3. RTP ( только голос)
  Итого при подключении этого мутанта вам понадобятся в VoIP-сети минимум 2 IP- для SIP и для RTP. Менеджмент уж крутите как угодно
  Все три интерфейса имеют раздельные настройки для каждого интерфейса, включая шлюз по умолчанию. Статик маршруты недоступны.
   Первый раз берем проводок из комплекта ( или пилим сами) и цепляемся к плате. Логин по умолчанию admin пасс infotekru.
   Скачиваем конфиг командой get ( скачивается по zmodem,так что его тоже надо настроить). Правим, заливаем обратно командой set. Ребутаем плату командой reset. Если все правильно залили - можете врываться через телнет. Все то же самое, только при скачивании/закачке конфига надо указывать имя файла и запускать у себя на компе FTP ( ну или на том роутере через который вы натитесь на менеджмент интерфейс станции). И тут может быть засада - конфиг сливается именно на тот ip, с которого вы пришли. Потому конфижить лучше из одного сегмента со станцией или же по пути джедая- с нормальной маршрутизацией без богомерзких NAT.
   Далее привожу готовый, проверенный, работоспособный конфиг платы на одну регистрацию с маршрутизацией вызовов на один внутренний номер станции и выплевыванием всех вызовов через один SIP-транк. Проверено на Хуавее Ростелекома и нашем Asterisk. Если что непонятно- смотрим в букварь ( с платой он идет в электронном виде).

<?xml version="1.0" encoding="ISO-8859-1"?>  #стандартный заголовок
<!--MSG-1 configuration version 1.7-->
<Root>
  <IP_config>    #конфиг интерфейсов, думаю все понятно
    <SIP_mask>27</SIP_mask> 

    <SIP_IP>172.16.98.35</SIP_IP>          
<SIP_gateway>172.16.98.33</SIP_gateway>
    <Mng_mask>28</Mng_mask>
    <Mng_IP>10.107.188.75</Mng_IP>
    <RTP_mask>27</RTP_mask>
    <RTP_IP>172.16.98.36</RTP_IP>
    <RTP_gateway>172.16.98.33</RTP_gateway>
  </IP_config>
  <SIP_config> #транспорт для SIP
    <Transport_config>
      <Transport_ID>0</Transport_ID> #порядковый номер
      <Type>0</Type>
#0 - UDP, 1 - TCP 
       <Port>5060</Port>
      <QoS>0</QoS>
    </Transport_config>
    <SIP_route>  #собственно описание SIP-транка
      <SIP_ID>0</SIP_ID>  #просто номер
      <TransportID>0</TransportID> #какой транспорт юзаем, см. выше
      <MiniCom_services>0</MiniCom_services>  #если другая сторона не миником- ставим 0
      <RegEnable>1</RegEnable> #регаться или нет на сервере
      <SIP_proxy>   #описание прокси
        <Proxy_name>sip:10.10.10.10</Proxy_name> #пишем в виде sip:IP_СЕРВЕРА
        <Credential>   #тут у нас логин и пароль
          <Type>0</Type> #всегда ноль
          <Realm/>               #не юзаем
          <Scheme>Digest</Scheme>  #всегда Digest
          <Username>SIPUSER</Username>
          <Password>SIPPASS</Password>
        </Credential>
      </SIP_proxy>
      <RegURI>sip:10.10.10.10</RegURI> #пишем sip:IP_СЕРВЕРА
      <LocalName>sip:SIPUSER@10.10.10.10</LocalName> #пишем sip_логин:IP_СЕРВЕРА
    </SIP_route>
    <Redirect>0</Redirect>    #всегда ноль
  </SIP_config>
  <ISDN_MG_config>  #тут ничего не трогаем- все отлично и так
    <ISDN_ID>0</ISDN_ID>
    <ISDN_interface>
      <Side>0</Side>
      <Codec>0</Codec>
    </ISDN_interface>
    <FALC_config>
      <Synch>1</Synch>
      <FrameCRC4>0</FrameCRC4>
    </FALC_config>
    <MG_config>
      <Amount_of_channels>30</Amount_of_channels>
      <Initial_port>4000</Initial_port>
      <QoS>0</QoS>
      <BAND_limit>3000</BAND_limit>
    </MG_config>
  </ISDN_MG_config>
  <Trunk_config>
    <Trunk>   #описание куда гнать голос
      <Trunk_ID>0</Trunk_ID>  #просто номер по порядку
      <IP_address>10.10.10.10</IP_address> #IP SIP-шлюза
      <Amount_of_channels>30</Amount_of_channels>
      <Port_min>4000</Port_min>
      <Port_max>4059</Port_max>
      <RTP_Timeout>90</RTP_Timeout>
    </Trunk>
  </Trunk_config>
  <Profile_config>  #тоже не трогаем- тут все в порядке. можно разве что кодеки переиграть
    <Profile>
      <Profile_ID>0</Profile_ID>
      <CNG_support>0</CNG_support>
      <LEC_support>1</LEC_support>
      <DTMF_method>1</DTMF_method>
      <Fax_codec>1</Fax_codec>
      <Codec_priority_PCMU>0</Codec_priority_PCMU>
      <Codec_priority_PCMA>70</Codec_priority_PCMA>
      <Codec_priority_G729>0</Codec_priority_G729>
      <BAND_limit>3000</BAND_limit>
    </Profile>
  </Profile_config>
  <Route_config> #маршрутизация вызовов
    <Rule>
      <Rule_ID>0</Rule_ID> #номер по порядку
      <NumberPlan>0</NumberPlan>  #тип набора- открытый или закрытый. юзаем закрытый
      <Comparison_type>0</Comparison_type> #0 - точное совпадение, 1 - шаблон.
      <Direction>1</Direction> #1 - из АТС в SIP, 0 - наоборот
      <Number/>  #поле пустое- значит принимаем все без разбору
      <ISDNID>0</ISDNID> # настройки ISDN
      <SIPID>0</SIPID>  #настройки SIP
      <Number_length>5</Number_length> #не менее скольки цифр должно быть для правила
      <AddressFrom>20.20.20.20</AddressFrom> # что пишем в SIP-заголовке From:
      <AddressTo>172.16.100.21</AddressTo> # что пишем в SIP-заголовке To:
      <ProfileID>0</ProfileID> 
      <TrunkID>255</TrunkID>
#255 -пофиг из какого транка , или же указываем номер      
<DestKSH100>1</DestKSH100>  если другая сторона не DX500- то 1.    
    <Rule_name>to IP-TA</Rule_name>
    </Rule>
    <Rule>
      <Rule_ID>1</Rule_ID>
      <NumberPlan>0</NumberPlan>
      <Comparison_type>1</Comparison_type>
      <Direction>0</Direction>
      <Number>55555</Number> #у нас оператор вызывает 55555
      <ISDNID>0</ISDNID>
      <SIPID>0</SIPID>
      <Number_length>5</Number_length> #накапливаем 5 цифр
      <Cut_before>5</Cut_before> #удаляем 5 цифр,
      <Prefix>201</Prefix>  #вписываем 201 и отправляем в АТС
      <AddressFrom/> #пусто при вызове из sip в АТС
      <AddressTo/>
      <ProfileID>0</ProfileID>
      <TrunkID>255</TrunkID> 
      <DestKSH100>1</DestKSH100> # если другая сторона не DX500- то 1.
      <Rule_name>to DX</Rule_name> #пометка
    </Rule>
  </Route_config>
  <Filter_config>  #файрвол, мы на него забили.
    <FWgenEnable>0</FWgenEnable>
    <FWrtpEnable>0</FWrtpEnable>
    <MAC_filter>
      <!--<MAC_node>-->
      <!--  <MAC></MAC>-->
      <!--</MAC_node>-->
    </MAC_filter>
    <IP_filter>
      <IP_node>
        <IP>10.10.10.10</IP>
        <Protocol>17</Protocol>
        <Port_min>20</Port_min>
        <Port_max>65535</Port_max>
      </IP_node>
      <IP_node>
        <IP>10.0.0.5</IP>
        <Protocol>6</Protocol>
        <Port_min>20</Port_min>
        <Port_max>65535</Port_max>
      </IP_node>
    </IP_filter>
  </Filter_config>
  <VAS_config> #на это тоже забили, это уже рюшечки из ДВО
    <SIPID>0</SIPID>
    <LocalNTU>1</LocalNTU>
    <!--<Host>-->
    <!--  <Host_ID>0</Host_ID>-->
    <!--  <URI></URI>-->
    <!--  <IP></IP>-->
    <!--  <NTU_min>1</NTU_min>-->
    <!--  <NTU_max>1</NTU_max>-->
    <!--  <Termw>0</Termw>-->
    <!--  <Obst>0</Obst>-->
    <!--</Host>-->
  </VAS_config>
</Root>

P.S. Чуть не забыл- на пакеты OPTIONS плата не отвечает, так что QUALIFY в Asterisk обязательно выключаем.

среда, 25 октября 2017 г.

LiquidSoap - швейцарский нож для онлайн-радио

LiquidSoap - это по своей сути не программа, а язык программирования для создания собственных медиапотоков.Умеет все и немножко еще- получать медиа, конвертировать, записывать, проигрывать, отдавать поток и много чего еще. Поскольку использование "Жидкого Мыла"планируется обширное- буду копипастить сюда полезные рецепты.Если кто-то обидится на такую фривольность- не вопрос, пишите в комментах- ссылку обязательно оставлю.

Итак.
1. Записываем эфир с созданием нового файла каждый час

#! /usr/bin/liquidsoap
#строка выше - ша-бэнг. думаю. понятно зачем.если хотите запускать 
#  в фоне- добавьте ключик -d
set("log.file",true)
 #узнаем pid чтобы мониторить пациента
set("init.daemon.pidfile.path","./record.pid")
#и логгируем его
set("log.file.path","/home/asket/mixer.log")"
#подключаем входящий поток для записи
#не пытайтесь слушать- адрес взят от балды.здесь должен быть ваш источник
instream = input.http("http://stream.dcast.ru:8000/heavy")

#и собственно запись. функция mksafe  делает наш источник #100%надежным посредством добавления тишины если он 
#недоступен, иначе запись упадет
output.file(
    %mp3(stereo=true,bitrate=192,samplerate=44100),
    "%Y-%m-%d-%H_%M_%S.mp3",
    reopen_when={0m0s},
    mksafe(instream)
)

2. Захватываем поток AAC
  Сам Liquid этого не умеет, поэтому воспользуемся помощью зала в виде ffmpeg
badgers = input.external("while true; do ffmpeg -i rtsp://aacstreamingserver.com/stream_aac64 -f s16le -acodec pcm_s16le -af volume=+5 -; done")

понедельник, 16 октября 2017 г.

Debian 9 - возвращаем нормальные имена интерфейсам

В Debian 9 много изменений относительно Jessie, и не все лично меня устраивают. К примеру. идиотские имена интерфейсов. И потому я возвращаю прежние человеческие ethX.
 Все просто -
 открываем  /etc/default/grub, ищем строку

GRUB_CMDLINE_LINUX=""
 
и меняем ее на 
 
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
 
После этого применяем изменения -
 
grub-mkconfig -o /boot/grub/grub.cfg.

Все это от root, естественно. 
В /etc/network/interfaces не забываем переименовать интерфейсы в 
соответствии с тем,какими они станут после применения изменений.
Ребутаем. Все.