Перевод настроек файла sofia.conf.xml (Часть третья)

Перевод настроек файла sofia.conf.xml (Часть третья)

Переменные

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

    <gateway>

      ...params...

      <variables>

        <variable name="inbound_var_name"  value="this is inbound"  direction="inbound"/>

        <variable name="outbound_var_name" value="this is outbound" direction="outbound"/>

        <variable name="both_var_name"     value="this on any direction"/>

      </variables>

    </gateway>

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

Однако при помощи указанного ниже синтаксиса вместо канальных переменных можно установить переменные профиля.

    <variable name="p:caller_id_name" value="Gateway"/>

Настройки

Настройками профиля определяются более общие правила его работы, в том числе использование STUN-сервера. У каждого профиля есть собственные элементы для настройки. Это не только удобно, но и очень важно, так как даёт возможность установить в настройках одного профиля использование STUN-сервера, но отказаться от него в настройках другого профиля, с другим шлюзом или работающего внутри сети, защищённой межсетевым экраном. Это связано с тем, что в каждом профиле определяется юзер-агент SIP, который имеет собственный уникальный "sip-port". По умолчанию используется порт 5060, хотя возможно использование других портов для совершения звонков, например, "foo@sip.example.com:5070". Таким образом, вы можете при желании назначить отдельный порт для каждого профиля.

В каталоге conf можно найти образец файла sofia.conf.xml со всеми необходимыми комментариями. Также можете использовать примеры из Git: InternalExternal

Основные настройки

alias
    <param name="alias" value="sip:10.0.1.251:5555"/>

Это позволяет привязать профиль SIP к определённому IP-адресу и порту, а также связать ваши SIP / RTP IP-адреса с определёнными портами. Энтони Минессал по поводу псевдонимов писал в почтовой рассылке: Псевдонимы внутри тегов <aliases> представляют собой список ключей, доступных для использования при конфигурировании вашего текущего профиля. Можете рассматривать их, как аналоги файла /etc/hosts в Unix, только предназначенные для профилей. Если после определения псевдонимов для всех возможных доменов, размещенных в конкретном профиле, вам понадобится взять строчку вида user@host.com и выяснить, из какого она профиля, то при поиске можно использовать псевдонимы, но только в том случае, если вы добавили <alias name="host.com"/> для этого профиля.

shutdown-on-fail
    <param name="shutdown-on-fail" value="true"/>

Если при установленном значении true профиль не смог загрузиться, FreeSWITCH отключается. Может пригодиться, если вы используете что-то вроде Pacemaker и OpenAIS, которые управляют парой узлов FreeSWITCH и автоматически осуществляют мониторинг, запуск, остановку, перезапуск и перевод узла в режим ожидания в случае неудачной попытки соединения. Даёт уверенность, что определённый узел не зависнет в состоянии "частичной активности".

user-agent-string

Вставляет заголовок юзер-агента во все SIP сообщения, отправленные с вашего сервера. По умолчанию выглядит таким образом: "FreeSWITCH-mod_sofia/1.0.trunk-12805". Если вы не хотите афишировать информацию о версии вашей системы, можете просто поменять заголовок на "FreeSWITCH" или даже "Asterisk PBX" в качестве шутки.

Соблюдайте осторожность при установке этого значения, так как определённые характеристики, такие как '@', могут стать причиной отклонения ваших сообщений другими SIP-прокси как недействительных.

    <param name="user-agent-string" value="FreeSWITCH Rocks!"/>
debug
    <param name="debug" value="0"/>
sip-trace
    <param name="sip-trace" value="no"/>
context

Контекст диалплана, в котором обрабатываются вызовы для IP-адресов и портов этого профиля.

    <param name="context" value="public"/>
sip-port

Определение порта для SIP-трафика.

    <param name="sip-port" value="$${internal_sip_port}"/>
sip-ip

Определение IP-адреса для SIP-трафика. НЕ ИСПОЛЬЗУЙТЕ HOSTNAMES, ТОЛЬКО IP-АДРЕСА

    <param name="sip-ip" value="$${local_ip_v4_or_v6}"/>
rtp-ip

