Ubuntu и как установить средства интеграции с Hyper-V 2012

Доброго дня.

Сегодня разберем вопрос интеграции служб Hyper-V на виртуальную машину Ubuntu 14.04.
Перво на перво обновим нашу информацию об установленных пакетах.

sudo apt-get update

После обновим сами пакеты

sudo apt-get upgrade

Установим отдельно обновления безопасности

sudo unattended-upgrade
sudo apt-get install unattended-upgrades

Перезагрузим ОС

sudo reboot

В нашем случае для установки пакетов интеграции Hyper-V требуется ядро не ниже 3.16, проверяем:

uname -r
3.13.0-77-generic

Данное ядро нам не подходит, попробуем обновить:

sudo apt-get install --install-recommends linux-generic-lts-vivid

После, обновим загрузчик GRUB

sudo update-grub

Перезапустим нашу систему

sudo reboot

После запуска снова проверяем версию ядра

uname -r
3.19.0-49-generic

То что нужно. Запомним эти данные и продолжим.
Найдем пакеты соответствующий нашему ядру и начнем их установку:

sudo aptitude install hv-kvp-daemon-init linux-tools-3.19.0-49-generic
sudo aptitude install linux-cloud-tools-3.19.0.49-generic

Перезагружаем

sudo reboot

После запуска системы нужно проверить корректно ли запустились службы интеграции Hyper-V

cat /var/log/boot.log | grep Hyper
* Starting Hyper-V VSS Protocol Daemon  [ OK ]
* Starting Hyper-V KVP Protocol Daemon  [ OK ]
* Stopping Hyper-V VSS Protocol Daemon  [ OK ]
* Stopping Hyper-V KVP Protocol Daemon  [ OK ]

Убеждаемся в том, что дополнительно установленные сервисы, в частности VSS, запущены:

ps -ef | egrep "hv.*daemon"
root  1323  1  0 20:23 ?   00:00:00 /usr/lib/linux-tools/3.13.0-27-generic/hv_vss_daemon
root  1341  1  0 20:23 ?   00:00:04 /usr/lib/linux-tools/3.13.0-27-generic/hv_kvp_daemon

Статьи:
Ссылка 1

Ironport C170 блокируем архив с исполняемым файлом

Доброго дня.

Требуется оградить пользователей от разного рода вирусов в почтовых сообщениях. Часто пользователи запускают вирус получая его в почту в виде архива.
И так, имеется железка CISCO Ironport C170. Заходим в Mail Policies — Incoming Content Filters — Add Filter….
Новому фильтру Выставляем имя новому фильтру.
Добавляем условие по которому мы будем проверять сообщения — Add Conditions …
В условии выставляем, что мы будем выбирать письма которые содержат прикрепленные данные в виде архива File type is — Compressed
132408022016
Теперь требуется предпринять какие-то действия с этим письмом, для этого добавляем Add Action …
В разделе Strip Attachment by File Info в пункте File type is: выставляем Executables
132808022016
Так же в пункт Replacement Message можно добавить от себя сообщение для пользователя о том, что содержимое было заблокировано.

Exchange восстановление удаленного письма

Для того чтобы востановить письма, нужно находиться в Группе управлением обнаружением (Discovery Management). Введем команду

Add-RoleGroupMember -Identity "Discovery Management" -Member User1

Перезапускам EMS
Восстанавливаем удаленные письма, в том числе и удаленные из папки «удаленные»

Search-Mailbox "исходный ящик" -TargetMailbox целевой ящик -TargetFolder RECOVER

Исходный ящик» это тот, из которого письма удалили, целевой — тот, в который они будут восстановлены. Соответственно, всё что будет восстановлено, появится в целевом ящике в папке RECOVER. Указывать один и тот же ящик в роли исходного и целевого нельзя.
Если надо восстанавливать на все письма, а письма только с определённой темой, то синтаксис может быть таким:

Search-Mailbox "Исходный ящик" -SearchQuery subject:"Тема письма" -TargetMailbox Целевой ящик -TargetFolder Соответствующая папка

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

[PS] C:\Windows\system32>Search-Mailbox ivanov -SearchQuery "from:sidorov@gmail.com" -TargetMailbox petrov -TargetFolder RECOVER
Ключевое слово property не поддерживается.
    + CategoryInfo          : InvalidArgument: (:) [], ParserException
    + FullyQualifiedErrorId : 73EC546F

