Дано: Маршрутизатор 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 начнет маршрутизировать вызовы через резервный путь не мгновенно после отказа основного пути. Для переключения потребуется некоторое время.