Определение IP-адреса для RTP-трафика. НЕ ИСПОЛЬЗУЙТЕ HOSTNAMES, ТОЛЬКО IP-АДРЕСА

     <param name="rtp-ip" value="$${local_ip_v4_or_v6}"/>
  • Поддержка множественных rtp-ip: если добавлено несколько rtp-ip, то они будут использоваться по кругу по мере поступления новых вызовов.
  • IPv6 адреса не поддерживаются под Windows на момент написания. Смотрите FS-4445
ext-rtp-ip

IP-адрес, за которым FreeSWITCH можно видеть из интернета, если сеть защищена с помощью NAT, обычно используется в качестве публичного IP для RTP-трафика. Возможны следующие значения: Любая переменная из файла vars.xml, например, $${external_rtp_ip}:

    <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>

"конкретный IP-адрес"

    <param name="ext-rtp-ip" value="1.2.3.4"/>

"при использовании для LAN и WAN, во избежание ошибок при отправлении SIP CONTACT на устройства LAN, используйте"

    <param name="ext-rtp-ip" value="autonat:1.2.3.4"/>

"auto": будет использоваться случайный IP, автоматически выбранный из таблицы маршрутизации, установленной по умолчанию

    <param name="ext-rtp-ip" value="auto"/>

"auto-nat": FreeSWITCH будет использовать uPNP или NAT-PMP, чтобы найти нужный публичный IP-адрес

    <param name="ext-rtp-ip" value="auto-nat"/>

"stun:DNS или IP-адрес": для определения публичного IP-адреса FreeSWITCH будет использовать STUN-сервер по вашему выбору.

    <param name="ext-rtp-ip" value="stun:stun.freeswitch.org"/>

"host:DNS name": FreeSWITCH допускает использование динамических DNS в качестве публичного IP-адреса

    <param name="ext-rtp-ip" value="host:mypublicIP.dyndns.org"/>

ВНИМАНИЕ: ПО СОСТОЯНИЮ НА ЧЕТВЁРТЫЙ КВАРТАЛ 2012 ГОДА, параметры с префиксом 'ext–', приведённые выше, при заполнении строками DNS — например, name="ext–sip–ip" value="stun:stun.freeswitch.org" или name="ext‑rtp–ip" value="host:mypublicIP.dyndns.org" — преобразуются в IP-адреса только в момент загрузки FreeSWITCH и в дальнейшем остаются неизменными. FreeSWITCH не различает последующие изменения в IP-адресе вашей системы. Таким образом, переменные ext– могут оказаться функционально несовместимыми с текущим IP-адресом окружения, что может привести к неожиданным результатам . Для того, чтобы во FreeSWITCH установился новый IP-адрес, необходима перезагрузка системы.

ext-sip-ip

IP-адрес, за которым FreeSWITCH можно видеть из интернета, если сеть защищена с помощью NAT, обычно используется в качестве публичного IP для SIP-трафика. Возможные значения те же самые, что и для ext-rtp-ip и обычно задаются одинаково.

    <param name="ext-sip-ip" value="$${external_sip_ip}"/>
tcp-keepalive

Устанавливает интервал (в миллисекундах) посылки пакетов "сохранить действующим" юзер-агентам, зарегистрированным через TCP; если не установлено никакое значение, то функция отключена.

tcp-pingpong
tcp-ping2pong
dialplan

Параметр dialplan является очень мощным инструментом.

В простейшей конфигурации он использует XML-диалплан. Это значит, что он считывает информацию из XML-диалпланов mod_xml_curl, например, обратный вызов на ваш веб-сервер, а в случае их отсутствия — из XML-файлов, указанных во freeswitch.xml. (например, default_context.xml)

    <param name="dialplan" value="XML"/>

Вы также можете использовать enum, так как mod_enum обладает схожей с диалпланом функциональностью и имеет приоритет перед XML-кодом диалплана

    <param name="dialplan" value="enum,XML"/>

Или поменяйте порядок, чтобы использовать enum, только если попытка обратиться к XML-диалплану потерпела неудачу.

    <param name="dialplan" value="XML,enum"/>

Также можно указать конкретное значение enum

    <param name="dialplan" value="enum:foo.com,XML"/>

Или использовать XML в пользовательском файле

    <param name="dialplan" value="XML:/tmp/foo.xml,XML,enum"/>