Данную ошибку можно устранить заменить параметр на Русский перевод:

[PS] C:\Windows\system32>Search-Mailbox ivanov -SearchQuery "Откого:sidorov@gmail.com" -TargetMailbox petrov -TargetFolder RECOVER

Ссылка 1

NTP

По сути когда у вас домен, время должно распространятся от корневого контролера — вниз до обычных хостов.
Корневой PDC может синхронизировать свое время как со внешним источником, так и с самим собой, последнее задано конфигурацией по умолчанию и является абсурдом, о чем периодически намекают ошибки в системном журнале.
Синхронизация клиентов корневого PDC может осуществятся как с его внутренних часов, так и с внешнего источника. В первом случае сервер времени корневого PDC объявляет себя как «надежный» (reliable).

Конфигурация NTP-сервера на корневом PDC
Конфигурирование сервера времени (NTP-сервера) может осуществляться как с помощью утилиты командной строки w32tm, так и через реестр. Где возможно, я приведу оба варианта.
Открываем ветку реестра:

HKLM\System\CurrentControlSet\services\W32Time\Parameters

Здесь в первую очередь нас интересует параметр Type, который задает тип синхронизации. Он может принимать следующие значения:
NoSync— Служба времени не синхронизируется с другими источниками.
NTP— Служба времени выполняет синхронизацию с серверами, указанными в записи реестра NtpServer.
NT5DS— Служба времени выполняет синхронизацию на основе иерархии домена.
AllSync— Служба времени использует все доступные механизмы синхронизации.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"Type"="NTP"
w32tm /config /syncfromflags:manual

В параметре NtpServer указываются NTP-сервера, с которыми будет синхронизировать время данный сервер. По умолчанию в этом параметре прописан NTP-сервер Microsoft (time.windows.com, 0?1), при необходимости можно добавить еще несколько NTP-серверов, введя их DNS имена или IP адреса через пробел. В конце каждого имени можно добавлять флаг (напр. ,0?1) который определяет режим для синхронизации с сервером времени.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"NtpServer"="server1,0x8 server2,0x8"
w32tm /config /manualpeerlist:"server1,0x8 server2,0x8"

Допускаются следующие значения режима:
0?1 – SpecialInterval, использование временного интервала опроса;
0?2 – режим UseAsFallbackOnly;
0?4 – SymmetricActive, симметричный активный режим;
0?8 – Client, отправка запроса в клиентском режиме.

Объявление NTP-сервера в качестве надежного

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"AnnounceFlags"=dword:0000000a
w32tm /config /reliable:yes

Включение NTP-сервера

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer]
"Enabled"=dword:00000001

Задание интервала синхронизации с внешним источником
Время в секундах между опросами источника синхронизации, по умолчанию 900с = 15мин. Работает только для источников, помеченных флагом 0?1.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient]
"SpecialPollInterval"=dword:00000384

Установка минимальной положительной и отрицательной коррекции
Максимальная положительная и отрицательная коррекция времени (разница между внутренними часами и источником синхронизации) в секундах, при превышении которой синхронизация не происходит. Рекомендую значение 0xFFFFFFFF, при котором коррекция сможет производиться всегда.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"MaxPosPhaseCorrection"=dword:FFFFFFFF
"MaxNegPhaseCorrection"=dword:FFFFFFFF

После настройки необходимо обновить конфигурацию сервиса. Сделать это можно командой

w32tm /config /update.

Можно узнать, насколько системное время данного компьютера отличается от времени на контроллере домена или других компьютерах. Например:

w32tm /monitor /computers:time.nist.gov

можно заставить компьютер синхронизироваться с используемым им сервером времени.

w32tm /resync

показывает разницу во времени между текущим и удаленным компьютером. Команда w32tm /stripchart /computer:time.nist.gov /samples:5 /dataonly произведет 5 сравнений с указанным источником и выдаст результат в текстовом виде.

w32tm /stripchart

основная команда, используемая для настройки службы NTP. С ее помощью можно задать список используемых серверов времени, тип синхронизации и многое другое. Например, переопределить значения по умолчанию и настроить синхронизацию времени с внешним источником, можно командой w32tm /config /syncfromflags:manual /manualpeerlist:time.nist.gov /update

w32tm /config

