Пробую реализовать такую схему
Есть 2 сетевые карты.
1 карта [192.168.1.2] смотрит во внешний интернет, отвечает за регистрацию провайдеров (в частности мультифон) и внешних удаленных пользователей (используется профиль external)
2 карта [10.0.10.2] смотрит исключительно в локальную сеть, где сидят внутренние абоненты (шлюз VOIP-FXS) (используется профиль internal)
Хочу реализовать следующее:
1. Не должно быть разницы между локальным пользователем, сидящим на 2 карте и удаленным пользователям, подключенным через 1 карту.
Т.е. исходящие звонки у них должны быть в одном контексте (default).
2. Входящие звонки попадают в IVR, в котором можно набрать внутренний номер и связаться либо с внешним пользователем, либо с внутренним.
Пока затруднение возникает в том, что FS не совсем понимает на каком домене тот или иной пользователей и не видит регистрацию у внешних пользователей.
Внутренний пользователь имеет вид
1001@10.0.10.2 и спокойно находится через sofia_contact */1001
Внешний пользователь имеет вид
1003@192.168.1.2 и не находится через sofia_contact */1003, но виден через sofia_contact
*/1003@192.168.1.2Соответственно, диалплан не отрабатывает звонок с 1001 на 1003, если прямо не указать 192.168.1.2 то выдает USER_NOT_REGISTERED
ВОПРОС. Как сделать так, чтобы FS сам находил на каком домене (профиле) тот или иной пользователь?
Код:
<profile name="external">
<gateways>
<X-PRE-PROCESS cmd="include" data="external/*.xml"/>
</gateways>
<aliases>
</aliases>
<domains>
<domain name="all" alias="false" parse="true"/>
</domains>
<settings>
<param name="debug" value="7"/>
<param name="sip-trace" value="yes"/>
<param name="sip-capture" value="yes"/>
<param name="rfc2833-pt" value="101"/>
<param name="sip-port" value="5060"/>
<param name="dialplan" value="XML"/>
<param name="context" value="public"/>
<param name="dtmf-duration" value="2000"/>
<param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
<param name="outbound-codec-prefs" value="$${outbound_codec_prefs}"/>
<param name="hold-music" value="$${hold_music}"/>
<param name="rtp-timer-name" value="soft"/>
<param name="local-network-acl" value="localnet.auto"/>
<param name="manage-presence" value="false"/>
<param name="presence-hosts" value="192.168.1.2"/>
<param name="presence-privacy" value="$${presence_privacy}"/>
<param name="inbound-codec-negotiation" value="generous"/>
<param name="nonce-ttl" value="60"/>
<param name="auth-calls" value="false"/>
<param name="inbound-late-negotiation" value="false"/>
<param name="inbound-zrtp-passthru" value="false"/>
<param name="rtp-ip" value="192.168.1.2"/>
<param name="sip-ip" value="192.168.1.2"/>
<param name="ext-rtp-ip" value="192.168.1.2"/>
<param name="ext-sip-ip" value="192.168.1.2"/>
<param name="rtp-timeout-sec" value="300"/>
<param name="rtp-hold-timeout-sec" value="1800"/>
<param name="tls" value="$${external_ssl_enable}"/>
<param name="tls-only" value="false"/>
<param name="tls-bind-params" value="transport=tls"/>
<param name="tls-sip-port" value="$${external_tls_port}"/>
<param name="tls-cert-dir" value="$${external_ssl_dir}"/>
<param name="tls-passphrase" value=""/>
<param name="tls-verify-date" value="true"/>
<param name="tls-verify-policy" value="none"/>
<param name="tls-verify-depth" value="2"/>
<param name="tls-verify-in-subjects" value=""/>
<param name="tls-version" value="$${sip_tls_version}"/>
</settings>
</profile>
Код:
<profile name="internal">
<aliases>
</aliases>
<gateways>
<X-PRE-PROCESS cmd="include" data="internal/*.xml"/>
</gateways>
<domains>
<domain name="all" alias="true" parse="false"/>
</domains>
<settings>
<param name="debug" value="7"/>
<param name="sip-trace" value="yes"/>
<param name="sip-capture" value="yes"/>
<param name="watchdog-enabled" value="no"/>
<param name="watchdog-step-timeout" value="30000"/>
<param name="watchdog-event-timeout" value="30000"/>
<param name="log-auth-failures" value="false"/>
<param name="forward-unsolicited-mwi-notify" value="false"/>
<param name="context" value="public"/>
<param name="rfc2833-pt" value="101"/>
<param name="sip-port" value="5060"/>
<param name="dialplan" value="XML"/>
<param name="dtmf-duration" value="2000"/>
<param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
<param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
<param name="rtp-timer-name" value="soft"/>
<param name="rtp-ip" value="10.0.10.2"/>
<param name="sip-ip" value="10.0.10.2"/>
<param name="hold-music" value="$${hold_music}"/>
<param name="apply-nat-acl" value="nat.auto"/>
<param name="apply-inbound-acl" value="domains"/>
<param name="local-network-acl" value="localnet.auto"/>
<param name="record-path" value="$${recordings_dir}"/>
<param name="record-template" value="${caller_id_number}.${target_domain}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
<param name="manage-presence" value="true"/>
<param name="presence-hosts" value="10.0.10.2"/>
<param name="presence-privacy" value="$${presence_privacy}"/>
<param name="inbound-codec-negotiation" value="generous"/>
<param name="tls" value="$${internal_ssl_enable}"/>
<param name="tls-only" value="false"/>
<param name="tls-bind-params" value="transport=tls"/>
<param name="tls-sip-port" value="$${internal_tls_port}"/>
<param name="tls-cert-dir" value="$${internal_ssl_dir}"/>
<param name="tls-passphrase" value=""/>
<param name="tls-verify-date" value="true"/>
<param name="tls-verify-policy" value="none"/>
<param name="tls-verify-depth" value="2"/>
<param name="tls-verify-in-subjects" value=""/>
<param name="tls-version" value="$${sip_tls_version}"/>
<param name="inbound-late-negotiation" value="false"/>
<param name="inbound-zrtp-passthru" value="false"/>
<param name="nonce-ttl" value="60"/>
<param name="auth-calls" value="$${internal_auth_calls}"/>
<param name="inbound-reg-force-matching-username" value="true"/>
<param name="auth-all-packets" value="false"/>
<param name="ext-rtp-ip" value="10.0.10.2"/>
<param name="ext-sip-ip" value="10.0.10.2"/>
<param name="rtp-timeout-sec" value="300"/>
<param name="rtp-hold-timeout-sec" value="1800"/>
<param name="challenge-realm" value="auto_from"/>
</settings>
</profile>
Код:
<extension name="Local_Extension">
<condition field="destination_number" expression="^(100[0-9])$">
<action application="set" data="ringback=${us-ring}"/>
<action application="set" data="transfer_ringback=$${hold_music}"/>
<action application="set" data="call_timeout=30"/>
<action application="set" data="hangup_after_bridge=true"/>
<action application="bridge" data="${sofia_contact(*/$1)}"/>
</condition>
</extension>
[+] определение пользователей домена internal Код:
<include>
<domain name="10.0.10.2">
<params>
<param name="dial-string" value="{^^:sip_invite_domain=${dialed_domain}:presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(*/${dialed_user}@${dialed_domain})}"/>
</params>
<variables>
<variable name="record_stereo" value="true"/>
<variable name="default_gateway" value="$${default_provider}"/>
<variable name="default_areacode" value="$${default_areacode}"/>
<variable name="transfer_fallback_extension" value="operator"/>
</variables>
<groups>
<group name="default">
<users>
<X-PRE-PROCESS cmd="include" data="default/*.xml"/>
</users>
</group>
</groups>
</domain>
</include>
ПОЛЬЗОВАТЕЛЬ
<include>
<user id="1001">
<params>
<param name="password" value="123"/>
<param name="vm-password" value="1001"/>
</params>
<variables>
<variable name="toll_allow" value="domestic,international,local"/>
<variable name="accountcode" value="1001"/>
<variable name="user_context" value="default"/>
<variable name="effective_caller_id_name" value="1001"/>
<variable name="effective_caller_id_number" value="1001"/>
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
</variables>
</user>
</include>
[+] определение пользователей домена external Код:
<include>
<domain name="192.168.1.2">
<params>
<param name="dial-string" value="{^^:sip_invite_domain=${dialed_domain}:presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(*/${dialed_user}@${dialed_domain})}"/>
</params>
<variables>
<variable name="record_stereo" value="true"/>
<variable name="default_gateway" value="$${default_provider}"/>
<variable name="default_areacode" value="$${default_areacode}"/>
<variable name="transfer_fallback_extension" value="operator"/>
</variables>
<groups>
<group name="extern">
<users>
<X-PRE-PROCESS cmd="include" data="extern/*.xml"/>
</users>
</group>
</groups>
</domain>
</include>
ПОЛЬЗОВАТЕЛЬ
<include>
<user id="1003">
<params>
<param name="password" value="123"/>
<param name="vm-password" value="1003"/>
</params>
<variables>
<variable name="toll_allow" value="domestic,international,local"/>
<variable name="accountcode" value="1003"/>
<variable name="user_context" value="default"/>
<variable name="effective_caller_id_name" value="1003"/>
<variable name="effective_caller_id_number" value="1003"/>
<variable name="outbound_caller_id_name" value="1003"/>
<variable name="outbound_caller_id_number" value="1003"/>
</variables>
</user>
</include>