VoIP: Detail Konfigurasi Asterisk untuk Panggilan Keluar dan Masuk
Mendefinsikan SIP Channel di /etc/asterisk/sip.conf
Setiap SIP client dan server di identifikasi dengan sebuah blok text yang kira-kira seperti
[xxx] type=yyy parameter1=nilai parameter2=nilai
Dimana xxx adalah nama yang diasosiasikan dengan SIP client, atau nama sembarang yang digunakan oleh file konfigurasi lain untuk mereferensikan pada sebuah peralatan SIP. Biasanya, sebuah SIP phone dengan nomor extension 123, biasanya akan mempunyai entry yang dimulai dengan [123]. Perlu dicatat bahwa anda tetap perlu mengaktifkan extension 123 di file /etc/asterisk/extensions.conf agar orang dapat menelepon ke extension 123. Type harus berisi "user", "peer" atau "friend".
Asterisk akan mencocokan call yang masuk dengan nama dari device dengan type=user dari percakapan protokol SIP di kolom From: user name (dengan tidak mengindahkan SIP domain). Cara lain yang juga digunakan adalah membandingkan permohonan SIP yang cocok dengan [xxx] pada file sip.conf, akan dilihat IP address pemohon yang masuk, dan melihat informasi peer dari bagian [xxx] yang cocok dengan host=nilai. Jika host=dynamic, pencocokan tidak mungkin dilakukan sampai SIP client mendaftarkan diri.
Asterisk Sebagai SIP Client
Asterisk dapat mendaftarkan diri ke SIP server lain dan menjadi client, perintah yang digunakan di /etc/asterisk/sip.conf di bawah [general] agar mendaftarkan diri ke SIP server lain adalah
register => user[:secret[:authuser]]@host[:port][/extension]
Jika anda mempunyai masalah dengan jaringan komputer anda, misalnya sambungan yang tidak stabil, sering putus, dan anda kehilangan registerasi ke SIP server anda, anda dapat menambahkan parameter registerattempts dan registertimeout di bagian general sebelum definisi register. Menset registerattempts=0 akan memaksa Asterisk untuk terus berusaha mendaftarkan diri sampai berhasil (nilai default adalah 10 kali mencoba). Nilai registertimeout mengatur lama waktu dalam detik antara usaha untuk mendaftarkan diri (nilai default adalah 20 detik).
Contoh:
register => 2345:password@mysipprovider.com/1234
Perintah di atas akan mendaftarkan nomor 2345 ke mysipprovider.com dan akan di kenali sebagai extension 1234 di Asterisk yang kita operasikan. Dalam contoh di atas maka parameter yang digunakan adalah,
user - user id untuk SIP server (contoh 2345) authuser - authorization user (optional) untuk SIP server secret - user password. host - nama server (contoh mysipprovider.com). port - port SIP di Server. Default 5060. extension - nomor extension lokal di Asterisk (contoh 1234).
Nomor extension digunakan untuk menghubungi extension lokal Asterisk dari SIP Server tempat kita mendaftarkan diri. Jika tidak ada extension maka secara automatis Asterisk akan masuk ke extension "s".
Untuk melihat apakah Asterisk telah berhasil mendaftarkan diri dengan baik ke SIP Server, dapat menggunakan Command Line Interface (CLI) Asterisk yang diakses melalui perintah asterisk -r di shell.
asterisk -r
Status registrasi dapat dilihat melalui perintah
sip show registry
Untuk melihat pesawat telepon / extension yang terdaftar di Asterisk yang kita operasikan, dapat dilihat menggunakan perintah
sip show peers
Untuk melakukan panggilan ke SIP Server diluar Asterisk, kita perlu mendefinsikan di /etc/asterisk/sip.conf seperti contoh berikut
[mysipprovider-out] type=peer secret=password username=2345 host=sipserver.mysipprovider.com fromuser=2345 fromdomain=voiprakyat.or.id nat=yes context=from-mysipprovider ; di definsikan lebih lanjut di /etc/asterisk/extensions.conf
Di /etc/asterisk/extensions.conf, kita perlu menambahkan perintah seperti
exten => _9.,1,Dial(SIP/${EXTEN:1}@mysipprovider-out,30,r)
Mohon di catat bahwa variabel ${EXTEN:1} disini akan mengambil semua karakter / huruf dari extension yang masuk kecuali satu karakter yang paling depan, dalam hal ini angka 9.
Sedang konfigurasi /etc/asterisk/extensions.conf untuk menerima call yang masuk dari SIP Server dapat juga di kembangkan dengan menambahkan perintah sebagai berikut
[from-mysipprovider] exten => 1234,1,Answer ; 1234 adalah contect extension, default contact extension adalah "s" exten => 1234,2,Dial(SIP/111,25,Ttr) ; incoming call di redirect ke SIP telepon nomor 111 exten => 1234,3,Hangup
Konfigurasi SIP - general
Pada bagian [general] di /etc/asterisk/sip.conf ada beberapa variabel yang dapat kita konfigurasi, beberapa diantaranya adalah
allow = <codec> ; codec yang di ijinkan berurut berdasarkan preferensi. Gunakan disallow=all terlebih dulu sebelum allow codec. disallow = all ; Tidak mengijinkan semua codec untuk digunakan. allowexternalinvites = yes|no ; Enable / Disable INVITE & REFER ke non-local domain. Default yes. allowguest = yes|no ; Allow atau reject panggilan dari guest (Default yes). allguest = yes|no ; Allow / deny panggilan dari guest. Default yes. autocreatepeer = yes|no ; Jika di set yes, semua orang dapat dengan mudah login sebagai peer tanpa password, biasanya bermanfaat untuk beroperasi dengan SER. Default no. autodomain = yes|no ; Enable / disable kemampuan Asterisk untuk menambahkan local hostname dan local IP address ke domain list. Default no. bindaddr = IP_Address ; IP Address yang di bind (di ikat) tempat mendengarkan sambungan. Default 0.0.0.0 (semua interface). bindport = Number ; UDP Port yang di bind (di ikat) untuk mendengarkan sambungan yang masuk. Default 5060. callerid = <string> ; Informasi Caller ID yang akan digunakan jika tidak ada informasi lain. Default asterisk. canreinvite = update|yes|no ; Hati-hati default yes. checkmwi = Number ; Interval dalam detik untuk mencek mailbox. Default 10 detik. compactheaders = yes|no ; Apakah Asterisk akan mengirim header SIP dalam bentuk kompak (singkatan) atau lengkap. Default no. context = <contextname> ; Ini adalah default context yang akan digunakan bagi pesawat telepon yang tidak memiliki context. isi context dapat di set di /etc/asterisk/extensions.conf. defaultexpirey = Number ; Default lama waktu (dalam detik) dari registrasi incoming / outgoing. Default 120 detik. dtmfmode = inband|info|rfc2833 (global setting). ; Default rfc2833. domain = domains ; daftar domain dengan dibatasi oleh koma dimana asterisk bertanggung jawab. dumphistory = yes|no ; Mengaktifkan dukungan untuk mendumping transaksi SIP ke LOG_DEBUG. Default no. externip = IP_Address atau hostname ; Alamat yang akan kita letakan di SIP messages jika kita berada di belakang NAT. Jika hostname digunakan, maka IP address yang terkait dengan hostname tersebut akan dibaca sekali pada saat membaca sip.conf. Jika kita ingin menggunakan hostname dari dynamic IP, gunakan parameter externhost. externhost = hostname.tld externrefresh = Number ; Menentukan berapa sering (dalam detik) pen-cek-an DNS dilakukan untuk 'externhost'. Default 10 detik. ignoreregexpire = yes|no ; Mengatur apakah tetap menggunakan Contact information dari sebuah peer walaupun informasi tersebut telah kadaluarsa. Default no. language = <string> ; Default bahasa yang digunakan oleh Playback()/Background(). localnet = NetAddress/Netmask ; local network dan mask. fromdomain= <domain> ; Menset default From: domain di SIP message pada saat beroperasi sebagai SIP ua (client) insecure = very|yes|no|invite|port ; Menset cara menangani sambungan dengan peers. Default no (authenticate semua sambungan ). maxexpirey= Number ; Lama durasi (dalam detik) dari registrasi incoming. Default 3600 detik. musicclass = salah satu kelas yang digunakan di musiconhold.conf musdiconhold = sama dengan musicclass nat= yes|no|never|route ; Default no yang berarti menggunakan teknik rfc3581. notifymimetype= mediatype/subtype ; Mengijinkan untuk mengoveride tipe mime di MWI NOTIFY yang digunakan di voicemail online message. Default application/simple-message-summary. notifyringing = yes|no ; Memberitahukan masuk ke tahapan RINGING. Default yes. outboundproxy =' IP_address / DNS SRV name (tidak termasuk _sip._udp prefix) ; SRV name, hostname, atau IP address dari outbound SIP Proxy. outboundproxyport = Number ; Nomor UDP port untuk Outbound SIP Proxy. pedantic = yes|no ; Akan mengaktifkan sebuah proses yang lambat untuk mencek Call-ID, SIP header dengan banyak line, dan URI-encoded header. Default no. port = <portno> ; Default SIP port untuk peer. Port ini bukan port dari Asterisk untuk mendengarkan sambungan yang masuk (lihat bindport). progressinband = never|no|yes ; Jika kita harus membangkitkan in-band ringing. Default never. promiscredir= yes|no ; Mengijinkan dukungan untuk 302 Redirects; (Catatan: akan meredirect semua ke local extension yang ada di Contact tidak ke extension di tujuan akhir). Default no.
qualify = yes|no|milliseconds ; Cek apakah client dapat dihubungi. Jika yes, maka cek akan dilakukan setiap 2000 milidetik (2 detik). Default no. realm = my realm ; Mengubah authentikasi realm untuk asterisk (default) ke yang kita inginkan. recordhistory = yes|no. ; Mengaktifkan logging dari transaksi SIP. Default no. regcontext = context ; Default context yang digunakan untuk membalas SIP REGISTER dari SIP Registrar. register => <username>:<password>:[authid]@<sip client/peer id di sip.conf>/<contact> ; Register ke SIP provider registerattempts = Number ; Jumlah message SIP REGISTER yang dikirimkan ke SIP Registrar sebelum menyerah. Default 0 (tanpa limit). registertimeout = Number ; Berapa detik yang dialokasikan untuk menunggu responds dari SIP Registrar sebelum memutuskan bahwa SIP REGISTER time out. Default 20 detik. 'relaxdtmf = yes|no ; Default no. rtautoclear = yes|no|number ; Auto-Expire friends yang dilakukan sambil beroperasi. Jika yes autoexpire akan terjadi dalam 120 detik. Default yes. rtcachefriends = yes|no ; Cache realtime friends dengan cara menambahkan mereka ke daftar internal seperti friends yang ditambahkan ke file config. Default no. rtpholdtimeout = Number ; Lama waktu tidak ada aktifitas dalam detik sebelum memutuskan call on hold. Default 0 (tidak ada limit). rtpkeepalive = Number ; Jumlah detik selang untuk RTP Keepalive packet jika tidak ada ttraffic yang lewat. Default 0 (tidak ada RTP Keepalive). rtptimeout = Number ; Jumlah detik, untuk menunggu RTP traffic sebelum kita memutuskan sambungan. Default 0 (tidak ada RTP timeout). rtupdate = yes|no ; Kirim update registry ke database pada saat menggunakan dukungan Realtime. Default yes. sendrpid = yes|no ; Jika SIP header Remote-Party-ID SIP harus dikirim. Default no. sipdebug = yes|no ; Setting Default yang menentukan apakah SIP debug di aktifkan pada saat loading sip.conf. Default no. srvlookup = yes|no ; Mengaktifkan pengecekan DNS SRV pada saat dipanggil. Default no. tos = <value> ; Set parameter IP QoS untuk outgoing media streams (nilai numerik yang dapat di terima, seperti tos=184 ) trustrpid = yes|no ; Jika SIP header Remote-Party-ID SIP dapat di percaya. Default no. useclientcode = yes|no usereqphone = yes|no ; Mengindikasikan apakah kita perlu menambahkan ";user=phone" ke URI. Default no. useragent = <string> ; Mengubah SIP header "User-Agent". Default asterisk. videosupport=yes|no ; Mengaktifkan dukungan untuk SIP video. Default no. vmexten = <string> ; Dialplan extension untuk menelepon mailbox. Default asterisk.
Konfigurasi SIP - peer dan client
Variabel berikut dapat digunakan pada setiap definisi peer
accountcode = <string> ; Users dapat diasosiasikan ke accountcode. Ada baiknya membaca konsep tentang Asterisk billing allow = <codec> ; CODEC yang diijinkan berdasarkan urutan preferensi. Gunakan terlebih dulu DISALLOW=ALL sebelum mengijinkan CODEC. disallow = all ; Disallow semua CODEC untuk peer tersebut atau definisi user. allowguest = yes|no ; Allow atau reject panggilan dari orang yang tidak di kenal. Default yes. Dapat juga diset 'osp' jika Asterisk di compile untuk mendukung OSP. auth = <authname> ; Isi dari Digest username= pada header SIP. callerid = <string> ; Caller ID yang digunakan jika tidak ada informasi yang tersedia. Default asterisk. call-limit = number ; Banyaknya sambung telepon simultan yang dapat dilakukan ke user / peer tertentu. callgroup = num1,num2-num3 ; Mendefinisikan call group yang dapat mengelepon ke alat ini. callingpres = number|descriptive_text ; Set penampilan Caller-ID terhadap sebuah sambungan / call. Nilai text deskriptive yang dapat di isi adalah allowed_not_screened, allowed_passed_screen, allowed_failed_screen, allowed, prohib_not_screened, prohib_passed_screen, prohib_failed_screen, prohib, dan unavailable. Default allowed_not_screened. canreinvite = update|yes|no ; Jika client mampu mendukung SIP re-invites. Default yes. context = <context_name> ; Jika type=user, Context adalah untuk panggilan yang masuk ke definisi user SIP. ; Jika type=peer, Context di dialplan untuk panggilan keluar / outbound dari definisi peer SIP. ; Jika type=friend maka Context digunakan untuk semua hubungan inbound dan outbound ke definisi entitas SIP. defaultip = ip.add.res.s ; Default IP address untuk client host= jika tidak dispesifikasi sebagai DYNAMIC. Digunakan jika client belum pernah terdaftar menggunakan IP address yang lain. Hanya valid jika type=peer. dtmfmode = inband|info|rfc2833 ; Bagaimana client menangani signal DTMF. Default rfc2833. fromuser = <from_ID> ; Menentukan user yang di letakan di "from" selain callerid (mengoverride callerid) pada saat melakukan calls _to_ peer (ke SIP proxy lain). Valid hanya untuk type=peer. fromdomain = <domain> ; Set default From: domain di message SIP pada saat melakukan calls _to_ peer. Valid hanya di bagian [general] atau type=peer. fullcontact = <sip:uri_contact> ; SIP URI kontak untuk realtime peer. Valid hanya untuk realtime peers. host = dynamic|hostname|IPAddr ; Client - IP address atau hostname. Jika anda menginginkan agar telepon mendaftarkan sendiri, gunakan keyword dynamic jangan menggunakan host IP. incominglimit dan outgoinglimit = Number ; Batasan dari jumlah panggilan aktif simultan yang dapat dilakukan oleh sebuah SIP client. Valid hanya untuk type=peer. insecure = very|yes|no|invite|port ; Menentukan bagaimana cara menangani sambungan dengan peer. Default no (authentikasi bagi semua sambungan). ipaddr = ip.addr.dari.peer ; Valid hanya untuk realtime peer. language = Kode bahasa seperti di definisikan di indications.conf ; Mendefinisikan bahasa untuk menyapa mailbox = mailbox ; extension untuk Voicemail. Valid hanya untuk type=peer. md5secret = MD5-Hash dari "<user>:asterisk:<secret>" ; dapat digunakan sebagai pengganti secret. musicclass = menentukan salah satu kelas yang di tulis di musiconhold.conf name = <name> ; Nama dari realtime peer. Valid hanya untuk realtime peer saja. nat = yes|no ; Variabel ini menentukan pola aksi Asterisk untuk client dibelakang NAT. Tapi masih belum menyelesaikan masalah jika Asterisk dibelakang NAT. Default no, yang artinya menggunakan teknik RFC3581. outboundproxy = IP_address atau nama DNS SRV ; SRV name, hostname, atau IP address dari outbound SIP Proxy. Valid hanya di section [general] dan type=peer. progressinband = never|no|yes ; Apakah kita membangkitkan ring di in-band. Default never. promiscredir= yes|no ; Mengijinkan dukungan untuk 302 Redirects. Default no. qualify = yes|no|milliseconds ; cek apakah cluent dapat dihubungi. Jika yes, cek akan dilakukan setiap 2000 milliseconds (2 detik). Valid hanya di section [general] dan type=peer. regseconds = seconds ; Waktu dalam detik antara SIP REGISTER. Valid hanya untuk realtime peer saja. rtpkeepalive = seconds ; Waktu dalam detik, pengiriman paket RTP Keepalive jika tidak ada RTP traffic di sambungan. Default 0 (tidak ada RTP Keepalive). Valid hanya untuk section [general] dan type=peer. rtptimeout = seconds ; Putuskan hubungan jika dalam x detik tidak ada aktifitas RTP dan kita tidak dalam posissi on hold. Valid hanya di section [general] dan type=peer. rtpholdtimeout = seconds ; Putuskan hubungan jika dalam x detik tidak ada aktifitas RTP dan kita dalam posisi on hold. Valid hanya untuk section [general] dan type=peer. secret = password ; Jika Asterisk berfungsi sebagai SIP Server, maka SIP client harus login menggunakan "password". Jika Asterisk berfungsi sebagai SIP client ke remote SIP server, maka membutuhkan SIP INVITE authentication, maka isi secret digunakan untuk authentikasi SIP INVITE yang dikirim Asterisk ke remote server. sendrpid = yes|no ; Jika Remote-Party-ID SIP header harus dikirim. Default no. setvar = variable=value ; Channel variable yang harus di set untuk semua sambungan ke peer/user ini. subscribecontext = <context_name> ; Set context yang spesifik untuk permohonan SIP SUBSCRIBE trustrpid = yes|no ; Jika Remote-Party-ID SIP header perlu di percaya. Default no. type = user|peer|friend ; Hubungan antara client - outbound provider atau full client? usereqphone = yes|no ; Menunjukan apakah perlu menambahkan ";user=phone" ke URI. Default no. Valid hanya untuk section [general] dan type=peer. username = <username[@realm]> ; Jika berfungsi sebagai SIP client ke remote SIP server yang membutuhkan authentikasi SIP INVITE, maka parameter ini digunakan untuk authentikasi SIP INVITE yang akan dikirim Asterisk ke remote SIP server. Jika, untuk peers yang akan mendaftarkan diri ke Asterisk, username digunakan di INVITE sampai mereka terdaftar. vmexten = <string> ; Dialplan extension untuk menghubungi mailbox. Default asterisk. Valid hanya di section [general] atau type=peer.
Beberapa contoh SIP Client
Setiap SIP Client yang tersambung ke Asterisk membutuhkan definisi di /etc/asterisk/sip.conf, berikut adalah beberapa contoh
[2000] context=default type=friend username=2000 secret=123456 host=dynamic dtmfmode=rfc2833 mailbox=2000@default rfc2833compensate=yes [xlite1] ; Matikan silence suppression di X-Lite ("Transmit Silence"=YES)! ; Karena Xlite mengirim paket NAT keep-alive, qualify=yes tidak dibutuhkan type=friend username=xlite1 callerid="Jane Smith" <5678> host=dynamic nat=yes ; X-Lite di belakang NAT router canreinvite=no ; Umumnya di set NO jika di belakang NAT disallow=all allow=gsm ; GSM mengkonsumsi bandwidth lebih sedikit dari G.711-u (ulaw) allow=ulaw allow=alaw
Contoh lain, jika kita menyambungkan diri ke VoIP Rakyat tanpa NAT
[general] disallow=all allow=gsm allow=ulaw allow=alaw context=from-sip maxexpirey=180 defaultexpirey=160 tos=reliability register => <VR#>:<VR_PASSWORD>@voiprakyat.or.id/CONTACT [voiprakyat.or.id] type=friend secret=<VR_PASSWORD> username=<VR#> host=voiprakyat.or.id insecure=very ; dibutuhkan untuk panggilan incoming dari VoIP Rakyat
Setelah SIP client account di definisikan di /etc/asterisk/sip.conf dan kita dapat login ke asterisk server, untuk menerima panggilan, kita perlu perlu mengkonfigurasi /etc/asterisk/extensions.conf. Contoh:
exten => 1010,1, Dial(SIP/user3_cisco,10,t)
Jika seseorang menelepon extension 1010, maka SIP client yang login sebagai user3_cisco akan di hubungi untuk menerima call tersebut.