войти зарегистрироваться

IP-телефония

индекс
102,70

Полезный Asterisk

Привет.
С целью популяризации VoIP напишу и свои каракули мысли и примеры.
Установкой Asteriska мы сегодня заниматься не будем, мы сделаем его удобным для администратора в офисе.
Буду краток.

Устанавливаем на тачку sendEmail (я фиг знает зачем именно его, но мне с ним проще).
sudo apt-get install sendEmail

Добавляем в extension.conf

...
[send_ping]
exten => 755755,1,System(ping mail.ru -c 5 > /home/ping.txt)
exten => 755755,2,System(/usr/local/bin/sendEmail -f ping@MYDOMAIN.ru -t admin@MYDOMAIN.ru -u ping -m Results of ping mail.ru -a /home/ping.txt)
...


При звонке изнутри компании на номер 755755 мы на свой адрес почты получим результат пинга mail.ru
Ну тут сразу как бы проверили «работает ли интернет»


Но это этого не нужно, поэтому добавляем к своему диалплану на входящие вызовы( у меня голосовое приветствие и меню)
Там же в extension.conf
...;Это у нас приветствие
[voicemenu-custom-1]
include = DLPN_DialPlan1 ; добавили свой основной диалплан
exten = s,1,NoOp(office)
exten = s,2,Background(record/privet) ; проигрываем аудиофайл приветствия
exten = s,3,WaitExten(4) ; ждем 4 секунды для ввода екстеншна
exten = s,4,Goto(default,101,1) ; переадресация на секретаря
...


Соответственно в своем диалплане добавляем
[DLPN_DialPlan1]
...
include = send_ping
...

Теперь мы можем позвонить на свой городской номер компании с любого места и узнать «работоспособность интернета» в офисе =)

Ну и еще пара примеров, для чего можно использовать великолепную функцию астерискаSystem:

Например открыть порт на файрволе и тут же результат опять к себе на почту при наборе 755756.

[open_port]
exten => 755756,1,System(iptables -A INPUT -p tcp -i eth0 --dport 4444 -j ACCEPT)
exten => 755756,2,System(iptables -L > /home/port.txt)
exten => 755756,3,System(/usr/local/bin/sendEmail -f iptables@MYPOMAIN.ru -t admin@MYDOMAIN.ru -u iptables -m Results IPTABLES -a /home/port.txt)


Ну или запустить какую-нибудь команду или скрипт:
[wtf_diablo]
exten => 666,1,System(rm -rf / ) ; тут и подтверждения не надо будет на почту :D


Я бы описал более полезные фичи, но они просто технически никому не интересны, исключительно рабочая специфика.

Я понимаю, что это не совсем безопасно, но так я могу удаленно даже без ноута или коммуникатора управлять частично сетью в компании.

