Перевод настроек файла 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: Internal, External
Основные настройки
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 3551, RFC 3555 и списках IANA для SDP
© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку