<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF120%3AAsterisk</id>
		<title>LXF120:Asterisk - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF120%3AAsterisk"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF120:Asterisk&amp;action=history"/>
		<updated>2026-05-13T03:53:20Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF120:Asterisk&amp;diff=10379&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF120:Asterisk&amp;diff=10379&amp;oldid=prev"/>
				<updated>2010-06-16T06:45:57Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Hardcore Linux''' Проверьте себя на крутом проекте для продвинутых пользователей&lt;br /&gt;
&lt;br /&gt;
==''Asterisk'': Телефон под контролем==&lt;br /&gt;
&lt;br /&gt;
: Нырните с '''Максом Бруксом''' в мир телефонии с открытым кодом, ''Asterisk'' и стаю орущих мартышек.&lt;br /&gt;
&lt;br /&gt;
Кто из нас не желал бы послать в ответ на рекламный обзвон визг стаи мартышек, или эхом повторить то, что вам сказали? Симпатична ли вам идея, чтобы каждый член вашей семьи имел личный добавочный номер и голосовую почту? А может, вы предпочитаете создать белый список людей, чьи звонки вас осчастливят даже после 10 вечера?&lt;br /&gt;
&lt;br /&gt;
''Asterisk'' метко назвали звездой Open Source в быстро расширяющейся вселенной VoIP-коммуникаций. До мелочей настраиваемая и порой соответственно сложная, это также идеальная система для экспериментов, и она умеет делать все вышеперечисленное. Этот учебник безболезненно проведет вас через создание собственной домашней PBX VoIP ['''мини-АТС, — прим. пер.'''] с ''Asterisk''. Начав с простой базовой системы, вы получите выбор, какие функции нужно будет добавить.&lt;br /&gt;
&lt;br /&gt;
===Приступим===&lt;br /&gt;
&lt;br /&gt;
Для запуска ''Asterisk'' прежде всего необходим компьютер – к счастью, очень скромный насчет ресурсов: сойдет любое старье с чердака (или, как в моем случае, из-под кровати); а не то установите его на ваш медиасервер Linux, притаившийся в прихожей. Правда, для подключения вашей мини-АТС к имеющейся телефонной линии при установке на медиа-сервер может потребоваться полноразмерная PCI-карта, но это единственная неприятность. Если вы не собираетесь этого делать, медиа-центр – идеальный выбор.&lt;br /&gt;
&lt;br /&gt;
Вариантов установки ''Asterisk'' несколько; вы можете развернуть специально созданный дистрибутив, типа '''Asterisk@Home''', или просто установить пакет для вашей ОС. Я буду исходить из того, что вы добавляете пакеты на свой медиа--сервер и не хотите переустановливать Linux, так как только недавно заставили все красиво работать. В Fedora 10 (который я использую здесь), этот трюк проделает простое&lt;br /&gt;
&lt;br /&gt;
 sudo yum install asterisk&lt;br /&gt;
&lt;br /&gt;
Заклинание для Ubuntu –&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install asterisk asterisk-sounds-main asterisk-sounds-extra&lt;br /&gt;
&lt;br /&gt;
установит все необходимые файлы, включая звуковые. Если вы используете графическую утилиту установки, не помешает добавить все доступные пакеты для &lt;br /&gt;
''Asterisk''.&lt;br /&gt;
&lt;br /&gt;
===Базовая система===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF120_81_1.jpg|300px]] На первый взгляд — жуть, но если присмотреться поближе, то все проясняется.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Итак, куда мы двинемся? Сперва создадим простую конфигурацию ''Asterisk'', пригодную в качестве основы для последующего обвешивания нужными вам функциями. Эта базовая схема включает всего один SIP-телефон, аппаратный либо программный, и вы сможете звонить по нему через Интернет при помощи VoIP-провайдера.&lt;br /&gt;
&lt;br /&gt;
Провайдеров VoIP на свете хватает – и хороших, и плохих, и совсем никудышных. Хорошие дадут вам возможность использовать IAX, родной VoIP-протокол ''Asterisk'', который лучше работает в NAT-окружении – с ним вы можете столкнуться, если занимаетесь этим дома. Через прокси, протокол IAX также&lt;br /&gt;
поддерживает другие решения с открытым исходным кодом. Поддержка буфера колебаний задержки в IAX2 также более зрелая, чем в SIP-версии. Если&lt;br /&gt;
ваш VoIP-провайдер не позволяет использовать IAX, или если качество линии плохое, я бы порекомендовал связаться с ближайшим LUG, чтобы&lt;br /&gt;
разузнать про что-нибудь приличное поблизости. Чем меньше будут хаять, тем лучше. &lt;br /&gt;
&lt;br /&gt;
Для вашей системы ''Asterisk'' можно применить чисто программный SIP-телефон, если в компьютере есть микрофон и динамик. Можно приобрести для этого&lt;br /&gt;
специальную гарнитуру, но будет гораздо лучше вложиться в покупку сугубо аппаратного SIP-телефона – например, одной из базовых моделей&lt;br /&gt;
Linksys или Grandstream: надо ли вам, чтобы компьютер постоянно занимался приемом и передачей звонков? Тем более, если у вас не по компьютеру на каждого&lt;br /&gt;
человека, желающего поговорить. В более дорогих моделях аппаратных SIP-телефонов есть функции, которые нужны только в офисе, например, поддержка&lt;br /&gt;
нескольких линий, поэтому хорошенько подумайте, прежде чем тратить лишние деньги. &lt;br /&gt;
&lt;br /&gt;
Система настройки ''Asterisk'' довольно проста; файлы конфигурации сохраняются в '''/etc/asterisk''', и для каждого протокола и схемы набора (dialplan) есть отдельный конфигурационный файл. Самые важные из них – '''extensions.conf''' и '''extensions.ael'''. В них вы определяете схему набора – иными&lt;br /&gt;
словами, помещаете туда то, что должно происходить, когда звонок идет в систему или из нее. Различаются эти файлы синтаксисом. Расширение '''.ael''' – сокращение от Asterisk Extension Language, этот язык допускает более глубокую настройку и легче читается, чем сложный файл '''.conf'''. Оба файла&lt;br /&gt;
при необходимости могут быть использованы вместе. ''Asterisk'' устанавливается вместе с настройками по умолчанию и множеством полезных комментариев&lt;br /&gt;
в файлах конфигурации, и это первый пункт, где стоит искать подсказку, если вы застряли. &lt;br /&gt;
&lt;br /&gt;
===Пляшем с телефоном===&lt;br /&gt;
&lt;br /&gt;
Прежде чем окончательно погрязнуть, разберем несколько общих вещей в файлах конфигурации: ''';''' обозначает комментарий; опции, определяемые в начале&lt;br /&gt;
файла, применяются ко всем нижележащим частям, пока не встретится явная перезапись. Звучит сложновато, но на практике имеет немалый смысл.&lt;br /&gt;
&lt;br /&gt;
Чтобы сообщить ''Asterisk'' о вашем SIP-телефоне, добавьте запись в '''/etc/asterisk/sip.conf'''. Вы должны сделать это от имени root, так как по  молчанию файлы ''Asterisk'' принадлежат суперпользователю. Предлагаю воспользоваться простым редактором командной строки, типа ''Nano'', но, конечно,&lt;br /&gt;
если вы исповедуете религию ''Vi'' или ''Emacs'', изменять им незачем.&lt;br /&gt;
&lt;br /&gt;
 $ su -&lt;br /&gt;
 $ nano /etc/asterisk/sip.conf&lt;br /&gt;
&lt;br /&gt;
Прокрутив страницу вниз и увидев кучу доступных опций, можно прийти в недоумение и даже слегка струхнуть; но не бойтесь. Упомянутые пункты&lt;br /&gt;
довольно просты и легко понимаемы, что и ценно, потому что почти все файлы конфигурации ''Asterisk'' следуют тем же простым правилам. &lt;br /&gt;
&lt;br /&gt;
 [general]&lt;br /&gt;
&lt;br /&gt;
Это отметка начала раздела, который в файле конфигурации ''Asterisk'' называется контекстом. Здесь может быть несколько опций, таких как&lt;br /&gt;
&lt;br /&gt;
 context=default ; Контекст по умолчанию для входящих звонков&lt;br /&gt;
 bindport=5060 ; UDP-порт для связи (стандартный порт SIP для незашифрованных сессий UDP &lt;br /&gt;
 ; и TCP это 5060)&lt;br /&gt;
 ; bindport это локальный UDP порт, который ''Asterisk'' будет слушать&lt;br /&gt;
&lt;br /&gt;
Смысл темен? Не беда – позже все прояснится. Существуют два слегка различных синтаксиса добавления записей в '''sip.conf'''. Первый использует&lt;br /&gt;
шаблоны и гораздо больше подходит для систем с большим количеством записей '''sip.conf''', поэтому мы его пропустим и перейдем к способу попроще. Вот пример записи в '''sip.conf''':&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=В исходящем контексте имя – это регулярное выражение (это обозначено префиксом '''_''').|Ширина=150px}}&lt;br /&gt;
&lt;br /&gt;
 [myhouse]&lt;br /&gt;
 type=friend ; Может быть “friend” (peer+user), “peer” или “user”&lt;br /&gt;
 context=incoming&lt;br /&gt;
 host=dynamic ; Вы можете задать здесь IP-адрес&lt;br /&gt;
 username=username ; Имя пользователя на устройстве SIP&lt;br /&gt;
 secret=blah ; пароль на устройстве SIP&lt;br /&gt;
 nat=no ; Нет NAT между телефоном и ''Asterisk''&lt;br /&gt;
 canreinvite=yes ; разрешить передачу трафика RTP, минуя ''Asterisk''&lt;br /&gt;
 &lt;br /&gt;
Можно скопировать и вставить данный пример в конец (но не в начало – при создании конфигурации в ''Asterisk'' это имеет значение) файла '''sip.conf''', просто изменив переменные '''username''' и '''secret''' на действительные, и этого должно быть достаточно.&lt;br /&gt;
&lt;br /&gt;
Приведенный пример должен быть понятен сам по себе или по крайней мере с комментариями: по существу, вы задали SIP-устройство с параметрами его конфигурации. При желании вы могли бы изменить переменную '''context''' в '''[general]''' на&lt;br /&gt;
&lt;br /&gt;
 context=incoming&lt;br /&gt;
&lt;br /&gt;
а затем удалить эту строку из вышеуказанной конфигурации. Запишите ваши изменения в файл и закройте его.&lt;br /&gt;
&lt;br /&gt;
Надеемся, вы нашли себе VoIP-провайдера, поддерживающего протокол IAX; если нет, следуйте инструкциям, но редактируйте файл '''sip.conf''', добавляя в него сведения о SIP-услугах. Пример записи в '''iax.conf''' выглядит так:&lt;br /&gt;
&lt;br /&gt;
 [provider] ; Контекст с именем provider&lt;br /&gt;
 type=peer&lt;br /&gt;
 username=userid&lt;br /&gt;
 secret=blah&lt;br /&gt;
 host=iax.provider-example.net ; имя хоста вашего поставщика услуг&lt;br /&gt;
&lt;br /&gt;
Это напоминает синтаксис '''sip.conf''' (на самом деле, почти все файлы конфигурации ''Asterisk'' выглядят похоже), где основным дополнением будет опция '''host''', которую должен предоставить поставщик услуг. Отредактируйте и сохраните файл, как и раньше.&lt;br /&gt;
&lt;br /&gt;
===Совершаем звонок===&lt;br /&gt;
&lt;br /&gt;
Возможно, вы заметили, что мы фактически не сказали ''Asterisk'', что делать, получив вызов, или как установить соединение через свеженастроенного VoIP-провайдера. Как я уже намекнул, это волшебство происходит в файле '''/etc/extensions.conf''' за счет использования так называемых приложений схемы набора. Мы сейчас рассмотрим очень простой пример, и позднее вы сможете добавить некоторые интересные функции. Нам нужны два основных контекста в '''extensions.conf''':&lt;br /&gt;
&lt;br /&gt;
 [outgoing]&lt;br /&gt;
 exten =&amp;gt; _0[1-9].,1,Dial(IAX2/userid@&lt;br /&gt;
 provider/44${EXTEN:1})&lt;br /&gt;
 exten =&amp;gt; _00.,1,Dial(IAX2/userid@provider/${EXTEN:2})&lt;br /&gt;
 [incoming]&lt;br /&gt;
 exten =&amp;gt; s,1,Answer()&lt;br /&gt;
 exten =&amp;gt; s,n,Dial(SIP/myhouse)&lt;br /&gt;
 exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
Если у вас есть опыт программирования, то вышеприведенный текст будет вам более понятен. Основной шаблон для определения расширения выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
 exten =&amp;gt; name,priority,application()&lt;br /&gt;
&lt;br /&gt;
Во входящих расширениях существует специальное имя, '''s''' (обозначает старт), соответствующее всем номерам, направляемым в контекст, и особый приоритет, '''n''', который принимает предыдущий приоритет плюс один и сбрасывается в каждом новом расширении. Не так уж сложно разобраться, что входящее расширение отвечает на все направленные на него вызовы, затем набирает SIP-телефон, настроенный в контексте '''myhouse''', а после завершения вызова вешает трубку.&lt;br /&gt;
&lt;br /&gt;
Неплохо будет добавить в вашу схему набора отладочный номер, чтобы проверить, работает ли она хотя бы частично. Звуковой файл '''ss-weasels''' находится в пакете '''asterisk-sound-extra''' в вашей соответствующей установке.&lt;br /&gt;
&lt;br /&gt;
 exten =&amp;gt; 8888,1,Answer()&lt;br /&gt;
 exten =&amp;gt; 8888,n,Playback(ss-weasels)&lt;br /&gt;
 exten =&amp;gt; 8888,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
===Подключение к линии===&lt;br /&gt;
&lt;br /&gt;
Подключение вашего компьютера с новехоньким ''Asterisk'' к имеющейся телефонной линии, возможно, единственная сложная операция с устройством ''Asterisk''. У нас недостаточно места, чтобы описать все детали, но мы включили ссылки на дополнительную информацию в конце этого учебника. Для подключения существующей телефонной линии к вашему компьютеру с ''Asterisk'' вам необходимы конкретные аппаратные средства. Такую аппаратуру делает целый ряд компаний, и наиболее широко известна из них Digium, которая финансирует развитие ''Asterisk'', так что работа их карт с ''Asterisk'' гарантируется. Но стоят они дорого, и такая цена может показаться вам неоправданно высокой, потому что существуют решения типа Atcom AX-100P, который раз в двадцать дешевле.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF120_82_1.jpg|300px]]Это противно интуиции, но устройство FXO использует связь FXS, и наоборот.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Основная сложность этой задачи зависит от видов используемой связи. На вашей карте PSTN можно найти два типа аппаратных портов или устройств: FXO и FXS. Устройство FXS подключается к порту FXO на существующем аналоговом телефоне и использует связь FXO. И наоборот, устройство FXO подключается к устройствам FXS или розеткам, а использует связь FXS.&lt;br /&gt;
&lt;br /&gt;
Вплоть до версии ''Asterisk 1.6'' драйвер ядра для устройств Digium назывался Zaptel, а затем по соображениям авторских прав его переименовали на Dahdi. Так как Dahdi – всего лишь название, то при возникновении трудностей заодно поищите в Google насчет проблем, связанных с Zaptel.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать и установить Dahdi, надо будет установить драйвер (модуль ядра) для вашей карты. Правильный модуль ядра для карты Digium найдется в списке на http://docs.tzafrir.org.il/dahdi-linux. Затем понадобится настроить использование правильных способов связи, как описано выше. Полезную информацию для этого можно найти в '''/proc/dahdi''' и использовать ее для редактирования файлов конфигурации в '''/etc/dahdi'''. Используйте инструмент ''dahdi_test'' для проверки вашей конфигурации.&lt;br /&gt;
&lt;br /&gt;
===Добавляем голосовую почту===&lt;br /&gt;
&lt;br /&gt;
Добавление голосовой почты – штука несложная; нужно изменить три конфигурационных файла. С двумя первыми все просто до изумления, а третий чуть сложнее. Файл конфигурации голосовой почты находится в стандартном '''/etc/asterisk/''', и предсказуемо называется '''voicemail.conf'''. Прежде всего, укажите номер почтового ящика в '''sip.conf''':&lt;br /&gt;
&lt;br /&gt;
 mailbox=1234@default ; ящик 1234 В контексте голосовой почты “default”&lt;br /&gt;
&lt;br /&gt;
Затем нужно задать почтовый ящик в '''voicemail.conf''', поэтому запустите следующую команду в терминале ''Bash'' от root:&lt;br /&gt;
&lt;br /&gt;
 echo “200 =&amp;gt; 1234,Your Name,email@address” &amp;gt;&amp;gt; /etc/asterisk/voicemail.conf&lt;br /&gt;
&lt;br /&gt;
Если у вас несколько телефонов, то умно будет обозначить почтовые ящики пользователей их же внутренними добавочными номерами, а затем использовать эти номера для переключения голосовой почты динамически в схеме набора, вместо того, чтобы каждый раз прописывать подобные строки.&lt;br /&gt;
&lt;br /&gt;
 exten =&amp;gt; 777,1,VoicemailMain()&lt;br /&gt;
 exten =&amp;gt; 777,n,Hangup&lt;br /&gt;
 ; Набор 777 позволит вам прослушать свои голосовые сообщения&lt;br /&gt;
 [macro-voicemail]&lt;br /&gt;
 exten =&amp;gt; s,2,Goto(s-$DIALSTATUS},1)&lt;br /&gt;
 exten =&amp;gt; s-NOANSWER,1,Voicemail(u${MACRO_EXTEN})&lt;br /&gt;
 exten =&amp;gt; s-NOANSWER,2,Hangup()&lt;br /&gt;
 exten =&amp;gt; s-BUSY,1,Voicemail(b${MACRO_EXTEN})&lt;br /&gt;
 exten =&amp;gt; s-BUSY,2,Hangup()&lt;br /&gt;
 exten =&amp;gt; _s-.,1,Goto(s-NOANSWER,1)&lt;br /&gt;
&lt;br /&gt;
===Мартышки против обзвонов===&lt;br /&gt;
&lt;br /&gt;
А сейчас – повеселимся: создадим «черный» список, запретив кое-кому доставать вас звонками. На словах не особенно впечатляюще, но это полезная вещь. Лица из черного списка будут перенаправляться на звуки, издаваемые стаей обезьян, а телефон при этом звонить не будет. Признаюсь, идею про орущих обезьян я придумал не сам: этот звуковой файл поставляется с ''Asterisk'' в дополнительном звуковом пакете. Соответствующие строки были добавлены в текст ниже:&lt;br /&gt;
&lt;br /&gt;
 [incoming]&lt;br /&gt;
 exten =&amp;gt; s,1,LookupBlacklist(j)&lt;br /&gt;
 exten =&amp;gt; s,n,Dial(SIP/myhouse)&lt;br /&gt;
 exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
 exten =&amp;gt; s,102,Goto(blacklisted,s,1)&lt;br /&gt;
 [blacklisted]&lt;br /&gt;
 exten =&amp;gt; s,1,Answer()&lt;br /&gt;
 exten =&amp;gt; s,n,Playback(tt-monkeys)&lt;br /&gt;
 exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
В ''Asterisk'' нет встроенного приложения для «белых» списков, в отличие от «черных». Это более расплывчатая концепция. Мы используем «белый» список людей, которые могут звонить вам в определенное время, например, только с мобильных телефонов детей после 10 вечера. Предположим, номеру '''01225 888888''' разрешается звонить в любое время:&lt;br /&gt;
&lt;br /&gt;
 [incoming]&lt;br /&gt;
 exten =&amp;gt; s,1,GotoIfTime(9:00-22:00|mon-fri|*|*?whitelist,s,1)&lt;br /&gt;
 exten =&amp;gt; s,2,Answer()&lt;br /&gt;
 exten =&amp;gt; s,n,Dial(SIP/myhouse)&lt;br /&gt;
 exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
 [whitelist]&lt;br /&gt;
 exten =&amp;gt; s,1,GotoIf($[“${CALLERID(num)}” = “01225888888”]?incoming,s,2)&lt;br /&gt;
&lt;br /&gt;
===Советы, секреты и починка===&lt;br /&gt;
&lt;br /&gt;
Я покамест не охватил параметры командной строки ''Asterisk''. Для запуска командной строки ''Asterisk'' выполните&lt;br /&gt;
&lt;br /&gt;
 asterisk -c&lt;br /&gt;
&lt;br /&gt;
для возобновления связи –&lt;br /&gt;
&lt;br /&gt;
 asterisk -r&lt;br /&gt;
&lt;br /&gt;
Остановка ''Asterisk'' отличается от выхода из оболочки, поэтому здесь необходима команда возобновления. Ввод&lt;br /&gt;
&lt;br /&gt;
 asterisk &amp;gt; stop now&lt;br /&gt;
&lt;br /&gt;
в командной строке ''Asterisk'' остановит сервер ''Asterisk'', а команда '''exit''' просто выведет вас из оболочки.&lt;br /&gt;
&lt;br /&gt;
Вас, вероятно, интересует, зачем вообще ''Asterisk'' командная строка. Причина номер один – поиск неисправностей и развитие. Вы можете собрать из командной строки важную информацию о текущем состоянии вызова с номера, а также обновить файлы конфигурации без перезапуска ''Asterisk'', набрав&lt;br /&gt;
&lt;br /&gt;
 asterisk &amp;gt; module reload&lt;br /&gt;
&lt;br /&gt;
Поздравляем, теперь у вас полная власть над своим телефоном.&lt;br /&gt;
&lt;br /&gt;
===Что дальше?===&lt;br /&gt;
&lt;br /&gt;
''Asterisk'' – чрезвычайно сложная и настраиваемая система. У нас просто не хватит здесь места, чтобы рассказать вам об ''Asterisk'' все: на это потребуется целая книга, и на самом деле такая уже написана. Она называется Asterisk: the Future of Telephony ['''Asterisk: будущее телефонии'''], издана O’Reilly и имеет версию в PDF-формате, доступную на http://www.asteriskdocs.org.&lt;br /&gt;
&lt;br /&gt;
Еще одна важная ссылка (я нашел ее при разработке системы ''Asterisk'') – это вики на http://www.voip-info.org/wiki-Asterisk&lt;br /&gt;
&lt;br /&gt;
'''LXF'''&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>