показывает текущие настройки службы. Например команда w32tm /query /source покажет текущий источник времени, а w32tm /query /configuration выведет все параметры службы.

w32tm /query

net stop w32time — останавливает службу времени, если запущена.
w32tm /unregister — удаляет службу времени с компьютера.
w32tm /register – регистрирует службу времени на компьютере. При этом создается заново вся ветка параметров в реестре.
net start w32time — запускает службу.

Особенности виртуализированных контроллеров домена

Контроллеры домена, работающие в виртуализированной среде, требуют к себе особенного отношения.
Средства синхронизации времени виртуальной машины и хостовой ОС должны быть выключены. Во всех адекватных системах виртуализации (Microsoft, vmWare и т. д.) присутствуют компоненты интеграции гостевой ОС с хостовой, которые значительно повышают производительность и управляемость гостевой системой. Среди этих компонентов всегда есть средство синхронизации времени гостевой ОС с хостовой, которое очень полезно для рядовых машин, но противопоказано для контроллеров домена. Потому как в этом случае весьма вероятен цикл, при котором контроллер домена и хостовая ОС будут синхронизировать друг друга. Последствия печальны.
Для корневого PDC синхронизация с внешним источником должна быть настроена всегда. В виртуальной среде часы не настолько точны как в физической, потому как виртуальная машина работает с виртуальным процессором и прерываниями, для которых характерно как замедление, так и ускорение относительно «обычной» частоты. Если не настроить синхронизацию виртуализированного корневого PDC с внешним источником, время на всех компьютерах предприятия может убегать/отставать на пару часов в сутки. Не трудно представить неприятности, которые может принести такое поведение.

Источник1,Источник 2

Exchange, каждому своя адресная книга.

Бывает что в одном домене несколько организаций. И все пользуются едиными сервером Exchange, но с разными доменами получателей. И как сделать так, чтобы одина организация не видела почтовые адреса другой организации в своей адресной книге?.

Не буду вдаваться в подробности что есть что, можете прочесть об этом тут. Я лишь выложу свое решение.

И так есть сервер. На котором много доменов. И из адресной книги одной организации нам нужно исключить несколько доменов. Запускаем EMS и вводим такую простую команду:

Get-AddressList  -Identity BookOrg1 | Set-AddressList -RecipientFilter {((((-not(EmailAddresses -like '*excample1.com')) -and (-not(EmailAddresses -like '*excample2.com')) -and (-not(EmailAddresses -like '*excample3.com')))) -and (Alias -ne$null))}

В данном примере мы взяли существующую книгу адресов и добавили в нее правило, которое исключает из данной книги все адреса в которых присутствуют указанные три домена.
Еще пример. Предположим мы завели контакты (contact) в AD (не через Exchange). И теперь хотим их отобразить в отдельной адресной книге (группе). Для понимания предстоящего решения прочтем
https://technet.microsoft.com/ru-ru/library/cc164375(v=exchg.141).aspx,тут и тут.
Т.к. контакты «не родные» для Exchange они их отображать не будет. Потребуется написать фильтр отбора данных. Для этого определимся по какому критерию мы будем делать выборку данных. В своем случае я взял имя компании. В каждом контакте в разделе Company я заполнил одну и туже информацию «Называние компании». И попытался по этому атрибуту получить список.

New-AddressList -Name BookOrg2 -RecipientFilter {(Company -like 'Называние компании')}

Еще пример, укажем контейнер где должны браться данные

>New-AddressList -Name BookOrg2 -RecipientContainer "domain.local/Accounts/Users/Отдел"

Решение проблем с Outlook Address Book

Не забываем обновить данные в Exchange

Update-AddressList BookOrg2

pfSense блокирование социальных сетей и других сайтов

Требуется ограничить доступ сотрудников к опеределенным интернет ресурсам, социальных сетей и прочее. Для решения данной задачи будем использовать такую технологию как Layer 7, на сколько мне известно, данная технология считываем первые 2 килобайта в пакете, в котором ищет указаное вхождение. Если найдено, то выполняются указанные действия.
Заходим через SSH на pfSense. Переходим в деррикторию

cd /usr/local/share/protocols/

В данном каталоге находятся паттерны, через которые идет отлов пакетов. Но нас интересует социальные сети, для них паттера нет — решаем. Для начала создадим файл с раширением .pat в который буде записано правило.

ee antisocial.pat

