Mencoba ENUM dari E164.ID Di Elastix

Bagi yang belum paham betul apa itu ENUM (E164 Number Mapping), bisa mencari informasinya di link berikut ini:

Intinya E164.ID ini menjadi direktori nomer telepon dan bisa menjadi penghubung  semua pengelola VoIP server yang ingin bergabung membentuk komunitas VoIP. Untuk mendapatkan blok nomer telepon ini, bisa didapatkan dengan mendaftar di TELEPONRAKYAT.ID. Di web tersebut kita bisa mendaftar sebagai Gateway (jika kita memiliki VoIP server sendiri), atau cukup mendaftarkan domain/realm saja (jika kita tidak memiliki/mengelola VoIP server sendiri). Sedangkan untuk diskusi lebih lanjut mengenai E164.ID ini bisa bergabung di forum ASTERISK.ID .

Oh ya, sebelum kita berpikir bahwa blok nomer yang kita dapatkan dengan mendaftar di TELEPONRAKYAT.ID bisa berkomunikasi dengan nomer telepon regular, perlu disampaikan bahwa E164.ID belum melakukan interkoneksi ke jaringan telepon PSTN maupun PLMN. Untuk pengguna VoIPRakyat sudah bisa menikmati panggilan dengan menggunakan nomer E164.ID. Bagi yang mau coba, bisa kontak nomer demo +62520291901 (time announcement), +62520291902 (monkey), atau di +62520291903 (echo test).

Mendaftar di TELEPONRAKYAT.ID

Sebelum melanjutkan setup, kita terlebih dahulu harus mendaftar ke TELEPONRAKYAT.ID untuk mendapatkan nomer telpon/prefix dari E164.ID. Untuk cara mendaftar silahkan baca dengan mendownload file .pdf di sini. Dengan asumsi bahwa kita sudah memiliki server Elastix, maka daftar di bagian Manage Gateway. Di sini kita akan mendapatkan alokasi prefix nomer, contoh, prefix nomer yang saya dapatkan adalah +62520-364. Setelah mendaftar, tunggu sekitar 15 menit untuk bisa melakukan lookup di E164.ID. Caranya adalah dengan menjalankan perintah berikut di shell  prompt linux:

$ dig +short *.4.6.3.0.2.5.2.6.e164.id NAPTR

jika semua berjalan lancar maka outputnya seperti :

10 1 "u" "E2U+sip" "!^\\+?(.*)$!sip:\\1@sip.domain.tld!" .

Argument untuk dig di atas diambil dari digit prefix yang kita dapat, lalu hilangkan tanda ‘+’, setelah itu urutan dibalik dari depan ke belakang, dengan masing-masing digit dipisah tanda titik. Pada ujung sebelah kiri adalah wildcard (asterisk), artinya berapapun nomer berikutnya, asalkan prefixnya adalah alokasi prefix tersebut. Untuk keterangan hasil dig, digit pertama (10) adalah priority, lalu digit berikutnya adalah weight (1), baris berikutnya adalah protokol yang digunakan yaitu UDP (untuk U), dan SIP. Sedangkan yang terkakhir adalah format URI yang didapatkan dengan regular expression.

Elastix Setup

Berhubung saya setiap hari menggunakan Elastix maka contoh setup  berikut ini menggunakan distro tersebut. Karena distro tersebut pada dasarnya menggunakan FreePBX, maka setupnya tidak banyak  berbeda bila menggunakan distro FreePBX, AsteriskNow, trixbox, Briker, dkk. Stepnya adalah sebagai berikut:

  • Dari baris Tab di menu utama, pilih tanda panah paling kanan untuk memunculkan menu dropdown, lalu pilih Security -> Advanced Settings lalu aktifkan slide button untuk Enable anonymous SIP calls. 001002
  • Selanjut pilih menu PBX -> PBX Configuration -> Trunks -> Add ENUM Trunk. Beri nama Trunk di bagian Trunk Name, misal E164.ID,  lalu klik Submit Change.003
  • Pilih menu PBX -> PBX Configuration -> Outbound Routes -> Add Route. Di bagian Route Name, isikan nama untuk route ini, misal Outbound_ENUM, lalu isikan dial patterns seperti berikut:004
  • jangan lupa di bagian Trunk Sequence for Matched Routes pilih E164.ID (sesuai nama trunk yang sudah kita buat sebelumnya), dan klik Submit Changes.
  • Sebelum melanjutkan menambahkan Inbound Routes, ada baiknya kita melakukan edit file /etc/enum.conf. Saya lebih suka menghapus semua isi file tersebut dan cukup diisi dengan  :
search => e164.id
  • Lalu edit file /var/lib/asterisk/agi-bin/enumlookup.agi :
$ sudo chmod a+w /var/lib/asterisk/agi-bin/enumlookup.agi
$ sudo vi /var/lib/asterisk/agi-bin/enumlookup.agi