В первую очередь проверяется заданный XML-файл, затем обычный XML-диалплан, определённый модулем mod_xml_curl, при этом подразумевается, что он настроен и работает.

Опции медиа

Также смотрите: Proxy Media

resume-media-on-hold

Если медиапоток для вызовов отключен, эта функция его возобновляет, когда вы нажимаете кнопку hold. Для возвращения вызовов в исходный bypass-media режим при повторном нажатии hold, активируйте bypass-media-after-hold.

    <param name="media-option" value="resume-media-on-hold"/>
bypass-media-after-att-xfer

После перевода вызова (attended transfer) вернуться к режиму bypass media.

     <param name="media-option" value="bypass-media-after-att-xfer"/>
bypass-media-after-hold

Возвращает медиа поток в режим bypass media после удержания. Эта опция может быть активирована только если установлен resume-media-on-hold. В git доступна версия rev 8fa385b.

     <param name="media-option" value="bypass-media-after-hold"/>
inbound-bypass-media

Раскомментируйте, чтобы установить режим no media для всех входящих вызовов. При этом сервер FreeSWITCH будет сохранять только SIP-сообщения, в то время как поток RTP будет передаваться напрямую между конечными точками

    <param name="inbound-bypass-media" value="true"/>
inbound-proxy-media

Раскомментируйте, чтобы установить режим proxy media для всех входящих вызовов. В этом случае сервер FreeSWITCH будет сохранять как SIP, так и RTP-трафик, но не будет влиять на поток RTP

    <param name="inbound-proxy-media" value="true"/>
disable-rtp-auto-adjust
    <param name="disable-rtp-auto-adjust" value="true"/>
ignore-183nosdp
    <param name="ignore-183nosdp" value="true"/>
enable-soa
    <param name="enable-soa" value="true"/>

Установите значение "false" для исключения SIP SOA из sofia, чтобы дать команду sofia не трогать обмен SDP.

t38-passthru
    <param name="t38-passthru" value="true"/>

Доступны следующие опции

  • 'true' активирует t38 passthru
  • 'false' дезактивирует t38 passthru
  • 'once' активирует t38 passthru, но отправляет только один re-invite t.38 (доступно с версии 08b25a8 от 9 ноября 2011 года)

Опции, связанные с кодеками

Смотрите также:

inbound-codec-prefs

Этот параметр позволяет изменять в профиле список предпочтительных кодеков для входящих вызовов.

     <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
outbound-codec-prefs

Позволяет изменять список кодеков для исходящих вызовов.

     <param name="outbound-codec-prefs" value="$${outbound_codec_prefs}"/>
codec-prefs

Позволяет одновременно изменять параметры inbound-codec-prefs и outbound-codec-prefs.

     <param name="codec-prefs" value="$${global_codec_prefs}"/>
inbound-codec-negotiation

Установите значение 'greedy', чтобы получить приоритет для своего списка кодеков.

     <param name="inbound-codec-negotiation" value="generous"/>

Если не получается с 'greedy', попробуйте установить значение 'scrooge', которое помогает исправить последствия некорректных запросов от провайдеров, например, CallCentric.

Правила:

  • 'generous' позволяет списку кодеков удаленной стороны получить приоритет в процессе рассмотрения и отбора
  • 'greedy' приоритет получают кодеки из локального списка FreeSWITCH
  • 'scrooge' расширяет возможности 'greedy', FreeSWITCH получает преимущество, независимо от возможностей противоположной стороны.

sip_codec_negotiation – канальная переменная, используемая для этих настроек

inbound-late-negotiation

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

     <param name="inbound-late-negotiation" value="true"/>
bitpacking

Эти настройки предназначены для кодека AAL2 G.726.

     <param name="bitpacking" value="aal2"/>
disable-transcoding

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

    <param name="disable-transcoding" value="true"/>
renegotiate-codec-on-reinvite
    <param name="renegotiate-codec-on-reinvite" value="true"/>

STUN

Распространённые примеры параметров, связанных с использованием STUN-сервера:

ext-rtp-ip
    <param name="ext-rtp-ip" value="stun:stun.fwdnet.net"/>

stun.fwdnet.net – это STUN-сервер с публичным доступом.

ext-sip-ip
    <param name="ext-sip-ip" value="world_reachable.real.numeric.ip"/>