Важно, нужно чтобы называние файла совпадало с названием протокола объявленного в создаваемом паттере.
Запишем в наш паттер следующие строки.

# Protocol name
antisocial
# Pattern
^.+(vk.com|vkontakte|odnoklassniki|odnoklasniki|facebook).*$

Сохраняем.
Переходим к web-интерфейсу pfsense. В раздел Firewall: Traffic Shaper: Layer7. В данном разделе создаем новое правило Create new l7 rules group. Если в предыдущих пунктах все было сделано правильно, то в списке протоколов появится новый пункт antisocial.
120520150804
Теперь требуется применить это ограничение к группе адресов. В разделе правил маршрутизации создаем правило. И в пункте Layer7 выбираем наше ограничение.
120520150814
Применяем новое правило. И проверяем.

Пользователи у нас хитрые. И пытаються использовать такую богомерзкую программу как TOR, но и на это у pfsense есть достойный ответ.
Для этого установим такой инструмент как pfBlocker. После установки, находим его в разделе Firewall.
Делаем настройки как на рисунке. В разделе Inbound Interface(s) выставляем WAN интерфейс, в разделе Outbound Interface(s) указываем LAN.
Под каждым интерфейсом выставляем параметр Block
22092015

Далее в разделе Lists, указываем URL откуда будем брать списки TOR серверов, я использую для этого эту http://list.iblocklist.com/?list=tor ссылку. Вставляем ее в указаное поле, выставляем обновлять список каждый час. Сохраняем.155022092015

Все, после этого у меня ТОР перестал работать.

Asterisk, отправка факса на email

Перерыл кучу интернета, дабы добраться до истины, но ни где не нашел достойного и подробного описания с объяснением до момента «взлетела». Попробую исправить это упущение.
И так, у нас есть Ubuntu 14.04.1, Asterisk 12. Требуется настроить его на принятие факсов. Не будем использовать решение от Digium, а будем использовать spandsp в ходящее в поставку Asterisk. Но т.к. мы собирали Asterisk сами, то данный модуль у нас отсутствует. Скачаем его и пересоберем Asterisk по новой.
Скачиваем пакет spandsp

wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz

Разархивируем его

tar -xzvf spandsp-0.0.6.tar.gz

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

echo 'deb http://cz.archive.ubuntu.com/ubuntu saucy main universe' >> /etc/apt/sources.list.d/extra.list
apt-get update

Теперь установим библиотеку

apt-get install libtiff4 libtiff4-dev

Библиотека установлена, теперь перейдем не посредственно к установке spandsp. Переходим в каталог с spandsp и собираем его.

cd spandsp-0.0.6
./configure --prefix=/usr/local
make
make install

Далее нужно указать пути библиотек для системы, вносим некоторые изменения

/etc/ld.so.conf.d/spandsp.conf << EOF
/usr/local
/usr/local/lib
EOF

Собираем Asterisk с поддержкой spandsp модуля. Обратимся к статье Установка Asterisk. Для начала выполним очистку

make distclean

По новой проверим все

./configure

Перейдем не посредственно к меню добавления модулей

make menuselect

В разделе Resource Modules необходимо убедится что выбрано два модуля. res_fax и res_fax_spandsp
Сохраняем конфигурацию и пересобираем Asterisk по новой

make
make install

После запускаем новый Asterisk

service asterisk start

Заходим в консоль

asterisk -rvv

И проверяем подключены ли модули

fax show capabilities

В нормальном случае должно выглядеть так

Registered FAX Technology Modules:

Type : Spandsp
Description : Spandsp FAX Driver
Capabilities : SEND RECEIVE T.38 G.711 GATEWAY

1 registered modules

Проверим еще вот таким образом какие модули у нас загружены

module show like fax

В нормальном случае должно выглядеть так

Module                         Description                              Use Count  Status
res_fax.so                     Generic FAX Applications                 1          Running
res_fax_spandsp.so             Spandsp G.711 and T.38 FAX Technologies  0          Running
2 modules loaded

Если чуда не произошло то пытаемся перезапустить и загрузить данные модули

CLI> module reload res_fax.so
CLI> modeule load res_fax_spandsp.so

Если Asterisk выдал ошибку

Error loading module 'res_fax_psandsp.so' : libspandsp.so.2 cannot open shared object file: No such file or directory

То выходим из консоли Asterisk и вводим следующую команду

 ln /usr/local/lib/libspandsp.so.2.0.0  /lib/libspandsp.so.2

