Дано: Маршрутизатор ESR-12, подключенный транком к IP PBX, через порт FXO к телефонной сети общего пользования (PSTN).
Требуется: Настроить резервный путь прохождения для голосового трафика через телефонную сеть общего пользования (PSTN).
Решение: При исправном SIP-транке исходящие на внешних абонентов вызовы должны маршрутизироваться в SIP-транк.
В соответствии с этим условием создаем набор правил ruleset main_rule, первым правилом описываем маршрутизацию в SIP-транк при нормальном режиме работы.
rule 1 pattern '_X.,1,Dial(SIP/003)' enable exit
Далее, при недоступности встречной IP PBX через SIP-транк либо при ошибках при обработке вызова на встречной IP-PBX , вызов маршрутизируем через порт FXO в телефонную сеть общего пользования.
Формируем второе правило для резервного пути.
rule 2 pattern '_50XX,2,Dial(SIP/9/9${EXTEN})' enable exit
Следующее формируемое правило нужно для корректного освобождения всех каналов, участвующих в построении разговорного тракта, после окончания разговора.
rule 3 pattern '_50XX,3,Hangup()' enable exit
Ниже приведен пример диагностики состояния SIP-транка.
esr-12vf# show pbx registrations Username Host address Port Registration time Refresh Status ------------------------ ---------------- ------ ------------------------ -------- ------------------------ 100 192.0.2.2 5060 Wed, 27 Sep 2023 105 Registered 04:23:54
esr-12vf# show pbx registrations Username Host address Port Registration time Refresh Status ------------------------ ---------------- ------ ------------------------ -------- ------------------------ 100 192.0.2.2 5060 -- 120 Request Sent
Диагностику SIP-обмена можно выполнять непосредственно из cli ESR. Ниже пример неудачного вызова. Встречная IP PBX не смогла найти в своем плане нумерации записи с нужным номером абонента.
esr-12vf# monitor gigabitethernet 1/0/1 protocol udp port 5060 06:50:50.071360 a8:f9:4b:ad:22:2f > b8:97:5a:e1:81:a4, ethertype IPv4 (0x0800), length 847: (tos 0x0, ttl 64, id 8181, offset 0, flags [none], proto UDP (17), length 833) 192.0.2.1.5060 > 192.0.2.2.5060: SIP, length: 805 INVITE sip:5003@192.0.2.2:5060 SIP/2.0 Via: SIP/2.0/UDP 192.0.2.1:5060;branch=z9hG4bK2c939c73 Max-Forwards: 70 From: <sip:003@192.0.2.1>;tag=as06472ac8 To: <sip:5003@192.0.2.2:5060> Contact: <sip:003@192.0.2.1:5060> Call-ID: 3d3129a85c317ff27d72a3272d932b6f@192.0.2.1:5060 CSeq: 102 INVITE User-Agent: ESR-12VF Date: Wed, 27 Sep 2023 06:50:50 GMT Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE Supported: replaces Content-Type: application/sdp Content-Length: 269 v=0 o=root 60188966 60188966 IN IP4 192.0.2.1 s=ESR-12VF c=IN IP4 192.0.2.1 t=0 0 m=audio 12800 RTP/AVP 8 0 101 a=rtpmap:8 PCMA/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-16 a=silenceSupp:off - - - - a=ptime:20 a=sendrecv 06:50:50.073211 b8:97:5a:e1:81:a4 > a8:f9:4b:ad:22:2f, ethertype IPv4 (0x0800), length 500: (tos 0x0, ttl 64, id 28663, offset 0, flags [none], proto UDP (17), length 486) 192.0.2.2.5060 > 192.0.2.1.5060: SIP, length: 458 SIP/2.0 404 Not Found Via: SIP/2.0/UDP 192.0.2.1:5060;branch=z9hG4bK2c939c73;received=192.0.2.1 From: <sip:003@192.0.2.1>;tag=as06472ac8 To: <sip:5003@192.0.2.2:5060>;tag=as5c77958b Call-ID: 3d3129a85c317ff27d72a3272d932b6f@192.0.2.1:5060 CSeq: 102 INVITE Server: Asterisk PBX 16.28.0~dfsg-0+deb10u3 Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE Supported: replaces, timer Content-Length: 0 06:50:50.074025 a8:f9:4b:ad:22:2f > b8:97:5a:e1:81:a4, ethertype IPv4 (0x0800), length 404: (tos 0x0, ttl 64, id 8182, offset 0, flags [none], proto UDP (17), length 390) 192.0.2.1.5060 > 192.0.2.2.5060: SIP, length: 362 ACK sip:5003@192.0.2.2:5060 SIP/2.0 Via: SIP/2.0/UDP 192.0.2.1:5060;branch=z9hG4bK2c939c73 Max-Forwards: 70 From: <sip:003@192.0.2.1>;tag=as06472ac8 To: <sip:5003@192.0.2.2:5060>;tag=as5c77958b Contact: <sip:003@192.0.2.1:5060> Call-ID: 3d3129a85c317ff27d72a3272d932b6f@192.0.2.1:5060 CSeq: 102 ACK User-Agent: ESR-12VF Content-Length: 0
В случае поступления вызова с телефонной сети общего пользования на порт FXO ESR, вызов необходимо перенаправить на один из внутренних номеров. Для этого настроим услугу "Горячая линия".
hotline ipt hotline number ipt 003
В итоге получим такую конфигурацию.
interface gigabitethernet 1/0/1 ip firewall disable ip address 192.0.2.1/24 exit interface voice-port 1 sip user phone 003 exit interface voice-port 4 sip user phone 9 caller-id mode off hotline ipt hotline number ipt 003 pstn transmit-number no pstn transmit-prefix exit pbx ruleset from_pstn rule 1 pattern '_X.,1,Dial(SIP/003)' enable exit rule 2 pattern '_X.,2,Hangup()' enable exit exit ruleset main_rule rule 1 pattern '_50XX,1,Dial(SIP/trunk_SSW/${EXTEN})' enable exit rule 2 pattern '_50XX,2,Dial(SIP/9/9${EXTEN})' enable exit rule 3 pattern '_50XX,3,Hangup()' enable exit exit profile fxo_ports client friend codec allow g711a codec allow g711u security level invite-port ruleset from_pstn exit profile trunk_SSW type external client friend codec allow g711a codec allow g711u security level invite-port host-address 192.0.2.2 ruleset from_ssw exit profile fxs_ports client friend codec allow g711a codec allow g711u ruleset main_rule exit register-server SSW ip address 192.0.2.2 ip port 5060 profile trunk_SSW username 100 authentication password encrypted CDE65039E5 enable exit user 9 profile fxo_ports exit user 003 profile fxs_ports exit enable exit
Следует учитывать что ESR начнет маршрутизировать вызовы через резервный путь не мгновенно после отказа основного пути. Для переключения потребуется некоторое время.