di bagian baris:

$enums = Array('e164.org','e164.arpa','e164.info');

menjadi:

$enums = Array('e164.id');

setelah menyimpan perubahan, jangan lupa mengembalikan mode file supaya tidak ditimpa ulang oleh system:

$ sudo chmod a-w /var/lib/asterisk/agi-bin/enumlookup.agi
  • Selanjutnya kita perlu menambahkan realm ke Elastix. Realm adalah nama domain gateway yang kita daftarkan ke TELEPONRAKYAT.ID. Sebagai awalan, ada baiknya jika nama realm sesuai dengan FQDN (contoh sip.domain.tld) server Elastix. Karena jika realm tidak sama dengan FQDN server, misal domain.tld, maka kita perlu menambahkan entry SRV ke DNS. Secara default, realm Elastix adalah “asterisk”. Untuk menggantinya, masuk ke menu PBX -> Tools -> Asterisk File Editor, lalu edit file sip_general_custom.conf dan tambahkan baris:
realm=sip.domain.tld

Klik Save lalu klik Reload Asterisk.

  • Buat satu extensi (misal 1001). Lalu registrasi melalui SIP phone (cara menambahkan extensi tidak akan dibahas di sini). Di bagian SIP Alias (masih di halaman pembuatan extensi), tambahkan alokasi nomer dari teleponrakyat.id, misal 6252036411001.  Setelah itu klik Submit.       SIP alias
  • Optional, tambahkan juga pada Outbound CID dengan nomer alokasi di atas lengkap dengan tanda +, menjadi: +6252036411001. Tujuannya supaya ketika kita melakukan panggilan ke gateway lain, nomer telpon yang muncul adalah nomert telpon Outbound CID tersebut, bukan nomer ekstensi.
  • Edit file /etc/asterisk/extensions.conf melalui web (karena jika tidak akan dioverride ketika system reload), dan edit bagian context from-sip-external. Default dari context tersebut seperti berikut:
[from-sip-external]
exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
exten => _.,n,Set(DID=${IF($["${EXTEN:1:2}"=""]?s:${EXTEN})})
exten => _.,n,Goto(s,1)
...
...

edit menjadi:

[from-sip-external]
exten => _.520364XXXXX,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
exten => _.520364XXXXX,n,Set(DID=${IF($["${EXTEN}"=""]?s:${EXTEN})})
exten => _.520364XXXXX,n,Goto(s,1)
...
...

Pola _.520364XXXXX menyesuaikan prefix yang dialokasikan ke getway kita. Tujuan dari editing ini adalah untuk mengurangi panggilan dari source-source yang tidak dikenal karena kita memperbolehkan anonymous SIP call. Jika tidak kita ubah demkian, maka ekstensi kita akan mendapatkan banyak sekali telepon masuk dari nomer-nomer acak. Karena file extensions.conf ini tidak begitu banyak berubah/diedit oleh system (seperti extensions_additional.conf misalnya), maka lebih baik jika kita non aktifkan akses write ke file tersebut dengan perintah:

root# chmod a-w /etc/asterisk/extensions.conf

Dengan demikian file tersebut tidak akan bisa ditimpa secara tidak sengaja dan menyebabkan panggilan masuk dari URI tak dikenal (selain yang terdaftar di E164.ID) bisa lewat lagi.

  • Test call (di contoh ini saya coba test call dari nomer VoIP Rakyat) misal tidak ada kendala akan seperti ini:005Screenshot_2016-01-23-03-40-04
  • Setup firewall supaya server VoIP/IP PBX tetap aman. Contoh setup firewall bias dibaca di sini .
  • Aktifkan fail2ban (biasanya secara default sudah ada di instalasi Elastix), tinggal mengedit logpath diarahkan ke /var/log/asterisk/full (defaultnya ke /var/log/asterisk/messages) di dalam file jail.conf, lalu ubah alamat penerima dan pengirim email notifikasi. Hal ini untuk menambahkan layer keamanan di Asterisk.

Tambahan

Jika melihat CDR dari menu Reports, kita masih akan melihat banyak sekali log percobaan panggilan yang dilewatkan ke Elastix dari source-source tidak dikenal seperti ini:

007

walaupun sebenarnya tidak ada panggilan yang berhasil dilakukan, tapi log seperti ini akan tetap memenuhi CDR kita. Untuk menghindari hal ini bisa ditambahkan custom context di extensions_custom.conf seperti berikut:

[from-pstn-custom]
include => ext-did-catchall-custom
exten => s,1,Noop(No DID or CID Match)
exten => s,n,Hangup

[ext-did-catchall-custom]
exten => s,1,Noop(No DID or CID Match)
exten => s,n,Hangup

Klik Save dan Reload Asterisk.

Selamat mencoba!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>