Модули подключили, а как же принять факс, и сохранить его в файл на сервере? Для этого отредактируем файл конфигурации диалплана в разделе [incoming_calls]

[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,answer()
exten => _X.,n,ReceiveFAX(/home/user/fax/rr.tif,f)

Перезапустим диалплан.

sudo asterisk -rcvv
Asterisk*CLI> dialplan reload

Пробуем отправить факс. Проверяем наличие файла в указанной директории. Идем дальше. Теперь требуется отправить данный файл на email.
Для начала установим пакет говорящий сам за себя sendemail

sudo apt-get install sendemail

Попробуем тестово отправить наше сообщение из консоли по smtp протоколу через какой нибудь сервер. Для этого нужно чтобы уже на этом сервере у нас была заведена учетная запись и пароль. В моем случае я назвал учетку fax

sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/user/fax/rr.tif"

Письмо ушло и мы получили его на той стороне. Теперь попробуем заставить это делать Asterisk
Для этого снова отредактируем фаил конфигурации диалплана. Приведем его к такому виду

[general]

[globals]

[default]

[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,Goto(fax-rx,receive,1)    ;переводим вызов на "процедуру" принятия факса

[outgoing_calls]
exten => _X.,1,Verbose(Совершается исходящий вызов)
exten => _X.,n,answer()
exten => _X.,n,Dial(SIP/Operator_SIP/${EXTEN})

[phones]
include => outgoing_calls

[fax-rx]
exten => receive,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Answer()     ;подымаем трубку
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})      ;загоняем в переменную время номер звонящего и еще какую то херь
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
; same => n,Set(FAXOPT(localstationid)=Name)
; same => n,Set(FAXOPT(maxrate)=14400)
; same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,ReceiveFAX(/home/user/fax/${FAXOPT(headerinfo)}.tif,f)
 same => n,System(sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/severin/fax/${FAXOPT(headerinfo)}.tif")
 same => n,HangUp()

Сохраняем. Перезапускаем диалплан.

sudo asterisk -rcvv
Asterisk*CLI> dialplan reload

Проверяем работспособность.

Ссылки на статьи которые я использовал:
Ссылка 1
Ссылка 2
Ссылка 3
Ссылка 4

Asterisk, совершаем первый вызов на городскую линию.

И так, Asterisk у нас работает на входящие звонки, но не работает на исходящие. Надо решать.
Для того чтобы совершать и принимать звонки (да, то что мы описывали в предыдущей статье в разделе [default] тоже работает, но после внесения изменений описанных здесь, потребность и возможность в использовании этого раздела для приема звонков отпадет) добавим конфигурацию для нашего оператора.
Т.к. у нас оператор связи работает по SIP протоколу, обратимся для редактирования к файлу sip.conf

 sudo nano /etc/asterisk/sip.conf

И внесем данные об операторе

[Operator_SIP]
type=peer               ;указываем что при получении INVITE(вызов) будем сравнивать не имя поставщика сервисов а его IP адрес
host=sipprovaider.ru    ;указываем от кого мы должны получать/отправлять INVITE
fromuser=8800000        ;имя пользователя для аутентификации
defaultuser= 8800000
secret=p@ssword$
context=incoming_calls  ;задаем контекст, на него же будем принимать звонки
dtmfmode=rfc2833        ;метод генерации тонального DTFM-кода
disallow=all            ;запрещаем все кодеки
allow=gsm               ;разрешаем кодек GSM
allow=ulaw              ;разрешаем кодек
insecure=invite         ;

Далее нам требуется отредактировать диалплан.

 sudo nano /etc/asterisk/extensions.conf

Отредактируем его до такого вида

[general]

[globals]

[default]

[incoming_calls]
exten => _X.,1,Verbose(Получен вызов с внешней линии)
exten => _X.,n,Dial(SIP/100)

Как видно в контекст

[incoming_calls]

который мы описали в sip.conf поступает звонок и мы его сразу переводим на номер 100.
Перезапустим в Asterisk конфигурационные файлы.

sudo asterisk -rcvv
AsteriskGARS*CLI> dialplan reload
AsteriskGARS*CLI> sip reload

И попробуем совершить звонок с городского номера на телефонный аппарат.
Теперь требуется совершить звонок с внутреннего номера на городской. Для этого снова отредактируем файл диалплана

 sudo nano /etc/asterisk/extensions.conf

Следующим образом. Создадим раздел [outgoing_calls].

[outgoing_calls]
exten => _X.,1,Verbose(Совершается исходящий вызов)
exten => _X.,n,Dial(SIP/Operator_SIP/${EXTEN})

${EXTEN} — переменная которая содержит набранный вами номер.
Еще один важный момент, т.к. у нас телефонный аппарат находится в контексте phones, а метод вызова находится в контексте outgoing_calls, то они между собой не связаны, для того чтобы связать между собой эти два контекста воспользуемся выражением include. Добавим в фаил extensions.conf вот такие строки

[phones]
include => outgoing_calls

Сохраняем пере запускаем конфиги и пробуем дозвониться на городские линии.

sudo asterisk -rcvv
AsteriskGARS*CLI> dialplan reload

Все должно работать.

Принимаем первый внешний звонок на внутренний номер.

И так, телефон подключен к Asterisk, а Asterisk подключен к оператору связи, теперь как бы дозвониться нам до абонента 100, с внешнего мира? Нужен Dialplan. В данном случае, мы на прямую пробросим наш городской номер на телефонный аппарат.Переименуем дефолтный файл диалплана extensions.conf

 sudo mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.backup

Создадим новый файл extensions.conf.

sudo nano /etc/asterisk/extensions.conf

Диалплан состоит из контекстов (это очень важно), кто знаком с программированием, то это сравнимо с процедурами. По умолчанию всегда имеются три контекста [general] [globals] и [default](не указывается явно).
Для решения наших целей нам нужен контекст default, добавим в него такие действия. Поступает звонок, АТС беред трубку, проигрывает звуковой файл, кладет трубку:

[general]

[globals]

[default]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии)        ;передаем произвольный текст в детальный вывод
exten => _X.,n,Answer()                                         ;поднимаем трубку
exten => _X.,n,Playback(hello-world)                            ;проигрываем звуковой файл
exten => _X.,n,Hangup()                                         ;ложим трубку

