Ceritanya…
Dapat tugas untuk melihat-lihat SBC di public cloud. Tidak banyak-banyak sih brand yang diulas, antara AudioCodes VE atau Ribbon Communications SWe Lite saja. Kalo yang SWe Lite kebetulan sudah punya mainannya di private cloud kantor, cuma pengen nyoba yang AudioCodes VE, walhasil nyoba yang di AWS. Percobaannya sama, yaitu menyambungkan Microsoft Teams Direct Routing ke kedua SBC tersebut.
AudioCodes VE AWS
AuidoCodes menyediakan dua jenis langganan di AWS. Yang pertama disebut Pay As You Go (PAYG). SBC ini memiliki fitur lengkap, dengan kapasitas 2000 concurrent calls, sudah mendukung Microsoft Teams Direct Routing, transcoding codec SILK, dukungan TLS dan SRTP, integrasi dengan Call Recording, dst dst.
Berapa duit tuh?
Pengguna hanya dikenakan biaya panggilan dalam menit. Jumlah menitnya tidak terbatas, pokoknya pakai dulu, nanti berapa lama panggilannya baru ditagihkan. Cocok untuk penyedia layanan yang ingin memulai layanan tanpa harus bingung macam-macama lisensi yang harus dibeli. Karena semua sudah ada.
Tapi karena hanya ingin mencoba, saya memilih jenis kedua, yaitu Bring Your Own License (BYOL). Jika jenis SBC ini diaktifkan, pengguna diberi kesempatan mencoba lebih awal (atau istilahnya evaluation license) dengan dukungan koneksi ke Microsoft Teams Direct Routing, 3 concurrent calls. Lumayan lah yaa…
Jika puas dengan percobaannya, nanti bisa beli lisensi di portal https://www.audiocodes.com/swactivation.
Singkatnya, yang saya pakai adalah :
- AudioCodes VE versi 7.4 BYOL di AWS.
- AWS instance tipe m5.large sesuai dengan rekomendasi AudioCodes.
- Satu interface dengan satu ip public statik (SBC tidak peduli jika trafik lewat satu atau lebih interface, karena pengaturan terjadi di logic-nya).
Untuk pemasangan di AWS saya lewati saja, karena bisa dibaca di tautan berikut ini:
Konfigurasi AudioCodes
Sebenarnya petunjuk instalasi AudioCodes untuk Multi Tenant Microsoft Teams Direct Routing cukup jelas tercantum di dokumentasi daringnya. Hanya saja untuk memahami maksud dari petunjuk setup tersebut memang sangat membingungkan. Jadi saya sekaligus membedah apa maksud dari isi petunjuk tersebut.
Tujuan percobaan ini agar terwujud topologi seperti gambar berikut:

- SBC tersambung ke dua layanan Hosted PBX berbeda dengan DID yang berbeda pula.
- Masing-masing Hosted PBX tersambung ke Microsoft Teams Direct Routing untuk dua tenant Office365 yang berbeda juga (misal, ofon.co.id dan customer.tld).
Menambahkan SBC
Masing-masing tenant Office365 (selanjutnya saya sebut O365 saja), tersambung ke SBC yang sama, dengan hostname yang berbeda. Untuk O365 ofon.co.id akan mengenali SBC sebagai ofon.biz, sedangkan O365 customer.tld akan mengenali SBC sebagai tenant1.ofon.biz.
Untuk detail penambahan domain dapat dibaca di tautan berikut ini:
https://docs.microsoft.com/en-us/microsoftteams/direct-routing-sbc-multiple-tenants
Pastikan SBC juga sudah ditambahkan dengan perinah:
untuk O365 ofon.co.id:
New-CsOnlinePSTNGateway -Fqdn ofon.biz -SipSignalingPort 5061 -Enabled $true -ForwardPai $true -MaxConcurrentSessions 5
untuk O365 customer.tld
New-CsOnlinePSTNGateway -Fqdn tenant1.ofon.biz -SipSignalingPort 5061 -ForwardCallHistory $true -Enabled $true -MaxConcurrentSessions 5
Konfigurasi AudioCodes VE
Unggah Berkas SSL Cert
Untuk mengunggah berkas sertifikat SSL yang sudah didapatkan (daftar Certificate Authority yang direkomendasikan Microsoft dapat dilihat di :
Dalam contoh di sini, saya menggunakan GeoTrust yang wildcard supaya bisa melingkupi banyak subdomain untuk ofon.biz. SSL ini di Indonesia bisa didapatkan di IDWEBHOST.
Setelah dikonversi menjadi P12 (cara membuat berkas sertifikat P12 dapat dibaca di https://www.ssl.com/how-to/create-a-pfx-p12-certificate-file-using-openssl/), unggah sertifikat tersebut melalui menu SETUP -> IP NETWORK -> SECURITY -> TLS Contexts

Instalasi AudioCodes sudah membuatkan TLS Context dasar dengan nama default. Kita bisa mengubah konfigurasi di context tersebut. Tapi disarankan sebaiknya membuat baru dengan memilih menu +New dan isikan:
Name: Teams (bebas, boleh diisi apa saja. Tapi kali ini saya memilih nama ini).
TLS Version: TLSv1.2 (versi TLS yang digunakan oleh Microsoft Teams Direct Routing).
DH key Size: 2048 (disetting sejak membuat CSR ketika hendak mendaftar pembelian SSL).
Sisa parameter lainnya biarkan default. Lalu klik Apply dan klik Save di bagian atas halaman konfigurasi.

Masih di halaman TLS Contexts, klik baris context Teams yang barusan kita buat, lalu skrol ke bawah klik Change Certificate


Di halaman Change Certificates, skrol layar ke bawah ke bagian UPLOAD CERTIFICATE FILES FROM YOUR COMPUTER, dan isian Private key pass-phrase isikan kata sandi yang dibuat pada saat menggenerasi file .P12.
Lalu klik Load Private Key File dan pilih file .P12 yang hendak diunggah. Jika unggahan berhasil akan tampak seperti berikut:

Unggah trusted certificate dari Baltimore milik MSTeams agar terbentuk sambungan Mutual TLS (MTLS). Certificate tersebut dapat diunduh dari https://docs.microsoft.com/en-us/microsoft-365/compliance/encryption-office-365-certificate-chains?view=o365-worldwide. Lalu unggah dari laptop dengan memilih Trusted Root Certificate, di sebelah Change Certificate:

Klik Import dan pilih berkas sertifikat Baltimore dalam bentuk .pem

Jika berhasil, sertifika tersebut akan muncul di tabel Trusted Root Certificates

Jangan lupa klik Save.
Media Realms
Media Realms adalah konfigurasi untuk menetapkan kelompok port RTP untuk masing-masing kaki SIP. Sesuai gambar topologi di atas, SBC memiliki “dua kaki” (walaupun network interfacenya cuma satu).
Satu ke arah Microsoft Teams Phone System dengan port 5061/TLS, dan yang lain ke arah layanan SIP trunk (dalam hal ini dua hosted IP PBX) dengan port 5060/UDP. Kedua port SIP ini kelak akan menginisisasi RTP port untuk komunikasi suara. Dalam contoh di sini, saya tetapkan, semua port RTP yang menuju IP PBX masuk dalam rentang 6000/UDP – 6100/UDP, sedangkan yang menghadap Microsoft Teams Phone System dalam rentang 7000/udp – 7100/udp. Sehingga setting Media Relams-nya seperti berikut:
Masuk ke menu SETUP -> SIGNALING & MEDIA -> CORE ENTITIES -> MEDIA REALMS lalu klik +New
Isikan parameter sebagai berikut:
Name: SIPTrunk (bebas diisi apa saja)
Topology Location: Down (ini untuk menentukan posisi di gambar topologi yang secara otomatis digenerasi oleh AudioCodes).
IPv4 Interface Name: #0 [eth0] (karena cuma ada satu, maka interface tersebut yang dipilih).
UDP Port Range Start: 6000
Number of Media Session Legs: 100
klik Apply dan Save.

Klik +New kembali untuk menambahkan Media Realms yang menghadap MSTeams. Lalu isikan:
Name: Teams (bebas)
Topology/Location: Up (untuk gambar topologi)
IPv4 Interface Name: #0 [eth0] (karena cuma ada satu, maka interface tersebut yang dipilih).
UDP Port Range Start: 7000
Number Of Media Session Legs: 100
Klik Apply dan Save.
SIP Interfaces
Seperti yang telah dibahas di atas, SBC memiliki “dua kaki” logical walaupun secara fisik hanya memiliki satu network interface. “Dua kaki” ini disetel melalui menu SIP Interfaces dengan memilih SETUP -> SIGNALING & MEDIA -> CORE ENTITIES -> SIP Interfaces lalu klik +New. Isikan parameter sebagai berikut:
Name: SIPTrunk (bebas,tapi sebaiknya diseragamkan dengan Media Realm).
Topology Location: Down (untuk gambar topologi)
Network Interface: #0 [eth0]
Application Type: SBC
[GENERAL]
UDP Port: 5060
TCP Port: 0
TLS Port: 0
[CLASSIFICATION]
Classification Failure Response Type: 500
[MEDIA]
Media Realm: #0[SIPTrunk] (pilih dari menu dropdown)
Direct Media: Disable
Klik Apply dan Save.

Klik +New untuk menambahkan SIP Interface yang menghadap MSTeams, lalu isikan sebagai berikut:
Name: Teams (bebas, tapi sebaiknya seragamkan dengan Media Realm).
Topology Location: Up (untuk gambar topologi)
[GENERAL]
Network Interface: #0[eth0]
Application Type: SBC
UDP Port: 0
TCP Port: 0
TLS Port: 5061
[CLASSIFICATION]
Classification Failure Reponse Type: 0 (rekomendasi dari AudioCodes untuk alasan keamanan).
[MEDIA]
Media Realm: #1[Teams] (dipilih dari menu dropdown)
Direct Media: Disable
[Security]
TLS Context Name: #1[Teams] (dipilih dari menu dropdown).
TLS Mutual Authentication: Enable (jangan lupa mengunggah trusted cert Baltimore milik MSTeams).
Klik Apply dan Save.

Proxy Sets
Proxy Sets adalah pengelompokan SIP peers, yaitu node SIP diujung kaki SBC. Contoh, di ujung kaki SBC yang menghadap ke SIPTrunk terdapat IP PBX, sehingga untuk kelompok Proxy Set di kaki ini berisi daftar ip address IP PBX. Sedangkan untuk yang menghadak ke Teams, Proxy Set akan berisi semua SIP server Microsoft Teams Phone System (sip.pstnhub.microsoft.com, sip2.pstnhub.microsoft.com, dan sip3.psnthub.microsoft.com).
Untuk menambahkan Proxy Sets, pilih Setup -> SIGNALING & MEDIA -> CORE ENTITIES -> Proxy Sets lalu pilih +New untuk menambahkan. Isikan parameter sebagai berikut:
[GENERAL]
Name: Teams
SBC IPv4 SIP Interface: #1 [Teams] (dipilih dari menu dropdown).
TLS Context Name: #2 [Teams] (dipilih dari menu dropdown)
[KEEP ALIVE]
Proxy Keep-Alive: Using OPTIONS
[REDUNDANCY]
Proxy Hot Swap: Enable
Proxy Load Balancing Method: Random Weights
Klik Apply dan Save.

Di halaman tabel Proxy Sets, pilih baris Teams, lalu gulung layar ke bawah dan pilih menu Proxy Address.

Klik +New dan isikan:
Proxy Address: sip.pstnhub.microsoft.com:5061
Transport Type: TLS
Proxy Priority: 1
Proxy Random Weights: 1
Klik Apply. Lalu tambahkan lagi untuk sip2.pstnhub.microsoft.com:5061 dengan priority 2, dan sip3.pstnhub.microsoft.com:5061 dengan priority 3.

Klik Apply dan Save.
Klik +New lagi untuk menambahkan Proxy Sets ke arah IP PBX dan isikan:
[GENERAL]
Name: SIPTrunks
SBC IPv4 SIP Interface: #0 [SIPTrunk] (dipilih dari menu dropdown).
[KEEP ALIVE]
Proxy Keep-Alive: Using OPTIONS
Klik Apply dan Save.

Di halaman Proxy Set, pilih baris SIPTrunks, lalu gulung layar ke bawah ke menu Proxy Address, pilih dan klik +New, isikan:
Proxy Address : f2ea30.pbx001.ofon.co.id:5060 (alamat Hosted PBX)
Transport Type: UDP
Proxy Priority: 0
Proxy Random Weights: 0
Klik Apply dan Save.

Sesuai dengan gambar topologi sebelumnya, saya akan menambahkan tenant satu lagi yang berlangganan Hosted PBX berbeda.
Di halaman Proxy Sets klik +New dan isikan:
[GENERAL]
Name: Maxotel
SBC IPv4 SIP Interface: #0 [SIPTrunk]
[KEEP ALIVE]
Proxy Keep-Alive: Using OPTIONS
Klik Apply dan Save.

Lalu di halaman tabel Proxy Set, pilih baris tenant di atas (Maxotel), lalu gulung layar ke bawah dan klik Proxy Address.
Klik +New dan isikan informasi alamat hosted PBX seperti di atas.
Keseluruhan tenant menjadi seperti berikut:

Dial Plan
Untuk jumlah routing panggilan yang mencapai ratusan, AudioCodes memiliki fitur tagging untuk mempermudah dan meringkas tabel routing. Tagging ini dapat menandai filter From dan To untuk setiap trunk sehingga kita tidak perlu menambahkan satu persatu IP-to-IP Routing.
Untuk menambahkan dial plan, pilih SETUP -> SIGNALING & MEDIA -> SIP DEFINITIONS -> Dial Plan. Klik +New untuk menambahkan kelompok Dial plan, dan isikan:
[GENERAL]
Name: TeamsTenants (mohon perhatikan baik-baik nama Dial plan ini dan dicatat, karena akan digunakan di dalam konfigurasi Call Setup Rules).
Prefix Case Sensitivity: Enable (untuk membaca prefix DID yang hendak ditagging).
Klik Apply dan Save.
Masih di halaman Dial Plan, pilih baris dial plan yang barusan kita buat, lalu gulung layar ke bawah dan klik Dial Plan Rules.

Klik +New dan isikan:
Name: Kazoo (bebas)
Prefix: +62213973XXXX (ganti XXXX dengan akhiran nomor telepon). Misal +622139734567.
Tag: ofon.biz (isikan dengan hostname SBC yang disematkan ke Tenant Office 365 utama).
Klik Apply dan Save.

Klik +New kembali untuk menambahkan tenant kedua:
Name: Enterprise1
Prefix: +6173667XXXX (ganti XXXX di sini dengan nomor akhiran telepon, misal +61736670001).
Tag: tenant1.ofon.biz (isikan dengan hostname SBC yang disematkan ke Tenant Office 365 kedua).
Klik Apply dan Save.


Call Setup Rules
Sebelum masuk ke menu Call Setup Rules ada catatan yang hendak sampaikan terlebih dahulu.
AudioCodes banyak memanfaatkan Subject dan Variabel di dalam konfigurasi SBC. Contoh variabel yang akan kita buat sendiri di sini nanti bernama TenantFQDN. Variabel ini akan mengambil dari SIP Header untuk menyimpan hostname SBC yang diberikan ke masing-masing Tenant O365. Seperti kita ketahui, Microsoft Teams membedakan tenant satu dengan yang lainnya berdasarkan hostname SBC yang didaftarkan di Azure Active Directory.
Sedangkan untuk subject, biasanya akan ditemui di isian parameter yang terdapat menu Editor seperti ini:

Jadi misal subject seperti Header.P-Asserted-Identity.URL.User, agar tidak salah memasukkan nama subject, klik bagian Editor tersebut. Di dalam isian, kita bisa memulai dengan menekan misal huruf pertama dari subject yang akan kita cari, maka SBC akan menampilkan semua subject dengan awalan hurup tersebut:

Dari sini, jika kita memilih, misal, Header, lalu diikuti dengan tanda titik, maka berikutnya SBC akan menampilkan subject berikutnya:

Dari sini kita bisa memilih, bahkan yang tidak cukup ditampilkan seperti P-Asserted-Identity, cukup menekan hurup pertama, yaitu P

pilih subject tersebut, dan lanjutkan hingga penuh misal :
Header.P-Asserted-Identity.URL.User seperti berikut:

Jika subject yang kita sebut benar, akan muncul centang warna hijau di sebelah kanan isian seperti gambar di atas. Apabila salah, akan muncul pesan Invalid subject seperti di bawah ini:

Jadi, selalu gunakan Editor agar subject yang kita tuliskan benar.
Untuk isiannya, ikuti arahan seperti berikut. Klik +New dan isikan:
Index: 0
NAME: TenantFQDN by PAI (bebas diisi apa saja)
RULES SET ID: 0 (perhatikan baik-baik ID ini untuk nanti dipakai pada saat memproses panggilan).
Request Type: Dial Plan (pilih dari menu dropdown).
Request Target: TeamsTenants (ini adalah nama tabel Dial Plan yang kita buat di atas. Pastikan sama).
Request Key: Header.P-Asserted-Identity.URL.User (gunakan Editor).
Condition: DialPlan.Found exists (gunakan Editor untuk memastikan sintaks benar).
Action Subject: Var. Session.TenantFQDN (gunakan Editor. TenantFQDN adalah nama variabel buatan kita sendiri. Boleh diganti dengan nama lain, tapi pastikan ketika direferensi dari setting lain, nama harus sama. Kali ini saya akan tetap menggunakan nama ini).
Action Type: Modify (pilih dari menu dropdown).
Action Value: DialPlan.Result
Klik Apply.

Klik +New
Index: 1
Name: TenantFQDN by From
Rules Set ID: 0
Request Type: Dial Plan
Request Target: TeamsTenants
Request Key: Param.Call.Src.User
Condition: DialPlan.Found exists And Var.Session.TenantFQDN==”
Action Subject: var.Session.TenantFQDN
Action Type: Modify
Action Value: DialPlan.Result
Klik Apply.

Klik +New
Index: 2
Name: SIP Trunk DstTags
Rules Set ID: 0
Request Type: None
Action Subject: DstTags
Action Type: Modify
Action Value: var.Session.TenantFQDN
Klik Apply.

Klik +New
Index: 3
Name: TenantFQDN by R-URI
Rules Set ID: 1
Request Type: Dial Plan
Request Target: TeamsTenants
Request Key: Param.Call.Dst.User
Condition: DialPlan.Found exists
Action Subject: Var.Session.TenantFQDN
Action Type: Modify
Action Value: DialPlan.Result
Klik Apply.

Klik +New
Index: 1
Name: Teams DstTags
Rule Set ID: 4
Request Type: None
Action Subjects: DstTags
Action Type: Modify
Action Value: ‘Teams’ (perhatikan nama tag ini. Nanti akan digunakan untuk tagging di IP Groups. Boleh diberi nama lain, tapi diingat dengan baik nama tag-nya. Kali ini saya tetap menggunakan nama ‘Teams’).
Klik Apply dan Save.

Keseluruhan Call Setup Rules menjadi:

Message Manipulations
Settingini untuk memodifikasi SIP header dalam bentuk Set. Jadi dalam sebuah paket SIP dapat dilakukan banyak modifikasi.
Pilih menu SETUP -> SIGNALING & MEDIA -> MESSAGE MANIPULATION -> Message Manipulations. Lalu tambahkan baris dengan klik +New.
Index: 0
Name: TeamsTenants (nama ini bebas dan tidak ada hubungannya dengan Dial Plan, tapi alangkah bagus jika dinamakan sama dengan Dial Plan).
Manipulation Set ID: 2 (perhatikan ID ini, untuk nanti digunakan di konifigurasi berikutnya).
Condition: Var.Session.TenantFQDN !=” (gunakan Editor).
Action Subject: Header.Contact.URL.Host
Action Type: Modify
Action Value: Var.Session.TenantFQDN
Klik Apply.

Klik +New
Index: 1
Name: Remove Privacy Header
Manipulation Set ID: 1
Condition: Header.Privacy exists And Header.From.URL !contains ‘anonymous’
Action Subject: Header.Privacy
Action Type: Remove
Klik Apply.

Klik +New
Index: 2
Name: Remove PAI
Manipulation Set ID: 1
Action Subject: Header.P-Asserted-Identity
Action TypeL: Remove
Klik Apply dan Save.

Keseluruhan Message Manipulation seperti berikut:

Coder Group
Coder Group merupakan semua daftar codec yang hendak digunakan. Untuk memastikan semua konfigurasi benar, akan banyak menggunakan G711. Jika konfigurasi SBC sudah oke, mungkin bisa beralih ke SILK.
Pilih menu SETUP -> SIGNALING & MEDIA -> CODERS & PROFILES -> Coder Groups.
Secara default sudah ada Coder Group Name 0: AudioCodersGroup_0, lalu di bagian kolom Coder Name pilih: G711A-law, G711U-law, dan G729. Biarkan setting lain default. Lalu klik Apply dan Save.

IP Profiles
IP Profiles ini untuk menentukan perilaku signaling dan media di masing-masing interface. Salah satunya yaitu REFER. Karena MSTeams Phone System mengembalikan REFER panggilan dari PSTN ke SBC, bahkan ketika melakukan transfer call ke sesama pengguna MSTeams dalam satu tenant O365. Jadi di sini kita akan mengembalikan semua REFER ke MSTeams itu sendiri, terlepas ke mana REFER itu mengarah, bahkan jika mengarah ke PSTN juga.
Untuk penyetelan, masuk ke menu SETUP -> SIGNALING & MEDIA -> CODERS & PROFILES -> IP Profiles. Lalu klik +New dan isikan:
[GENERAL]
Name: Teams (bebas mau diisi apa saja, tapi keseragaman mempermudah perunutan di kemudian hari).
[MEDIA SECURITY]
SBC Media Security Mode: Secured
[SBC EARLY MEDIA]
Remote Early Media Response Type: Transparent. (di sini juga dapat memilih Renspons Type 180 atau 183).
Remote Early Media RTP Dectectio Mode: By Media
[SBC MEDIA]
Extension Coders Group: #0 [AudioCodersGroup_0] (jika mengikuti setup di atas, hanya ada satu opsi di dropdown).
RTCP Mode: Generate Always (untuk menghitung MoS, kali-kali nantinya pengen masang monitoring seperti Homer).
ICE Mode: Disable (karena tidak mengaktifkan Media Bypass. Semua media akan ditangani SBC langsung).
[SBC SIGNALING]
SIP UPDATE Support: Not Supported (MSTeams tidak mendukung ini).
Remote re-INVITE Support: Supported Only With SDP
Remote Delayed Offer Support: Not Supported (codec langsung dipilih sejak INVITE).
[SBC Forward and Transfer]
Remote REFER Mode: Handle Locally (dari sini nanti SBC akan menindak lanjuti di setelan IP-to-IP Routing).
Remote 3xx Mode: Handle Locally
[SBC Hold]
Remote Hold Format: Inactive (SBC akan mengganti SIPTrunk yang menjawab Hold dengan a=inactive dan IP=0.0.0.0 dengan ip address SBC).
Klik Save dan Apply.
Klik +New, dan isikan:
[GENERAL]
Name: SIPTrunks
[MEDIA SECURITY]
SBC Media Security Mode: Not Secured
[SBC SIGNALING]
P-Asserted-Identity Header Mode: Add (jaga-jaga jika ada panggilan anonymous, sehingga masih muncul pemanggil aslinya)
[SBC Forward and Transfer]
Remote REFER Mode: Handle Locally
Remote Replaces Modes: Handle Locally
Play RBT To Transferee: Yes (kalo ada SIP Trunk yang tidak memainkan RBT saat transfer, bisa dibuatkan RBT di SBC).
Remote 3xx Mode: Handle Locally
Klik Apply dan Save.

IP Groups
IP Groups merupakan kumpulan perangkat yang hendak terhubung ke SBC. Bisa berupa IP PBX, SBC lain, ataupun IP Phone. Sebelum melakukan IP-to-IP Routing, IP Groups harus ditentukan terlebih dahulu untuk menentukan jalur.
Pilih SETUP -> SIGNALING & MEDIA -> CORE ENTITIES -> IP GROUPS lalu klik +New dan isikan:
[GENERAL]
Name: Teams
Topology Location: Up (untuk gambar topologi).
Type: Server
Proxy Set: #1 [Teams] (dipilih dari menu dropdown)
IP Profile: #1 [Teams]
Media Realm: #1 [Teams]
[SBC GENERAL]
Classify By Proxy Set: Disable
[ADVANCED]
Local Host Name: ofon.biz (semua sub domain tenant nanti akan menggunakan base domain ini).
Always Use Src Address: Yes
[SBC ADVANCED]
Media TLS Context: #1[Teams] (dipilih dari menu dropdown)
Tags: Teams (tinjau ulang di setelan Call Setup Rules di baris Action Value: ‘Teams’, karena isian di sini di ambil dari setelan tersebut)
[MESSAGE MANIPULATION]
Inbound Message Manipulation Set: 1 (tinjau ulang di bagian Message Manipulation)
Outbound Message Manipulation Set: 2 (tinjau ulang di bagian Message Manipulation)
Klik Apply dan Save.
Klik +New untuk penambahan IP Group Hosted PBX
[GENERAL]
Name: OFON PBX (bebas sesuaikan layanan yang dipakai)
Topology Location: Down (untuk penempatan gambar topologi)
Type: Server
Proxy Set: #2 [SIPTrunks] (dipilih dari menu dropdown)
IP Profile: #2 [SIPTrunks]
Media Realm: #0 [SIPTrunk]
SIP Group Name: f2ea29.pbx001.ofon.co.id (jika IP PBX selalu menjawab request dengan 407 Proxy Authentication Required, isikan ip address atau realm akun di sini, agar disertakan ketika INVITE ulang dengan menyertakan autentikasi. Jika tidak, maka realm akan diisi SIP server Microsoft Teams, yaitu sip.psnthub.microsoft.com, dan tentunya panggilan tidak akan bisa lewat karena autentikasinya salah. Opsi kedua untuk mengatasi masalah di atas ada di seksi SBC GENERAL -> SIP Source Host Name.).
Used By Routing Server: Used
[SBC GENERAL]
Classify By Proxy Set: Enable
Call Setup Rules Set ID: 1 (tinjau ulang Call Setup Rules)
Tags: ofon.biz (sesuai yang disetel di Dial Plan)
Klik Apply dan Save.
Klik +New untuk menambah informasi Tenant berikutnya:
[GENERAL]
Name: Enterprise1-SIPTrunk
Topology Location: Down
Type: Server
Proxy Set: #3 [Maxotel] (tinjau kembali setting Proxy Set)
IP Profile: #2 [SIPTrunks]
Media Realm: #0 [SIPTrunks]
[SBC GENERAL]
Classify By Proxy Set: Enable
[SBC ADVANCED]
Call Setup Rules ID: 1 (tinjau ulang Call Setup Rule)
Tags: tenant1.ofon.biz (sesuai dengan nama SBC yang disematkan ke tenant ini dan dijadikan tag di Dial Plan).
Klik Apply dan Save.

Media Security
Karena MSTeams Direct Routing cuma mau menerima SRTP saja, maka perlu disetel juga bagian ini. Pilih menu SETUP -> SIGNALING & MEDIA -> MEDIA -> MEDIA SECURITY.
[GENERAL]
Media Security: Enable
Media Security Behaviour: Preferable
Klik Apply dan Save.

Message Condition
Message Condition bisa digunakan untuk memperketat aturan untuk SIP yang masuk ke SBC. Setelan ini dapat ditambahkan di IP-to-IP Routing.
Pilih SETUP -> SIGNALING & MEDIA -> MESSAGE MANIPULATION -> Message Coniditions.
Klik +New dan isikan:
Name: Teams-Contact
Condition: Header.Contact.URL.Host contains ‘pstnhub.microsoft.com’ (gunakan Editor untuk memastikan subject ditulis dengan benar)
Klik Apply dan Save.

Classification
Kalo bahasa sederhananya di sini tempat kita membuat ACL (Whitelist dan Blacklist). Pilih menu SETUP -> SIGNALING & MEDIA -> SBC -> Classification lalu klik +New.
[MATCH]
Name: Teams
Source SIP Interface: #1 [Teams] (dipilih dari menu dropdown)
Source IP Address: 54.114.*.* (blok ip address SIP server MSTeams Phone System).
Source Transport Type: Any
Message Condition: #0 [Teams-Contact] (dipilih dari dropdown).
[ACTION]
Action Type: Allow
IP Group Selection: Source IP Group
Source IP Group: #0 [Teams] (dipilih dari menu dropdown).
IP Group Tag Name: default
Klik Apply dan Save.

Accounts
Karena tersambung ke hosted PBX, maka SIP di sini menggunakan autentikasi user dan password. Jika SIP trunk dengan IP auth (ACL), maka tidak perlu mengkonfigurasi ini.
Klik SETUP -> SIGNALING & MEDIA -> SIP DEFINITIONS -> Accounts lalu klik +New dan isikan akun Hosted PBX pertama:
[GENERAL]
Name: OFON PBX
Application Type:SBC
Served IP Group: #0 [Teams]
Serving IP Group: #1 [OFON PBX]
Host Name: f2ea30.pbx001.ofon.co.id (sama dengan sip server yang dipasang di Proxy Set).
Contact User: <isikan username>
Register: Regular
Register by Served IP Groups Status: Register Always
[CREDENTIALS]
User Name: <isikan username akun Hosted PBX>
Password: <isikan password akun Hosted PBX>
Klik Apply dan Save.
Tambahkan akun lain di sini juga. Sehingga keseluruhan tabel menjadi seperti berikut (di sini saya menambahkan ekstra satu akun tenant untuk contoh saja):

Pastikan semua akun teregistrasi ke hosted PBX melalui Monitor -> VOIP STATUS -> Registration Status.

IP-to-IP Routing
Setelah penyetelan yang panjang sekali, sampailah kita ke tahap utama dan terpenting dalam mengkonfigurasi SBC, yaitu IP-to-IP Routing. Di sini panggilan diarahkan dari originasi ke terminasi, dengan menerapkan berbagai aturan yang sudah kita buat di atas. Yang menarik adalah, karena memanfaatkan tagging, maka berapapun jumlah tenant yang ditambahkan, selama interface SIP tidak ada penambahan, maka routing di sini cukup membutuhkan 3 baris aturan saja.
Klik SETUP -> SIGNALING & MEDIA -> SBC -> Routing -> IP-to-IP Routing. Klik +New dan isikan:
[GENERAL]
Name: Terminate OPTIONS
[MATCH]
Source IP Group: Any
Request Type: OPTIONS
[ACTION]
Destination Type: Dest Address
Destination Address: internal (mengacu pada node SBC itu sendiri).
Klik Apply dan Save.
Klik +New
[GENERAL]
Name: Refer Termination
[MATCH]
Source IP Group: Any
Request Type: All
Call Trigger: REFER (dipilih dari menu dropdown)
ReRoute IP Group: #0 [Teams] (dikembalikan ke MSTeams)
[ACTION]
Destination Type: Request URI
Destination IP Group: #0 [Teams]
Klik Apply dan Save.
Klik +New dan isikan:
[GENERAL]
Name: Dest Tag Based Routing
[MATCH]
Source IP Group: Any
Request Type: All
Call Trigger: Any
ReRoute IP Group: Any
[ACTION]
Destination Type: Destination Tag
Klik Apply dan Save.

Lakukan test panggilan inbound dan outbound. Jika tidak ada kendala lain dan setelan sudah sesuai dengan langkah-langkah di atas, harusnya panggilan berjalan dengan baik.
Penambahan Tenant Baru
Seperti yang sudah disampaikan sebelumnya, untuk routing panggilan yang terdapat di IP-to-IP Routing tidak akan bertambah lagi karena sudah memanfaatkan tagging. Untuk penambahan tenant yang mengarah ke SIP trunk yang sama, hanya perlu dilakukan di IP Groups saja. Sedangkan jika tenant mengarah ke SIP trunk yang berbeda, maka selain penambahan di IP Group juga perlu ditambahkan di Proxy Sets.
Jika akun SIP trunk berupa akun dengan autentikasi auth digest (user dan password), maka tambahkan informasi user dan password di bagian Accounts di bawah SIP DEFINITIONS. Jika SIP trunk berupa IP Auth, tidak perlu menambahkan informasi apapun di Accounts.
Topology View
Beberapa kali dalam penyetelan, kita menemukan isian Topology Location yang diisi dengan Down atau Up. Maksudnya adalah penempatan dari entiti tersebut di dalam gambar topologi yang dapat dilihat dengan memilih SETUP -> SIGNALING MEDIA -> TOPOLOGY VIEW.

Jika memilih isian Up, maka entitas akan diletakkan di atas kotak utama SBC, begitu juga sebaliknya ketika memilih lokasi Down. Gambar ini memberikan perspektif mengenai entitas yang sudah kita konfigurasi.
Pranala Luar
- https://www.audiocodes.com/media/15887/mediant-virtual-edition-sbc-for-amazon-aws-installation-manual-ver-74.pdf
- https://www.audiocodes.com/media/13161/connecting-audiocodes-sbc-to-microsoft-teams-direct-routing-hosting-model-configuration-note.pdf
- https://docs.microsoft.com/en-us/microsoftteams/direct-routing-sbc-multiple-tenants
- https://ofon.co.id/enterprise/clouddirectrouting