Блог пользователя ged

Grandstream gxw4232, asterisk и перевод звонков

В связи с переездом одного офиса перевел его на IP телефонию. Т.е. получаю телефонию по SIP от Билайна, разруливаю все на астериске, часть SIP телефонов Panasonic KX-UT133, часть телефонов обычных подключеных через FXS шлюз grandstream GXW4232.

С обычными телефонами возникла проблема - входящий звонок не получалось перевести на другой телефон. Астериск писал:

No compatible codecs, not accepting this offer!

После долгих мучений, гуглений и т.д. в тщетных попытках как-то вылечить кроме кодека alaw (который использует билайн),разрешил в астериске кодек ulaw, после чего все завелось.

Не знаю, что успел поломать за время мучений, но все заработало. Из неприятного, не смог обновить прошивку на шлюзе. Вроде пробовал и через официальный сайт, и через свой tftp сервер - никаких эмоций у шлюза это не вызвало. Нужно будет стучаться в техподдержку грандстрима.

0
Your rating: Нет

Kernel panic FreeBSD 9.x на VirtualBox 4.2.x

Имеем железку с FreeBSD 9.2 amd 64 с VirtualBox ose 4.2.18. При попытке загрузить виртуальную машину с исошки FreeBSD 9.x. машина падает в Kernel Panic.

После нескольких часов безуспешных попыток, осознал, что сначала создаю виртуальную машину, без определения ее типа, а потом меняю тип на FreeBSD 64. При этом BSD 8.x грузится нормально, а 9-ке плохо.

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

P.S. Опыт такая хитрая штука, которая появляется сразу после того, как она была необходима.
(с)left bor.

0
Your rating: Нет

PianoBooster - обучение игре на клавишных инструментах.

Искал софтину, которая помогала бы освоиться с нотами, нашел классную штуку для обучения игры на клавишах по нотам - PianoBooster.

Грузишь мидишку - она рисует нотный стан, гонит музыку и позволяет/заставляет в правильное время жать правильные кнопочки, как мартышку. Если все делаешь правильно, то получаешь банан, в виде нормально звучащей композиции.

Для нормального использования, таки требуется MIDI клава, т.к. с обычной клавой как-то вообще не ассоциируется у меня.

Нашел отсюда.

0
Your rating: Нет

Копирование системы с ZFS по сети

Возникла задачка, скопировать систему с виртуальной машины на железную. Т.к. система была поставлена полность на ZFS, то соответственно, переносить захотелось силами ZFS.

Все оказалось достаточно просто. Загружаем получателя с установочного диска, входим в LiveCD, поднимаем сеть,

подготавливаем диск к загрузке

dd if=/boot/zfsboot of=/dev/ada0 count=1
dd if=/boot/zfsboot of=/dev/ada0 skip=1 seek=1024

создаем пул

zpool create -f zroot ada0

Запускаем netcat на прослушку и передачу данных в zfs

nc -l 8080 | zfs receive -vdF zpool

На рабочей машине делаем снепшот всего пула

zfs snapshot -r zroot@transfer

и запускаем zfs на отправку данных через неткат

zfs send -Rv zroot@transfer | nc new_pc_ip 8080

Некоторое время ждем, и если все хорошо, то перегружаемся.

0
Your rating: Нет

Подключаю DKIM подпись к доменной почте на exim

Продолжаю учиться играть в почту.

При фильтрации почты на спам учитывается и такой момент как подпись писем от почтового сервера.

Идейно есть две вещи DomainKey и DKIM.

Если я правильно понял, то это очень похожие вещи, но сейчас, вроде, чаще используется DKIM.

Идея заключается в том, что все письма исходящие с сервера подписываются закрытым ключем, а публичный ключ публикуется в DNS домена.

Все настраивал по статье "Exim + DKIM на примере FreeBSD 8.2", но как обычно вышло все не без затыков.

Момент первый - куда втыкать.

 Эти строки нужно вставить в секцию remote_smtp транспорта, а не протокола:

  dkim_domain           = DKIM_DOMAIN
  dkim_selector         = YouSelectorName
  dkim_private_key      = DKIM_PRIVATE_KEY

Гуглится легко, но таки время.

Момент второй - как прописывать публичный ключ в DNS.

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

0
Your rating: Нет

Учусь использовать Sieve для фильтрации почты на сервере

В связи с тем, что в очередной раз пытаюсь вспомнить как играют с почтой на exim и dovecot, захотелось, чтобы сервер автоматически раскладывал почту по папочкам.

Вроде статей много, как это сделать, но все они упускают 2-а момента:

  1. У пользователся обязательно должен быть так называемый основной скрипт, который все остальные скрипты запускает. В основном, его обзывают ".dovecot.sieve"  и лежит он в корне пользовательского каталога почты. Его содержимое простое до ужаса:
    require ["include"];
    include :personal "my_file_script";

    Соответственно, все файлики со скриптами нужно перечислить, без этого ничего не запустится, сколько бы клевых скриптов не было создано.
  2. Когда пытался из ThunderBird сделать правила, то проблема встала с папочками с русскими именами, ну как обычно. Я пытался использовать не их русское имя, а брать имя из свойства папки, т.е. что-то типа "%26BBgEQQRFBD4ENARPBEkEOAQ1-", что оказалось, хоть и волне логично, но совершенно не верно. Нужно было указывать имя папки русскими буковками, разделяя папочка точками.