Сохраняем, перезапустим диалплан и проверим.

sudo asterisk -rcvv
dialplan reload

_X. — это шаблон, он обозначает любой набор цифр. В место шаблона можно было бы указать внешний номер нашей организации, но будем более универсальны.

Проверили, послушали приветствие, убедились что звонки с внешних линий к нам проходят. Теперь усложним: будем сразу поступающие звонки перенаправлять на внутренний номер 100. Для этого воспользуемся приложением Dial. Данное приложение пытается соединить каналы. Правим наш диалпан, заменим строчку в которой идет проигрыш звукового сигнала, на Dial.

[general]

[globals]

[default]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии)        ;передаем произвольный текст в детальный вывод
exten => _X.,n,Answer()                                         ;поднимаем трубку
exten => _X.,n,Dial(SIP/100)                                    ;переводим вызов на абонента 100
exten => _X.,n,Hangup()                                         ;ложим трубку

Сохраняем, перезапустим диалплан и проверим.

sudo asterisk -rcvv
dialplan reload

Если все правильно сделали, то должно заработать. Обращаю ваше внимание, что на исходящие звонки, с внутренних номеров на городские, наша АТС еще не настроена.

Подключение Asterisk к оператору связи

Сегодня будем пробовать подключаться к оператору связи через SIP протокол.
Так как это SIP протокол, то нам придется редактировать файл sip.conf

 sudo nano /etc/asterisk/sip.conf

Для подключения будем использовать выражение register, «данное выражение используется для регистрации вашего Asterisk на удаленном сервере».
У нас есть логин- телефон, пароль и адрес сервера для регистрации, попробуем зарегистрироваться. Делаем это в разделе [general]

[general]
register=88009999999:p@$$w0RD@sip01.serveroperator.ru

После занесения данных, сохраняем файл и пере запускаем конфигурацию sip протокола asterisk.

sudo asterisk -rcvv
sip show peers

Если не было ошибок проверяем регистрацию

Asterisk*CLI> sip show registry
Host                                    dnsmgr Username       Refresh State                Reg.Time
sip01.serveroperator.ru:5060            N      88009999999        105 Registered           Mon, 13 Apr 2015 08:23:35
1 SIP registrations.

Все ОК, мы зарегистрировались на другом сервере, в данном случае на сервере оператора.