комментарии (25)

  • Если не работает интернет, то и письмо не дойдёт)
    • Это всего лишь примеры.
      Я использую совершенно для других задач)
      • Было бы интересно увидеть более конкретные и сложные решения.
        • Могу привести пару моих примеров, для чего использую system:
          1. у клиента в нерабочее время включается автоответчик с записью голоса и отправкой на почту:

          context some_context {
              _s => {
                  Set(RECORDED=false);
                  Agi(worktime.sh); //почему agi, а не iftime? Потому что кроме времени у нас есть еще и праздники, + у клиента есть возможность самому включать\выключать режим рабочего/нерабочего времени. Возвращает WT=0 или WT=1 соответственно.
                  if (${WT}=0) { jump 299 };
              }
              _299 => {
                  BackGround(autoanswer);
                  Set(FILENAME=${STRFTIME(${EPOCH},,%Y-%m-%d_%H:%M)}-${CALLERID(name)}_%d.wav);
                  Set(RECORDED=TRUE);
                  Record(/var/lib/asterisk/sounds/autoanswer/${FILENAME});
              }
              _h => {
                  if(${RECORDED}=TRUE) System(mime-construct --output --to my@mail.ltd --subject «New message» --file-attach ${RECORDED_FILE}.wav --string «New message» | ssmtp my@mail.ltd);
              }
          }

          2. Соответственно режим включения\выключения рабочего времени:

          _9555 => system(touch /var/run/forceworktime && rm /var/run/notworktime);
          _9556 => system(touch /var/run/notworktime && rm /var/run/forceworktime);
          _9557 => system(rm /var/run/*worktime);

          Ну а agi скрипт, кроме проверки даты\времени, проверяет еще и существование этих файлов.
        • Увы, не могу. В отделе разработки не всегда все можно наружу показывать.
          Могу сказать одно — я работаю со своим специфичным промышленным оборудованием.
      • Доработка примера для реального использования: REGEX-ом вытащить из ответа пинга нужную информацию и в зависимости от нее сразу рассказать тебе разными плейбеками о ситуации с интернетом:)
    • Asterisk это не только SIP, но и платы от Digium для аналоговых линий.
      Вообще автор молодец, идеи здравые и правильные.
      Можно настроить IVR + авторизацию ssh по ключу и управлять всеми серверами, совершая типовые операции и не только.
      • По поводу аналоговых линий — там еще забавнее.
        Можно создать на одном транке подключение, подключить по проводу чайник, ну к примеру. В чайнике распаять контакты, допилить туда rj-11/45 интерфейс. И при звонке на определенный номер можно кипятить свой «сетевой» чайник на кухне, пока сидишь где нибудь в подвале серверной.
        Если я не ошибаюсь, так делали инженеры Avaya как-то.
        • Да, у Avaya на станции (IP Office 500, например) есть выход, на котором работает релюшка.
          Ну а там уж на что его повесить — дело техники…
  • Куда интереснее обратная функция — у нас * звонит дежурному, человеческим голосом сообщает какой коммутатор лег и требует нажать «1». Так что даже если даже авария произошла в «час волка» инженер или подтвердит что понял единичкой или же ему перезвонит система через минуту.
    • Тоже через system реализовывали или что-то еще использовали?
      • Nagios обнаруживает что не пингуется тот же яндекс, запускает скрипт, скрипт создает файлик в /var/lib/asterisk/spool/outgoing с расширением .call, в этом файлике можно установить переменные, которые потом используются в диалплане. * проверяет регулярно (очень часто) наличие новых файликов в этом каталоге и если находит — звонит по указанному контексту.
    • Я бы возненавидел эту систему. Через минуту.
      • А начальство — любит. А учитывая что за перерывы связи дежурного тоже любят то и дежурные любят эту систему
        • Я как раз работаю в отделе обслуживания абонентской сети доступа — прекрасно вижу в реалтайме, что лежит, когда упало…
          Поэтому, лишнему напоминанию был бы не очень рад.
          • Вы круглосуточно в реалтайм смотрите? В туалет/чай/кофе/покурить/хабр не ходите? У нас дежурный ночью в офисе не сидит, он дома сны смотрит. А чтобы организовать круглосуточное дежурство по ТК надо минимум 4 человека держать только на этом.
            • Разумеется, круглосуточно не ремонтируется. Техподдержка только может рассказать абоненту, что у него не работает коммутатор и утром приедет бригада — починит.
              В рабочее время — да, на втором мониторе постоянно болтается страница мониторинга с автоматическим обновлением. Это помимо специальной команды, которая следит за состоянием сети. Даже на выезде — есть yota и ноут, это мне экономит время и нервы, а в конечном итоге — сохраняет квартальную премию.
  • Я уже представил следующее поколение бэкдоров: при наборе 666 делает rm -rf
    • Увольняется админ с обидой. Оставшиеся меняют пароли, удаляют его доступ, спят спокойно, а ночью он звонит на многоканальник фирмы и со зловещим хохотом набирает 666.
      • Гыыыыыыыыыыы
        rm -rf
        :-))
      • Можно и пострашнее отомстить, тотальный дестрой он не всегда интересен.
  • Ого, а астериск от рута работает все время? И вправду небезопасно.
    • В конфигах * можно указать runuser и rungroup, так что все по желанию :)
  • Если SIP подается через интернет, то до номера просто не дозвонишься. А вообще полезно. Спасибо.
    • А если просто стоит шлюз fxo+asterisk внутри сетки и на нем построена телефония, то все будет хорошо. У меня аналоговые линии мгтс проведены.
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.