После этого, вроде уже нормально все зашуршало.

0
Your rating: Нет

Asterisk: Лимитирование звонков по каналу.

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

Нарисовал 2-а макроса. Первый для учета количества звонков и их длительности, второй для выбора  необходимого транка.

1. Учет звонков.

Учитываем только отвеченные

[macro-count_dial_from_trunk]
exten => s,1,NoOp(${CDR(duration)} ${CDR(billsec)})

; Enable call limit control ?
exten => s,n,GotoIf($[${DB(trunk/${NAME_TRUNK}/day/limit-enable)} = 1 ]?:noanswer)
exten => s,n,GotoIf($[${DIALSTATUS} = ANSWER ]?:noanswer)

exten => s,n,Set(foo=${CUT(CDR(dstchannel),,1)})
exten => s,n,Set(foo=${CUT(foo,/,2)})

exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call-time)})}]?:continue_call-time)
exten => s,n,Set(DB(trunk/${foo}/day/call-time)=0)
exten => s,n(continue_call-time),Set(DB(trunk/${foo}/day/call-time)=$[${DB(trunk/${foo}/day/call-time)}+${CDR(billsec)}])

exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call)})}]?:continue_call)
exten => s,n,Set(DB(trunk/${foo}/day/call)=0)
exten => s,n(continue_call),Set(DB(trunk/${foo}/day/call)=$[ ${DB(trunk/${foo}/day/call)} + 1 ])

exten => s,n(noanswer),Verbose(4,Call count:${DB(trunk/${foo}/day/call)} - time(s):${DB(trunk/${foo}/day/call-time)})

2. Проверка превышения лимита

0
Your rating: Нет

Оповещение пользователей Asterisk о звонке на почту и jabber

Захотелось извещать пользователей Asterisk о поступающих им звонках. Наваял такой макрос:

[macro-notice_by_call]
exten => s,1,Verbose(4,Starting notification macros)
exten => s,n,Set(TIME_STRING=${STRFTIME($EPOCH,,%d %B %Y -  %T)})
exten => s,n,Set(SUBJECT_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}))
exten => s,n,Set(MESSAGE_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}). Time: ${TIME_STRING})

exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)})}]?skip_jabber_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)}=0]?skip_jabber_notification)
exten => s,n,jabbersend(asterisk,${DB(abonent/${MACRO_EXTEN}/jabber)},${MESSAGE_STRING})
${STRFTIME($EPOCH,,${TIME_STRING})})
exten => s,n(skip_jabber_notification),NoOp(No need jabber notification)
 
exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_email)})}]?skip_email_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_email)}=0]?skip_email_notification)
exten => s,n,system(echo "${MESSAGE_STRING}" | mail -s "${SUBJECT_STRING}" ${DB(abonent/${MACRO_EXTEN}/email)});
exten => s,n(skip_email_notification),NoOp(No need email notification)

Соответственно, в базе данных астериска должна быть информация о контактах пользователей. Пытаться использовать почту из конфигурационного файла я не захотел, т.к. это может быть разная почта.

0
Your rating: Нет

Играюсь в анонимность в сети

Пока разбирался с OpenVPN и с чем его едят, узнал что он очень популярен для поднятия VPNа с целью скрытия своего IP адреса.

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

Из того что понравилось:

VPN Gate

цитата с хабра:

VPN Gate — академический эксперимент Проект представляет собой интернет-сервис как научных исследований в Высшей Школе Университета Цукуба, Япония. Цель данного исследования заключается в расширении знаний «Глобальные Распределенные открытый ретранслятор Сервера VPN».

Как говорит автор, целью проекта было помочь пользователям в странах, где действует государственная цензура интернет-трафика. VPN Gate так же бесплатен и открыт для всех желающих, как и Tor. С момента запуска в пятницу всего за пять дней сервисом воспользовались 77 тыс. пользователей, сгенерировав около четырёх терабайт трафика, так что спрос на бесплатные VPN явно присутствует.

0
Your rating: Нет

Учусь пользоваться OpenVPN

Начал разбираться, чем и как лучше поднимать шифрованные тунели. Один из вариантов OpenVPN.

На вскидку плюсы и минусы:

Плюсы:

  • по описаниям, надежное шифрование
  • использование одного порта для работы или UDP или TCP, может работать через прокси сервер
  • автоматически поддерживает соединение, т.е. не надо контролировать обрывы связи
  • позволяет управлять роутингом клиентов
  • разные механизмы авторизации: логин/пароль, ключи, сертификаты X.509
  • кросплатформенность
  • открытость
  • возможность поиграться в PKI
  • возможность как P2P (маршрутизируемого) соединения, так и моста (при необходимости прокинуть не IP трафик или прохождения широковещательных пакетов)

Минусы:

  • Отдельный продукт, который необходимо устанавливать, а не работает "искаропки", что требует определенных привилегий
  • Не совсем привычная настройка
  • не получилось повесить один сервер на разные порты (возможно, руки кривые)

По сертификатам X.509

Создаем/получаем корневой доверенный сертификат, с помощью которого, подписываем сертификаты клиентов и серверов.

По умолчанию, мы верим, что все сертификаты подписанные корневым правильные и им верим. Т.е. ключ от корневого сертификата нужно хранить в тайне и куда-нибудь прятать.

Клиент и сервер определяются по их личным сертификатам, ключам и именам в сертификате (Common Name).

0
Your rating: Нет
Ленты новостей