<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tamkovich.com: Телеком/VoIP блог &#187; SIP</title>
	<atom:link href="http://tamkovich.com/tag/sip/feed/" rel="self" type="application/rss+xml" />
	<link>http://tamkovich.com</link>
	<description>Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys</description>
	<lastBuildDate>Mon, 30 Jan 2012 11:42:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Защита Asterisk от SIP атак с помощью iptables</title>
		<link>http://tamkovich.com/2011/06/defending-asterisk-from-sip-flood-with-iptables/</link>
		<comments>http://tamkovich.com/2011/06/defending-asterisk-from-sip-flood-with-iptables/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 16:46:23 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=2170</guid>
		<description><![CDATA[Думаю все слышали про программу Fail2ban, а некоторые даже умеют настраивать её для работы с логом Asterisk. Действительно, вылавливая строки вида &#171;failed for &#8217;127.0.0.1&#8242; &#8211; Wrong password&#187; и &#171;failed for &#8217;127.0.0.1&#8242; &#8211; Peer is not supposed to register&#187; &#8211; можно существенно сократить количество мусорного SIP трафика. Однако, есть несколько неприятных ситуаций, в которых анализ лога [...]]]></description>
			<content:encoded><![CDATA[<p align=justify>
Думаю все слышали про программу <a href=/2009/04/asterisk-sip-security/ >Fail2ban</a>, а некоторые даже умеют настраивать её для работы с логом <a href=http://tamkovich.com/asterisk/ >Asterisk</a>.  Действительно, вылавливая строки вида &laquo;failed for &#8217;127.0.0.1&#8242; &#8211; Wrong password&raquo; и &laquo;failed for &#8217;127.0.0.1&#8242; &#8211; Peer is not supposed to register&raquo; &#8211; можно существенно сократить количество мусорного <a href=http://tamkovich.com/tag/sip/ >SIP</a> трафика. Однако, есть несколько неприятных ситуаций, в которых анализ лога <a href=http://tamkovich.com/asterisk/ >Asterisk</a> не поможет. Например, в случае когда злоумышленник посылает запрос REGISTER без идентификационных данных &#8211; в логе никогда не появится сообщение &laquo;Wrong password&raquo;.
</p>
<p align=justify>
Лично я не особо боюсь того, что к моей системе подберут пароль одного из клиентов. Вероятность данного события мала, поскольку все пароли в системе стойкие. И даже если пароль подберут, у большинства клиентов установлено ограничение на 1-2 одновременных вызова. Для меня неприятность <a href=http://tamkovich.com/tag/sip/ >SIP</a> брутфорса заключается в другом. Дело в том, что в <a href=http://tamkovich.com/asterisk/ >Asterisk</a> вся <a href=http://tamkovich.com/tag/sip/ >SIP</a> UDP сигнализация обрабатывается одним единственным тредом. Обработка <a href=http://tamkovich.com/tag/sip/ >SIP</a> трафика &#8211; ресурсоёмкий процесс, 7-8 мегабит мусорных запросов заставляют <a href=http://tamkovich.com/asterisk/ >Asterisk</a> полностью скушать ядро процессора (например Intel E5335, E5405). Когда ядро полностью съедено, происходит вытеснение полезного <a href=http://tamkovich.com/tag/sip/ >SIP</a> трафика &#8211; мусорным. Перестают работать DTMF у клиентов использующих <a href=http://tamkovich.com/tag/sip/ >SIP</a> INFO. Начинаются проблемы с установкой новых и завершением существующих соединений. И вот это &#8211; основная угроза которую несут роботы-брутфорсеры.
</p>
<p><span id="more-2170"></span></p>
<p align=justify>
Так как же бороться с проблемами о которых нет сообщений в логах? Очень просто &#8211; необходимо сгенерировать сообщение о проблеме самому, тогда всю остальную часть нашей системы противодействия (например программу fail2ban) можно будет оставить без изменений. Характерным признаком брутфорса является большое количество <a href=http://tamkovich.com/tag/sip/ >SIP</a> пакетов в единицу времени. Посчитать количество пакетов в единицу времени можно с помощью модуля iptables под названием recent. В интернете есть много примеров как с помощью модуля recent отбрасывают пакеты приходящие с частотой выше определённой. Мы, вместо отбрасывания, будем генерировать сообщения для нашей системы обнаружения атак (например fail2ban). Такой подход имеет свои недостатки и преимущества. Основным недостатком является, то что на обработку сообщений будут тратиться ресурсы системы, тогда как отбрасывание пакета условно бесплатное. Преимуществ чуть больше: мы сможем воспользоваться всеми возможностями нашей системы обнаружения атак, такими как белые списки IP адресов, единообразный учёт всех обнаруженных атак и так далее.
</p>
<p align=justify>
От теории &#8211; к практике! Подготовим скелет из правил iptables:</p>

<div class="wp_syntax"><div class="code"><pre class="iptables" style="font-family:monospace;">-A INPUT -p udp --dport 5060 -j SCAMBLOCK
-A INPUT -p udp --dport 5060 -m recent --set --name SIP
-A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \
-j LOG --log-prefix &quot;SIP flood detected: &quot;</pre></div></div>

<p>Первое правило проверяет наш пакет по цепочке SCAMBLOCK. В данной цепочке хранятся заблокированные IP адреса, если пакет совпадает с одним из адресов этой цепочки &#8211; он отбрасывается. Если пакет не отброшен, то во втором правиле он помечается для учёта под именем <a href=http://tamkovich.com/tag/sip/ >SIP</a>. Третье правило считает не превысил ли данный пакет указанное количество (60) за указанное время (2 секунды). Если количество не превышено &#8211; правило игнорируется, если превышено &#8211; выполняется действие. В нашем случае в системный лог пишется детальная информация о пакете начинающаяся со строки &laquo;<a href=http://tamkovich.com/tag/sip/ >SIP</a> flood detected: &laquo;. Количество пакетов и время считаются отдельно для каждого источника. Таким образом получается, что мы ограничили скорость приёма <a href=http://tamkovich.com/tag/sip/ >SIP</a> пакетов от каждого незаблокированного IP адреса на уровне 30 пакетов в секунду. Для меня данное ограничение является комфортным, с одной стороны все клиенты, даже самые крупнные, шлют пакеты с одного IP адреса со скоростями ниже 30 пакетов/с, с другой стороны, 30 пакетов в секунду практически не отражаютя на работе системы. Возможно, что эту величину следует подправлять в ту или иную сторону в зависимости от производительности сервера, количества и типа абонентов.
</p>
<p align=justify>
В некоторых системах встроенное ограничение модуля recent на параметр hitcount весьма небольшое, например в CentOS это ограничение составляет 20 пакетов. Если вы попробуете выполнить приведенную выше команду, то получите следующую ошибку:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> udp <span style="color: #660033;">--dport</span> <span style="color: #000000;">5060</span> <span style="color: #660033;">-m</span> recent <span style="color: #660033;">--update</span> <span style="color: #660033;">--seconds</span> <span style="color: #000000;">2</span> <span style="color: #660033;">--hitcount</span> <span style="color: #000000;">60</span> <span style="color: #660033;">--name</span> SIP \
<span style="color: #660033;">-j</span> LOG <span style="color: #660033;">--log-prefix</span> <span style="color: #ff0000;">&quot;SIP flood detected: &quot;</span>
iptables: Unknown error <span style="color: #000000;">4294967295</span></pre></div></div>

<p>Или вот так, для 64 битных систем:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> udp <span style="color: #660033;">--dport</span> <span style="color: #000000;">5060</span> <span style="color: #660033;">-m</span> recent <span style="color: #660033;">--update</span> <span style="color: #660033;">--seconds</span> <span style="color: #000000;">2</span> <span style="color: #660033;">--hitcount</span> <span style="color: #000000;">60</span> <span style="color: #660033;">--name</span> SIP \
<span style="color: #660033;">-j</span> LOG <span style="color: #660033;">--log-prefix</span> <span style="color: #ff0000;">&quot;SIP flood detected: &quot;</span>
iptables: Unknown error <span style="color: #000000;">18446744073709551615</span></pre></div></div>

<p>Изменить максимальное ограничение можно передав модулю recent специальный параметр при загрузке. Для этого создадим файл /etc/modprobe.d/ipt.conf и пропишем в нём интересующий нас параметр:</p>

<div class="wp_syntax"><div class="code"><pre class="modprobe" style="font-family:monospace;">options ipt_recent ip_pkt_list_tot=60</pre></div></div>

<p>Будьте осторожны увеличивая данное ограничение, помните что вместе с ним увеличивается память, требуемая для хранения последних пакетов, а также количество циклов процессора требуемые на их обработку.
</p>
<p align=justify>
Ну вот и всё, теперь любой флуд на порт 5060 будет обнаружен с помощью модуля recent пакета iptables. Сообщение об обнаруженном флуде будет направлено в системный лог где его сможет увидеть наша любимая система обнаружения атак (например fail2ban). iptables не ограничивает нас одним лишь системным логом, действию LOG можно указать уровень (level) и facility сообщения, а в настройках Syslog перенаправить данные сообщения в отдельный файл. Сами же сообщения о <a href=http://tamkovich.com/tag/sip/ >SIP</a> флуде будут выглядеть вот так:
</p>

<div class="wp_syntax"><div class="code"><pre class="log" style="font-family:monospace;">Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT= MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:7f:08:00 SRC=184.172.62.3 DST=192.168.224.217 LEN=370 TOS=0x00 PREC=0x00 TTL=47 ID=0 DF PROTO=UDP SPT=5495 DPT=5060 LEN=350
Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT= MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:7f:08:00 SRC=184.172.62.3 DST=192.168.224.217 LEN=369 TOS=0x00 PREC=0x00 TTL=47 ID=0 DF PROTO=UDP SPT=5495 DPT=5060 LEN=349
Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT= MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:7f:08:00 SRC=184.172.62.3 DST=192.168.224.217 LEN=370 TOS=0x00 PREC=0x00 TTL=47 ID=0 DF PROTO=UDP SPT=5495 DPT=5060 LEN=350</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2011/06/defending-asterisk-from-sip-flood-with-iptables/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Самые популярные SIP клиенты в 2010 году</title>
		<link>http://tamkovich.com/2010/11/most-popular-sip-clients-useragents-2010/</link>
		<comments>http://tamkovich.com/2010/11/most-popular-sip-clients-useragents-2010/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 11:05:42 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[ITSP]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1597</guid>
		<description><![CDATA[Цыплят, как известно, считают по осени. Месяц ноябрь &#8211; самое время для подведения итогов за прошедший год. Как я писал раньше &#8211; в CDR можно и нужно сохранять дополнительные поля. Я, например, среди прочих, сохраняю SIP заголовок Useragent для каждого звонка. И вот теперь, есть возможность проанализировать &#8211; чем пользуются клиенты IP телефонии? какой софт/железо [...]]]></description>
			<content:encoded><![CDATA[<p align=justify>
Цыплят, как известно, считают по осени. Месяц ноябрь &#8211; самое время для подведения итогов за прошедший год. Как я писал раньше &#8211; <a href=http://tamkovich.com/2009/04/asterisk-sip-security/ >в CDR можно и нужно сохранять дополнительные поля</a>. Я, например, среди прочих, сохраняю <a href=http://tamkovich.com/tag/sip/ >SIP</a> заголовок Useragent для каждого звонка. И вот теперь, есть возможность проанализировать &#8211; чем пользуются клиенты IP телефонии? какой софт/железо наиболее популярны среди любителей протокола <a href=http://tamkovich.com/tag/sip/ >SIP</a>?
</p>
<p align=justify>
В качестве исходных данных были взяты CDR трёх Российских операторов связи, предоставляющих возможность подключиться к ТФОП по протоколу <a href=http://tamkovich.com/tag/sip/ >SIP</a>. CDR были взяты за период с 1 ноября 2009 года по 1 ноября 2010 года. Исходные данные были подвергнуты простейшей обработке &#8211; агрегации. Так, например, записи содержащие в Useragent значения CUCM, <a href=http://tamkovich.com/cisco/ >Cisco</a>-CCM4.1, <a href=http://tamkovich.com/cisco/ >Cisco</a>-CCM5.1 &#8211; были объединены под общим названием CUCM/<a href=http://tamkovich.com/cisco/ >Cisco</a> Call Manager, различные версии оборудования Linksys &#8211; Linksys/SPA1001-3.1.19(SE), Linksys/SPA8000-6.1.3 и прочие &#8211; под общим названием Linksys и так далее.
</p>
<p align=justify>
После агрегации &#8211; настало время раздавать призовые места. Критерий места &#8211; очень простой, кто сделал больше всех трафика &#8211; тот и молодец. На картинке  наша двадцатка лидеров выглядит вот так:
</p>
<p><span id="more-1597"></span><br />
<img src=/wp-content/uploads/2010/11/useragents.png border=0 align=center ></p>
<p align=justify>
По оси Х отложены % от Совокупного трафика. Кому недостаточно картинки, тот может посмотреть на конкретные цифры:
</p>
<p><center></p>
<table border=1 cellspacing=0 width=500>
<tr>
<td><b>Место</b></td>
<td><b>Useragent</b></td>
<td><b>% от трафика</b></td>
</tr>
<tr>
<td>1</td>
<td><a href=http://tamkovich.com/asterisk/ >Asterisk</a></td>
<td>42,91</td>
</tr>
<tr>
<td>2</td>
<td>Linksys</td>
<td>23,16</td>
</tr>
<tr>
<td>3</td>
<td>Без названия</td>
<td>18,14</td>
</tr>
<tr>
<td>4</td>
<td>CUCM/<a href=http://tamkovich.com/cisco/ >Cisco</a> Call Manager</td>
<td>8,75</td>
</tr>
<tr>
<td>5</td>
<td>MERA</td>
<td>2,39</td>
</tr>
<tr>
<td>6</td>
<td><a href=http://tamkovich.com/cisco/ >Cisco</a>-SIPGateway</td>
<td>1,82</td>
</tr>
<tr>
<td>7</td>
<td>T38Modem</td>
<td>0,79</td>
</tr>
<tr>
<td>8</td>
<td>IP PBX</td>
<td>0,43</td>
</tr>
<tr>
<td>9</td>
<td>OxO_GW_710</td>
<td>0,35</td>
</tr>
<tr>
<td>10</td>
<td>AddPac <a href=http://tamkovich.com/tag/sip/ >SIP</a> Gateway</td>
<td>0,28</td>
</tr>
<tr>
<td>11</td>
<td>Oktell</td>
<td>0,27</td>
</tr>
<tr>
<td>12</td>
<td>3CXPhoneSystem</td>
<td>0,22</td>
</tr>
<tr>
<td>13</td>
<td>Zoiper</td>
<td>0,17</td>
</tr>
<tr>
<td>14</td>
<td>eyeBeam/X-Lite</td>
<td>0,08</td>
</tr>
<tr>
<td>15</td>
<td>InfiNet Switch</td>
<td>0,07</td>
</tr>
<tr>
<td>16</td>
<td>D-Link</td>
<td>0,03</td>
</tr>
<tr>
<td>17</td>
<td>OmniPCX</td>
<td>0,03</td>
</tr>
<tr>
<td>18</td>
<td>kfdslfklekore</td>
<td>0,02</td>
</tr>
<tr>
<td>19</td>
<td>Audiocodes</td>
<td>0,02</td>
</tr>
<tr>
<td>20</td>
<td>WLan800</td>
<td>0,02</td>
</tr>
</table>
<p></center></p>
<p align=justify>
Серьёзные пацаны на ЛОРе решают &#8211; дорос ли <a href=http://tamkovich.com/asterisk/ >Asterisk</a> до ентерпрайза или нет, и на сколько  далёк он ещё от CUCM/<a href=http://tamkovich.com/cisco/ >Cisco</a> Call Manager, а тем временем, этот самый недорощенный <a href=http://tamkovich.com/asterisk/ >Asterisk</a> забрал на себя 42% трафика, а значит реальных денег. Богато представлено оборудование под названием Linksys &#8211; российские пользователи IP телефонии по достоинству оценили высокое качество при минимальной цене. Судя по тому что в двадцатку попал T38Modem &#8211; каждый 150ый звонок совершаемые в России по IP телефонии &#8211; это отправка спама по факсу :) Удивил чрезвычайно низкий процент трафика приходящийся на оборудование D-Link. Судя по частоте упоминания в рунете, железки D-Link должны встречаться на порядок чаще оборудования Linksys. Вероятно голосовые шлюзы D-Link, в отличие от Linksys, предназначены не для передачи голоса по IP, а для общения в соответствующих форумах :)</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/11/most-popular-sip-clients-useragents-2010/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Тестируем SIP Redirect Server с помощью sipp</title>
		<link>http://tamkovich.com/2010/09/benchmarking-redirect-server-with-sipp/</link>
		<comments>http://tamkovich.com/2010/09/benchmarking-redirect-server-with-sipp/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 09:27:51 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[Kamailio]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[sipp]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1517</guid>
		<description><![CDATA[Замечательная утилита sipp сегодня принадлежит корпорации HP. Утилита эта используется для генерации потока звонков по протоколу SIP. Сценарий по умолчанию подразумевает стандартный поток SIP ообщений: Отправляем INVITE, получаем ответы с кодами 100, 180, 183 и 200. Дождавшись ответа с кодом 200, отправляем подтверждение ACK. Выдерживаем паузу (в нашем случае &#8211; 0 миллисекунд) и отправляем сообщение [...]]]></description>
			<content:encoded><![CDATA[<p align=justify>
Замечательная утилита sipp сегодня принадлежит корпорации HP. Утилита эта используется для генерации потока звонков по протоколу <a href=http://tamkovich.com/tag/sip/ >SIP</a>. Сценарий по умолчанию подразумевает стандартный поток <a href=http://tamkovich.com/tag/sip/ >SIP</a> ообщений: Отправляем INVITE, получаем ответы с кодами 100, 180, 183 и 200. Дождавшись ответа с кодом 200, отправляем подтверждение ACK. Выдерживаем паузу (в нашем случае &#8211; 0 миллисекунд) и отправляем сообщение BYE. Для сообщения BYE дожидаемся ответа с кодом 200.
</p>
<pre>
                                 Messages  Retrans   Timeout   Unexpected-Msg
      INVITE ---------->         16        0         0
         100 <----------         0         0         0         16
         180 <----------         0         0         0         0
         183 <----------         0         0         0         0
         200 <----------  E-RTD1 0         0         0         0
         ACK ---------->         0         0
       Pause [      0ms]         0                             0
         BYE ---------->         0         0         0
         200 <----------         0         0         0         0
</pre>
<p><span id="more-1517"></span></p>
<p align=justify>
Данный сценарий не очень подходит для тестирования серверов перенаправления (redirect server). Дело в том, что на любой запрос клиента (INVITE, REGISTER и т.д.) сервер перенаправления, как правило, выдает ответ с кодом 300 (Multiple Choices) или 302 (Moved Temporarily). В сценарии по умолчанию, ответы с данными кодами попадают в категорию "Unexpected Messages" - неожиданных сообщений. В целом тестировать нагрузку можно и так, когда ваш сервер перестанет справляться с нагрузкой, цифра в колонке Timeout начнёт возрастать. Однако при таком подходе, невозможно отличить ответы с кодами 300 и 302 от других "неожиданных ответов".
</p>
<p align=justify>
Вторым недостатком использования теста по умолчанию, является его синтетичность. Все звонки инициированные по этому сценарию - идентичны между собой. Т.е. имеют одинаковые поля From, To, Contact и т.д. Результаты такого теста, могут сильно отличаться от реальности, т.к. одно единственное значение полей From, To, Contact - наверняка попадет в кеш тестируемой системы.
</p>
<p align=justify>
На помощь нам приходит чрезвычайная гибкость утилиты sipp. Дело в том, что пользователь может создать свой собственный, произвольный сценарий тестирования и описать его используя XML. Кроме того, существует возможность подставлять в <a href=http://tamkovich.com/tag/sip/ >SIP</a> сообщения, генерируемые программой sipp данные из внешних источников - CSV файлов. Прочитать подробности о создании собственных сценариев, можно на <a href=http://sipp.sourceforge.net/doc/reference.html#xmlsyntax >официальном сайте</a> программы sipp. Здесь же, в качестве примера, я приведу сценарий, используемый мной для тестирования производительности сервера перенаправления (<a href=http://tamkovich.com/tag/sip/ >SIP</a> Redirect Server).
</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;ISO-8859-1&quot;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;scenario</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Redirect Scenario&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;send</span> <span style="color: #000066;">retrans</span>=<span style="color: #ff0000;">&quot;500&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
     <span style="color: #339933;">&lt;![CDATA[</span>
&nbsp;
<span style="color: #339933;">      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0</span>
<span style="color: #339933;">      Via: SIP/2.0/[transport] [local_ip]:[local_port]</span>
<span style="color: #339933;">      From: [field0] &lt;sip:[field0]@[local_ip]:[local_port]&gt;;tag=[call_number]</span>
<span style="color: #339933;">      To: sut &lt;sip:[service]@[remote_ip]:[remote_port]&gt;</span>
<span style="color: #339933;">      Call-ID: [call_id]</span>
<span style="color: #339933;">      Cseq: 1 INVITE</span>
<span style="color: #339933;">      Contact: sip:[field0]@[local_ip]:[local_port]</span>
<span style="color: #339933;">      Max-Forwards: 70</span>
<span style="color: #339933;">      Subject: Performance Test</span>
<span style="color: #339933;">      Content-Type: application/sdp</span>
<span style="color: #339933;">      Content-Length: [len]</span>
&nbsp;
<span style="color: #339933;">      v=0</span>
<span style="color: #339933;">      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]</span>
<span style="color: #339933;">      s=-</span>
<span style="color: #339933;">      t=0 0</span>
<span style="color: #339933;">      c=IN IP[media_ip_type] [media_ip]</span>
<span style="color: #339933;">      m=audio [media_port] RTP/AVP 0</span>
<span style="color: #339933;">      a=rtpmap:0 PCMU/8000</span>
&nbsp;
<span style="color: #339933;">    ]]&gt;</span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/send<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;recv</span> <span style="color: #000066;">response</span>=<span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #000066;">optional</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/recv<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;recv</span> <span style="color: #000066;">response</span>=<span style="color: #ff0000;">&quot;302&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/recv<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/scenario<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p align=justify >
Пару слов о структуре данного сценарий. Внутри сценария присутствует 1 тег send и 2 тега recv. Тег send описывает запрос отправляемый программой sipp, теги recv - возможные ответы на отправленное сообщение. В теге send присутствует конструкция &lt;![CDATA[ ... ]]&gt; Внутри которой находится тело отправляемого запроса. В теле запроса присутствует большое количество переменных sipp (слова в квадратных скобках). Большинство из них будет подставлено утилитой sipp автоматически. Наибольший интерес для нас представляет переменная <b>[field0]</b>. Перед отправкой на место данного ключевого слова подставляется первое поле из внешнего источника (CSV файла). Для того, что бы использовать этот сценарий, необходимо выполнить:
</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">sipp <span style="color: #660033;">-sf</span> redirect.xml <span style="color: #660033;">-inf</span> uids.csv <span style="color: #660033;">-s</span> <span style="color: #000000;">1010</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-r</span> <span style="color: #000000;">2000</span> 10.10.1.4</pre></div></div>

<p align=justify >
Здесь redirect.xml - файл, содержащий наш сценарий. uids.csv - файл содержащий большое количество имён пользователей (как верных так и неверных). Именно из файла uids.csv подставляется первое поле взамен ключевого слова [field0]. Именно благодаря этому файлу мы уходим от синтетического сценария ближе к реальности, моделируя ситуацию в которой большое количество абонентов звонит на один и тот же номер. С помощью параметра -s 1010 указывается номер на который будут совершаться вызовы. Значение параметра -s подставляется вместо ключевого слова [service]. Если в сценарии заменить [service] на [field1] то можно смоделировать ситуацию, в которой множество абонентов совершает вызовы множества (различных) номеров. Параметр -l 0 - снимает ограничение на количество активных звонков в единицу времени. Параметр -r 2000 устанавливает скорость инициирования новых вызовов (CPS) - 2000 вызовов в секунду. Ну а 10.10.1.4 это, как несложно догадаться, IP адрес тестируемого сервера.
</p>
<p align=justify >
Так же приведу пример файла users.csv. Первой строкой в файле указывается ключевое слово, в нашем случаем - RANDOM. Это слово, определяет в каком порядке будут использованы строки файла. На сегодня возможны варианты: RANDOM - случайно, SEQUENTIAL - последовательно и специальное USER. Итак, вот он файл:
</p>

<div class="wp_syntax"><div class="code"><pre class="csv" style="font-family:monospace;">RANDOM
100;
101;
102;
103;
104;
...
11998;
11999;</pre></div></div>

<p align=justify >
Обратите внимание на ';' - для работы с sipp рекомендую включать в csv файлы пустую колонку в конец таблицы. Иначе, есть риск, что sipp добавит к полю виндовый \r. Например вместо имени пользователя "100" будет подставляться "100\r", что может изменить результаты тестирования. Если строк в вашем файле выходит слишком много, генерировать такой файл ненужно. Существует возможность описать последовательность значений в виде формулы. Например вот такая запись будет эквивалентна CSV файлу с цифрами от 0 до 100 000 в первой колонке:
</p>

<div class="wp_syntax"><div class="code"><pre class="csv" style="font-family:monospace;">USERS,PRINTF=100000
%d</pre></div></div>

<p align=justify >
Реальный тест с использованием приведенного сценария выглядит вот так:
</p>
<pre>
[root@voiptest ~]# sipp -sf redirect.xml -inf uids.csv -s 1010 -l 0 -r 2000 10.10.1.4
Resolving remote host '10.10.1.4'... Done.
------------------------------ Scenario Screen -------- [1-9]: Change Screen --
  Call-rate(length)   Port   Total-time  Total-calls  Remote-host
2000.0(0 ms)/1.000s   5060      49.63 s        99272  10.10.1.4:5060(UDP)

  1270 new calls during 0.636 s period   0 ms scheduler resolution
  0 calls (limit 0)                      Peak was 40 calls, after 2 s
  0 Running, 66004 Paused, 0 Woken up
  0 dead call msg (discarded)            5 out-of-call msg (discarded)
  1 open sockets

                                 Messages  Retrans   Timeout   Unexpected-Msg
      INVITE ---------->         99272     1         0
         300 <----------         0         0         0         0
         302 <----------         99272     0         0         0
</pre>
<p align=justify >
Удачного тестирования!</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/09/benchmarking-redirect-server-with-sipp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eyeBeam и X-Lite не понимают перенаправления 3XX (300, 302 и т.д.)</title>
		<link>http://tamkovich.com/2010/08/eyebeam-xlite-doesnt-understand-3xx-300-302-responses/</link>
		<comments>http://tamkovich.com/2010/08/eyebeam-xlite-doesnt-understand-3xx-300-302-responses/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 09:09:26 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[Kamailio]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1474</guid>
		<description><![CDATA[Казалось бы X-Lite (он же eyeBeam) от фирмы CounterPath, один из самых распространённых софтфонов, не должен содержать детских ошибок в работе с SIP proxy, но к сожалению это не так. X-Lite/eyeBeam принципиально не умеет работать с перенаправляющими (Redirect) серверами. Перенаправляющие SIP сервера, это как правило SIP proxy, настроенные таким образом, что бы на запросы клиентов [...]]]></description>
			<content:encoded><![CDATA[<p><img src=/wp-content/uploads/2010/08/counterpath.png align=right ></p>
<p align=justify >
Казалось бы X-Lite (он же eyeBeam) от фирмы CounterPath, один из самых распространённых софтфонов, не должен содержать детских ошибок в работе с <a href=http://tamkovich.com/tag/sip/ >SIP</a> proxy, но к сожалению это не так. X-Lite/eyeBeam принципиально не умеет работать с перенаправляющими (Redirect) серверами. Перенаправляющие <a href=http://tamkovich.com/tag/sip/ >SIP</a> сервера, это как правило <a href=http://tamkovich.com/tag/sip/ >SIP</a> proxy, настроенные таким образом, что бы на запросы клиентов отвечать кодами 3XX (как правило 300 &laquo;Multiple Choices&raquo; или 302 &laquo;Moved Temporarily&raquo;) &#8211; перенаправляя клиента на наименее загруженный сервер.
</p>
<p align=justify >
При попытке зарегистрироваться на сервере перенаправления, X-lite пишет на своём экране: &laquo;Registration error: 302 &#8211; Redirect&raquo;. Прямо скажем коды 3XX не являются ошибками, однако X-Lite/eyeBeam считает иначе. Если мы посмотрим wireshark-ом, то увидим следующее:
</p>
<p><span id="more-1474"></span><br />
<center><img src=/wp-content/uploads/2010/08/xlite-wireshark.gif ></center></p>
<p align=justify >
При попытке зарегистрироваться на балансировщике нагрузки (192.168.14.198), X-Lite (192.168.1.114) получает перенаправление на адрес 192.168.14.207. После этого X-Lite, в соответствии с RFC3261, должен сформировать новый <a href=http://tamkovich.com/tag/sip/ >SIP</a> запрос и отправить его по новому адресу (192.168.14.207). Как показывает wireshark, X-Lite формирует новый <a href=http://tamkovich.com/tag/sip/ >SIP</a> запрос, подставляя в него адрес полученный от балансировщика нагрузки. Однако, вместо того что бы отправить его по соответствующему IP адресу, X-Lite продолжает использовать IP адрес <a href=http://tamkovich.com/tag/sip/ >SIP</a> proxy. Судя по форуму CounterPath, этой проблеме более 2х лет.
</p>
<p align=justify >
Что же другие продукты от CounterPath? eyeBeam, как и следовало ожидать, ведёт себя точно так же как X-Lite, т.е. некорректно обрабатывает редиректы. А вот дорогущий Bria Professional вероятно использует другое ядро, отличное от eyeBeam/X-Lite посколько он правильно работает с перенаправлениями. Что делать? как быть? &#8211; Заплатить 50 баксов за Bria Professional или поставить Zoiper. Zoiper корректно отрабатывает перенаправления 3XX полученные от Kamailio.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/08/eyebeam-xlite-doesnt-understand-3xx-300-302-responses/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Настройка Linksys SPA3102</title>
		<link>http://tamkovich.com/2010/08/linksys-spa3102/</link>
		<comments>http://tamkovich.com/2010/08/linksys-spa3102/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 11:31:20 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[fxo]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1432</guid>
		<description><![CDATA[Мне очень нравится оборудование Linksys, у него замечательное соотношение цена/качество, его без проблем можно приобрести в России. Однако у него есть 2 больших недостатка: почти полное отсутствие документации и отвратительная работа устройств с FXO портами. К сожалению, со вторым пунктом сделать ничего нельзя, а вот официальную документацию (которой нет :) ) можно вполне заменить документацией [...]]]></description>
			<content:encoded><![CDATA[<p align=justify >
Мне очень нравится оборудование Linksys, у него замечательное соотношение цена/качество, его без проблем можно приобрести в России. Однако у него есть 2 больших недостатка: почти полное отсутствие документации и отвратительная работа устройств с FXO портами. К сожалению, со вторым пунктом сделать ничего нельзя, а вот официальную документацию (которой нет :) ) можно вполне заменить документацией созданной пользователями. Одной из таких инструкций является всеобъемлющая <a href=http://www.fredshack.com/docs/linksys_3102.html >памятка</a> по настройке устройства Linksys SPA3102, найденная на сайте Fred&#8217;s Shack.
</p>
<p><center><img src=/wp-content/uploads/2010/08/spa3102.jpg ></center></p>
<ul>
<li> <a href=http://www.fredshack.com/docs/linksys_3102.html >Linksys 3102 for Dummies</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/08/linksys-spa3102/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Своя сотовая связь с помощью OpenBTS</title>
		<link>http://tamkovich.com/2010/07/cellular-network-with-openbts/</link>
		<comments>http://tamkovich.com/2010/07/cellular-network-with-openbts/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 12:17:03 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[GSM]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1385</guid>
		<description><![CDATA[Многим специалистам по IP-телефонии, сотовая связь кажется чем-то очень сложным и недосягаемым. Проект OpenBTS позволит на практике понять как работает сотовая связь, и даже организовать свою мини-соту. OpenBTS можно условно разделить на несколько уровней. Для приёма и передачи GSM сигнала используется USRP. Платы USRP поддерживают установку расширений (дочерних плат). Дочерние платы позволяют USRP принимать и [...]]]></description>
			<content:encoded><![CDATA[<p align=justify >
Многим специалистам по IP-телефонии, сотовая связь кажется чем-то очень сложным и недосягаемым. Проект OpenBTS позволит на практике понять как работает сотовая связь, и даже организовать свою мини-соту. OpenBTS можно условно разделить на несколько уровней. Для приёма и передачи GSM сигнала используется <a href=http://en.wikipedia.org/wiki/USRP >USRP</a>.
</p>
<p><center><br />
<img src=/wp-content/uploads/2010/07/usrp.jpg ><br />
</center><br />
<span id="more-1385"></span></p>
<p align=justify >
Платы USRP поддерживают установку расширений (дочерних плат). Дочерние платы позволяют USRP принимать и передавать сигнал на различных частотах. Например, для работе в стандарте GSM850/900 потребуется два модуля <a href= >RFX900</a>. Для взаимодействия OpenBTS с железом, используется библиотека libusrp. Далее, с помощью библиотек oSIP и oRTP, OpenBTS создаёт <a href=http://tamkovich.com/tag/sip/ >SIP</a> звонки, которые, в свою очередь, направляются в <a href=http://tamkovich.com/asterisk/ >Asterisk</a>. В качестве имени пользователя, OpenBTS подставляет уникальный номер IMSI (International Mobile Subscriber Identity), записанный на SIM-карту.
</p>
<p align=justify >
Более подробно о проекте <a href=http://openbts.sourceforge.net/ >The OpenBTS Project</a> можно кзнать в его <a href=http://gnuradio.org/redmine/wiki/gnuradio/OpenBTS >wiki</a>, которая является частью проекта GNU Radio.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/07/cellular-network-with-openbts/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SIP + H.264 для iPhone4 (Apple FaceTime)</title>
		<link>http://tamkovich.com/2010/06/sip-h264-for-iphone4-apple-facetime/</link>
		<comments>http://tamkovich.com/2010/06/sip-h264-for-iphone4-apple-facetime/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 08:34:22 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Железо]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1334</guid>
		<description><![CDATA[С момента презентации iPhone4, в интернете появилась масса спекуляций на тему того, что такое FaceTime и как оно работает. Пишут разное, в основном, как водится, глупости. Что же показал Джобс? Джобс показал набор технологий, скрывающихся за названием FaceTime: Как говорится: имеющий глаза да увидит! Тем не менее коротко пробежимся по перечисленным технологиям. H.264 и AAC [...]]]></description>
			<content:encoded><![CDATA[<p align=justify>
С момента презентации iPhone4, в интернете появилась масса спекуляций на тему того, что такое FaceTime и как оно работает. Пишут разное, в основном, как водится, глупости. Что же показал Джобс? Джобс показал набор технологий, скрывающихся за названием FaceTime:
</p>
<p><center><img src=/wp-content/uploads/2010/06/factime.png border=0 ></center><br />
<span id="more-1334"></span></p>
<p align=justify>
Как говорится: имеющий глаза да увидит! Тем не менее коротко пробежимся по перечисленным технологиям. H.264 и AAC &#8211; кодеки для видео и аудио. Многие блогеры пишут про H.263 &#8211; нагло врут. Другая часть блогеров распинается в стенаниях по поводу несвободности H.264 &#8211; полностью игнорируя несвободный AAC. <a href=http://tamkovich.com/tag/sip/ >SIP</a> &#8211; малоизвестный протокол сигнализации IP телефонии. STUN, TURN и ICE &#8211; технологии для работы с NAT-ом. Кстати то, как связываются два iPhone4, находящиеся за NAT-ом &#8211; большая загадка, но об этом позже. RTP и SRTP &#8211; протоколы передачи медиа (звук и видео) &#8211; обычный и &laquo;безопасный&raquo; &#8211; с поддержкой шифрования.
</p>
<p align=justify>
Смешно читать комментарии вроде &laquo;FaceTime &#8211; бяка, лучше буду пользоваться IP телефонией&raquo;. Друзья, FaceTime это и есть IP телефония. Другой смешной шуткой является сравнение 3G видео звонков, которые действительно не новы и FaceTime от Apple. Это технологии разного уровня и разного времени. 3G видео звонки это H.324M &#8211; наследие ISDN видеоонференций разработанных в 90е. FaceTime это <a href=http://tamkovich.com/tag/sip/ >SIP</a> и H.264 &#8211; наиболее прогрессвиные технологии связи и кодирования видео на сегодня.
</p>
<p align=justify>
Таким образом, мы имеем <a href=http://tamkovich.com/tag/sip/ >SIP</a> телефон интегрированный в iOS4 &#8211; и это замечательно! Да, сегодня в AppStore существует большое количество <a href=http://tamkovich.com/tag/sip/ >SIP</a> телефонов в т.ч. и бесплатных. Лично мне нравится Adore <a href=http://tamkovich.com/tag/sip/ >SIP</a> Client. Но у всех этих приложений есть один общий недостаток &#8211; они не интегрированы в iOS, а значит нельзя позвонить из стандартной телефонной книги через <a href=http://tamkovich.com/tag/sip/ >SIP</a>, для входящих звонков не отображаются фото и имя звонящего и т.п. Неизвестно, будут ли все эти возможности реализованы в новом iPhone4, ведь распространятся он будет как и предыдущие &#8211; залоченым на AT&#038;T. Оператор врядли обрадуется уводу дорогого трафика в VoIP сети. Однако, раз <a href=http://tamkovich.com/tag/sip/ >SIP</a> video клиент уже в iPhone4, не составит никакого труда интегрировать его с телефонной книгой и с другими базовыми возможностями iPhone &#8211; надеюсь так и будет сделано.
</p>
<p align=justify>
Пока нет данных о том, как именно взаимодействуют данные технологии под общим названием FaceTime &#8211; попробуем пофантазировать. Для того что бы совершить <a href=http://tamkovich.com/tag/sip/ >SIP</a> звонок надо во-первых, передать <a href=http://tamkovich.com/tag/sip/ >SIP</a> сообщение от абонента A к абоненту B, а во-вторых установить передачу медиа (звук и видео) между абонентами. Для усложнения задачи, предположим что каждый абонент сидит за NAT-ом на своей точке доступа. Основные вопросы к Facetime: <b>Как устанавливается прямая медиа-сессия между абонентами за NAT-ом?</b>, <b>Каким образом абонент А, узнаёт IP адрес абонента B?</b>, <b>Если в схеме связи участвует <a href=http://tamkovich.com/tag/sip/ >SIP</a> сервер (proxy или registrar) &#8211; каким образом происходит авторизация?</b>
</p>
<p align=justify>
Для преодоления NAT-а, iPhone4 поддерживает такие замечательные технологии как STUN, TURN и ICE. Последняя, к примеру, позволяет устанавливать прямой обмен данными между абонентами, находящимися за NAT-ом. Вариант передачи медиа-трафика, с помощью третьих лиц (абонентов имеющих реальный IP адрес) &#8211; по аналогии со Skype &#8211; маловероятен. Во-первых, процессор A4, используемый в iPhone4, откровенно слаб для подобных фокусов. Во-вторых Apple заявляет о своем желании сделать FaceTime индустриальным стандартом и привлечь других вендоров. Надеяться что все вендоры которые будут использовать FaceTime &#8211; будут по честному пропускать трафик NAT-абонентов через абонентов с реальными IP &#8211; было бы слишком наивно.
</p>
<p align=justify>
Каким образом абоненты узнают адреса своих контрагентов для установки видео соединения? Первое, что приходит в голову, это специальная посылка, с помощью обычного модема своих сетевых параметров противоположной стороне. А затем попытка прямого <a href=http://tamkovich.com/tag/sip/ >SIP</a> соединения двух абонентов по Wi-Fi (IP) сети.
</p>
<p align=justify>
Другой альтернативой данному подходу, может быть использование централизованного <a href=http://tamkovich.com/tag/sip/ >SIP</a> сервера. Как известно протокол <a href=http://tamkovich.com/tag/sip/ >SIP</a> обладает потрясающей масштабируемостью. По заявлениям автора Kamailio, их программный продукт, работающий на средненьком по современным меркам сервере, способен обслужить звонки от SanFrancisco Bay Area (население 7.5 млн чел). Компании уровня Apple не составит труда разместить десяток <a href=http://tamkovich.com/tag/sip/ >SIP</a> серверов работающих в качестве регистраторов, для сообщения IP адресов абонентам, желающим установить видеосоединение.
</p>
<p align=justify>
Однако использование <a href=http://tamkovich.com/tag/sip/ >SIP</a> серверов поднимает несколько вопросов. Прежде всего это авторизация. Для того что бы телефон зарегистрировался на <a href=http://tamkovich.com/tag/sip/ >SIP</a> сервере, ему необходимо использовать для этого некий уникальный идентификатор. Идентификатор не проблема с ходу в голову приходят: AppleID, MAC, IMEI или, например, серийный номер SIM карты. Сложность состоит в том, что тот кто пытается установить соединение с вами, должен знать ваш идентификатор. Ситуация ещё более усложняется возможным участием других вендеров.
</p>
<p align=justify>
Некоторые обозреватели, предполагают что, для локации абонента будет использована технология ENUM. Отвечу коротко: ENUM-а не будет. ENUM, это технология заточенная под оператора связи. Вставить свою запись в DNS, без разрешения оператора, которому пренадлежит ваш номер &#8211; не получится. Даст ли мобильный оператор такое разрешение &#8211; помоему очевидно, что нет.
</p>
<p align=justify>
Что ж, ждать осталось не долго, через 2 дня iPhone4 официально поступит в продажу и мы получим возможность изучить, насколько элегантно (я надеюсь) компания Apple реализовала <a href=http://tamkovich.com/tag/sip/ >SIP</a> видео телефон.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/06/sip-h264-for-iphone4-apple-facetime/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SER, OpenSER, Kamailio, OpenSIPS, SIP-router &#8211; кто есть кто?</title>
		<link>http://tamkovich.com/2010/06/ser-openser-kamailio-opensips-sip-router/</link>
		<comments>http://tamkovich.com/2010/06/ser-openser-kamailio-opensips-sip-router/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 14:03:38 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[Kamailio]]></category>
		<category><![CDATA[OpenSER]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1314</guid>
		<description><![CDATA[От обилия почти идентичного ПО, в сегменте SIP маршрутизаторов &#8211; разбегаются глаза. SER, OpenSER, Kamailio, OpenSIPS, SIP-router &#8211; в чём собственно разница? &#8211; спросит начинающий IP-телефонист? Всё не так сложно, как могло бы показаться с первого взгляда. Вначале было слово SER! SIP Express Router был разработан в Германии в институте Fraunhofer (известным разработкой MP3) в [...]]]></description>
			<content:encoded><![CDATA[<p align=justify>
От обилия почти идентичного ПО, в сегменте <a href=http://tamkovich.com/tag/sip/ >SIP</a> маршрутизаторов &#8211; разбегаются глаза. SER, <a href=http://tamkovich.com/tag/openser/ >OpenSER</a>, <a href=http://tamkovich.com/tag/kamailio/ >Kamailio</a>, OpenSIPS, <a href=http://tamkovich.com/tag/sip/ >SIP</a>-router &#8211; в чём собственно разница? &#8211; спросит начинающий IP-телефонист? Всё не так сложно, как могло бы показаться с первого взгляда.</p>
<p align=justify >
Вначале было <strike>слово</strike> SER! <a href=http://tamkovich.com/tag/sip/ >SIP</a> Express Router был разработан в Германии в институте Fraunhofer (известным разработкой MP3) в 2001 году. Компания разработчиков подобралась весьма пёстрая &#8211; румыны, венгры, испанцы и даже, что удивительно, немцы. В 2004 году проект был выделен из под крыла института и пущен в свободное плавание. Для этого была создана компания iptel.org. Но, как известно любому LOR-овцу &#8211; если тебе что-то не нравится в проекте &#8211; его надо тут же форкнуть, к чему это общение, обсуждение проблем и компромисы с недостойными?
</p>
<p><span id="more-1314"></span></p>
<p align=justify>
Что может не нравится в проекте созданом на деньги немецких налогоплательщиков? ну хотя бы то, что генеральных директоров в новой компании не 5 и даже не 3. Так проект SER был форкнут и появился параллельный проект <a href=http://tamkovich.com/tag/openser/>OpenSER</a>. Почти 4 года оба проекта находились в анабиозе. Различия между этими проектами и сегодня минимальны, не смотря на то, что 4 года &#8211; приличный срок. И вот настал август 2008 года. Чего же удалось достичь проекту <a href=http://tamkovich.com/tag/openser/>OpenSER</a> за 4 года? Ну во-первых выяснилось, что название OpenSER &#8211; нарушает торговые знаки, а во-вторых, что два генеральных директора тоже многовато. По этому в августе 2008 года <a href=http://tamkovich.com/tag/openser/>OpenSER</a> был форкнут и переименован. Из <a href=http://tamkovich.com/tag/openser/>OpenSER</a>-а вышли две ветки: <a href=http://tamkovich.com/tag/kamailio/>Kamailio</a> и OpenSIPS. Каждая из веток претендует считаться наследницей <a href=http://tamkovich.com/tag/openser/>OpenSER</a>-а. По моему мнению, из всех перечисленных продуктов, Kamailio обладает наибольшей пользовательской базой, а значит меньше шансов, что Ваши вопросы остануться без ответа. Недавно было объявлено о &laquo;совместной инициативе&raquo; проектов SER и Kamailio. Пока инициатива выглядит в виде централизованного сайта для двух проектов: <a href=http://sip-router.org>sip-router.org</a>, но видя любовь авторов к форкам, можно предположить, что рано или поздно будит мёрдж.
</p>
<p><center><br />
<img src=/wp-content/uploads/2010/06/ser.png ><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/06/ser-openser-kamailio-opensips-sip-router/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Интеграция Asterisk 1.6.2 и Kamailio 3.0.x</title>
		<link>http://tamkovich.com/2010/06/asterisk-kamailio-integration/</link>
		<comments>http://tamkovich.com/2010/06/asterisk-kamailio-integration/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 15:59:15 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[ITSP]]></category>
		<category><![CDATA[Kamailio]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1308</guid>
		<description><![CDATA[Обновился документ по интеграции Kamailio 3.0.x и Asterisk 1.6.2. Кроме того, что используются новые версии ПО, изменилась сама концепция интеграции. Ключевые тезисы новой схемы: Минимизация отклонений от стандартной конфигурации Asterisk-realtime. Вся аутентификация — внутри Kamailio. Все звонки, в т.ч. и локальные — проходят через Asterisk. Все media потоки — проходят через Asterisk. Обработка SIP сообщений [...]]]></description>
			<content:encoded><![CDATA[<p align=justify >Обновился <a href=http://kb.asipto.com/asterisk:realtime:kamailio-3.0.x-asterisk-1.6.2-astdb >документ</a> по интеграции Kamailio 3.0.x и <a href=http://tamkovich.com/asterisk/ >Asterisk</a> 1.6.2. Кроме того, что используются новые версии ПО, изменилась сама концепция интеграции. Ключевые тезисы новой схемы:</p>
<ul>
<li> Минимизация отклонений от стандартной конфигурации <a href=http://tamkovich.com/asterisk/ >Asterisk</a>-realtime.
<li> Вся аутентификация — внутри Kamailio.
<li> Все звонки, в т.ч. и локальные — проходят через <a href=http://tamkovich.com/asterisk/ >Asterisk</a>.
<li> Все media потоки — проходят через <a href=http://tamkovich.com/asterisk/ >Asterisk</a>.
<li> Обработка <a href=http://tamkovich.com/tag/sip/ >SIP</a> сообщений не связанных со звонками выполняется с помощью Kamailio.
</ul>
<p align=justify >Согласно предложенной схеме, регистрация выглядит следующим образом:</p>
<p><center><img src=/wp-content/uploads/2010/06/int-register.png ></center><br />
<span id="more-1308"></span></p>
<p align=justify >Аппарат А, отправляет запрос REGISTER и после успешной аутентификации регистрируется на Kamailio. Kamailio регистрируется на сервере <a href=http://tamkovich.com/asterisk/ >Asterisk</a> от имени клиента, указав в качестве котакта свой IP адрес. Таким образом при звонке с <a href=http://tamkovich.com/asterisk/ >Asterisk</a> к абоненту A, <a href=http://tamkovich.com/asterisk/ >Asterisk</a> отправит INVITE к Kamailio, а тот в свою очередь передаст его клиенту. Кстати о звонках, звонок между абонентами A и B выглядит следующим образом:</p>
<p><center><img src=/wp-content/uploads/2010/06/int-invite.png ></center></p>
<p align=justify >Для установки соединения между аппаратами A и B, аппарат A отправляет запрос INVITE по IP адресу сервера Kamailio. После успешной аутентификации, Kamailio отправляет INVITE к <a href=http://tamkovich.com/asterisk/ >Asterisk</a>. <a href=http://tamkovich.com/asterisk/ >Asterisk</a>, отправляет INVITE к абоненту B, однако в качестве контакта для абонента B указан IP адрес Kamailio. Получив INVITE от <a href=http://tamkovich.com/asterisk/ >Asterisk</a> для абонента B, Kamailio проверяет базу зарегистрированных пользователей (usrloc) и пытается перенаправить INVITE для абонента B по его фактическому адресу.</p>
<p align=justify >На мой взгляд: просто, элегантно, и, самое главное, масштабируемо. Я обычно использую несколько иную балансировку нагрузки, однако предложенная схема заслуживает самого тщательного изучения. Автор документа, Daniel-Constantin Mierla, обещает регулярно обновлять инструкцию, поддерживая её в актуальном состоянии.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/06/asterisk-kamailio-integration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Kamailio v3.0.2</title>
		<link>http://tamkovich.com/2010/06/kamailio-v3-0-2/</link>
		<comments>http://tamkovich.com/2010/06/kamailio-v3-0-2/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 08:07:42 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[Kamailio]]></category>
		<category><![CDATA[SIP]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1306</guid>
		<description><![CDATA[27 мая, как всегда, тихо и незаметно &#8211; обновился замечательный SIP сервер Kamailio (бывший OpenSER) до версии 3.0.2. Основные изменения: Исправлено падение TLS из-за некорректного выделения памяти. return() теперь работает внутри цикла while(). Исправлено падение mediaproxy, в случае когда ответ содержит больше media потоков чем оригинальный INVITE. Исправлено падение lib/srdb1, вызванное отсутствием проверки RES_ROW(res) на [...]]]></description>
			<content:encoded><![CDATA[<p align=justify >27 мая, как всегда, тихо и незаметно &#8211; обновился замечательный <a href=http://tamkovich.com/tag/sip/ >SIP</a> сервер Kamailio (бывший OpenSER) до версии 3.0.2. Основные изменения:
</p>
<ul>
<li> Исправлено падение TLS из-за некорректного выделения памяти.
<li> return() теперь работает внутри цикла while().
<li> Исправлено падение mediaproxy, в случае когда ответ содержит больше media потоков чем оригинальный INVITE.
<li> Исправлено падение lib/srdb1, вызванное отсутствием проверки RES_ROW(res) на NULL.
<li> Исправлено падение avp_copy() при использовании флага &#8216;g&#8217;.
<li> Исправлено падение в модуле carrierroute.
<li> Исправлена утечка памяти в модуле topoh.
</ul>
<p align=justify >
Довольного много падений для стабильной версии. Радует частота выхода исправленных версий — команда Kamailio взяла за правило выпускать релиз с исправлениями раз в 2 месяца и пока успешно следует ему. Так же хочу отметить, что все исправления, кроме выхода из цикла while() &#8211; касаются модулей. В ядре Kamailio серьёзных проблем вроде утечек памяти или падений — не исправлялось. Будем надеяться, что их там нет.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/06/kamailio-v3-0-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