stun-enabled

Простой обход UDP через NAT (Simple traversal of UDP over NAT, сокращённо STUN), используется для решения проблем, связанных с SIP клиентами, находящимися за NAT и использующими приватные IP адреса для обмена сообщениями. STUN активирован, если это указано (по умолчанию true).

    <param name="stun-enabled" value="true"/>
stun-auto-disable

Если установлено значение true, то, при определении профилем отсутствия необходимости в STUN, он будет отключен глобально.

    <param name="stun-auto-disable" value="true"/>

NAT

apply-nat-acl

При получении пакета REGISTER или INVITE автоматически происходит активация режима NAT, если IP-адрес в заголовке Contact совпадает с входными данными, определёнными в списке контактов RFC 1918. "acl" в данном случае является неправильным выражением, так как в доступе не будет отказано, если контактный IP пользователя не найдёт соответствия в списке.

    <param name="apply-nat-acl" value="rfc1918"/>
aggressive-nat-detection

Активирует режим NAT, если IP/port сети, из которой был получен запрос отличается от сочетания IP/Port в заголовке SIP Via:, или если заголовок Via: содержит полученный параметр (неважно, что именно он содержит). Примечание от 05-04-2009: Если кто-то может, объясните, пожалуйста, в каких случаях может пригодиться эта функция. Если подумать, то при возникновении ситуации, в которой она могла бы понадобиться, с большой долей вероятности более эффективным будет использование NDLB-force-rport.

    <param name="aggressive-nat-detection" value="true"/>

VAD и CNG

VAD расшифровывается как детектор голосовой активности или Voice Activity Detector. FreeSWITCH умеет улавливать речь и может остановить передачу RTP-пакетов при отсутствии речевой активности.

vad
    <param name="vad" value="in"/>

    <param name="vad" value="out"/>

    <param name="vad" value="both"/>
suppress-cng

Подавляет генерацию комфортного шума (CNG) либо для профиля, либо для отдельного вызова с установленной переменной 'suppress_cng'

    <param name="suppress-cng" value="true"/>

NDLB a.k.a. No device left behind (Ни одно устройство не будет забыто)

NDLB-force-rport

Заставляет FreeSWITCH отправлять SIP-ответы на тот же сетевой порт, с которого были получены запросы. Используйте на свой страх и риск! Для получения дополнительной информации смотрите NAT Traversal.

    <param name="NDLB-force-rport" value="true|safe"/>
  • safe = значение, при котором force-rport применяется только для заведомо безопасных конечных точек. Этот хитрый трюк придуман для работы с определёнными конечными точками, расположенными за брандмауэрами типа sonicwall, которые не используют один тот же порт с nat, а также если устройства не поддерживают rport. При этом не нарушается работа устройств, использующих разные порты, в то время как force-rport её нарушил бы.
NDLB-broken-auth-hash

Используется в случае, когда телефон отвечает на сомнительный ACK с хэшированным INVITE.

    <param name="NDLB-broken-auth-hash" value="true"/>
NDLB-received-in-nat-reg-contact

Добавьте в параметры контакта строчку ;received="<ip>:<port>" для nat-обработки при ответе.

    <param name="NDLB-received-in-nat-reg-contact" value="true"/>
NDLB-sendrecv-in-session

По умолчанию "a=sendrecv" включен только в разделе SDP, отвечающем за функции медиа. Так как этот параметр совместим только с RFC, может быть нарушена функциональность некоторых устройств SIP. Для включения параметра "a=sendrecv" в основной раздел SDP установите значение true.

    <param name="NDLB-sendrecv-in-session" value="true"/>
NDLB-allow-bad-iananame
  • Эта функция появилась в версии rev. 15401, и активирована по умолчанию.

Позволяет определять правильное имя кодека, даже если оно записано некорректно.

Например, в телефонах Linksys и Sipura по умолчанию записан кодек G.729a вместо G.729, поэтому при проверке будет появляться ошибка.

Если вы хотите, чтобы неверные имена IANA могли сопоставляться с правильными названиями кодеков, добавьте следующий параметр в ваш профиль SIP.

     <param name="NDLB-allow-bad-iananame" value="true"/>

Подробности смотрите в RFC 3551RFC 3555 и списках IANA для SDP

 

© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку