Kompetisi DC "Membangun Server VoIP"

Keyword : VoIP, PHP, Server

hallo DC :smiley: apa kabar semuanya? berhubung ada kompetsi di DC ane mau coba bikin thread barangkali ini juga berguna buat temen-temen semua. :ngakak:
langsung aja nih tema dari thread ini adalah “Membangun Server VoIP Berbasis Open Source dengan Registrasi Pengguna Berbasis Web”.

VoIP atau disingkat Voice over Internet Protocol merupakan suatu sistem yang menggunakan jaringan internet untuk mengirimkan data paket suara (Voice) dari satu tempat ke tempat yang lain. nah VoIP ini juga tidak cuman bisa mengirimkan paket suara (Voice) saja melainkan multimedia juga bisa, tapi pada tutorial kali ini ane cuma bisa suara aja atau telpon-telponan dah. belum coba develop buat yang bisa sms-an gitu. untuk membangun sebuah Server VoIP diperlukan aplikasi yang dapat melakukan Switching, karena pada prinsipnya proses telepon itu adalah proses switching, kalo jaman dulu dan sekarang juga masih banyak yang gunain masih berbentuk hardware dan itu mahal, sekarang udah ada yang berbentuk software. jadi sentral telepon yang menggunakan hardware biasa di sebut hardswitch sedangkan yang berupa software adalah softswitch.

Softswitch yang ane gunain yaitu Asterisk, aplikasi ini lah yang akan menjadi sentral telepon pada jaringan VoIP nanti. di dalam asterisk ada banyak file yang harus di konfigurasikan, ane menggunakan protokol SIP (Session Initiation Protocol) dalam Server VoIP ini jadi file konfigurasi yang ada pada asterisk untuk konfigurasi minimal hanya ada 2 (dua) file yaitu sip.conf dan extension.conf. fungsi dari file sip.conf adalah file dimana daftar pengguna atau user sedangkan file extension.conf untuk menentukan dengan cara bagaimana pengguna dapat melakukan telepon-telponan (CMIWW). :smiley:
terus apa hubungannya dengan website? jadi, kalo tadi ane sebutin bahwa file sip.conf kan untuk daftar pengguna. nah file ini harus diisi dengan cara manual oleh sang administrator secara satu persatu :mewek: bayangkan jika ada banyak pengguna yang harus di daftarkan? gempor itu administratornya, nah dengan adanya website ini, jadi file sip.conf dapat ter isi dengan otomatis. :smiley: :smiley: (script yang ane gunain pake PlayVoip punya pak Anton Raharja). :pinter:

okeh kira-kira segitu cukup untuk basa basinya, :smiley:
analisis kebutuhan yaitu:
A. Hardware (yang ane pake di rumah)

  1. Proc = intel core 2 duo
  2. Ram = 3 GB
  3. Harddisk = 40 GB
  4. LAN Card = TP-Link
  5. Access Point = TP-Link

B. Software

  1. OS = Ubuntu 12.04
  2. Softswitch = Asterisk 1.8
  3. Database = MySQL
  4. Webserver = Apache2
  5. DNS = BIND9 (Biar kaya server beneran pake DNS :smiley: )
  6. DHCP = isc-dhcp-server

nah kira-kira kaya gambar di bawah ini rancangannya. :bangga:

tutorial ini di bagi menjadi 3 (tiga) tahapan:

  1. Instalasi
  2. Konfigurasi
  3. Implementasi

okeh lanjut :smangat:

1.Instalasi
pada tahap instalasi ini ane ngga bahas tentang instalasi OS Ubuntu ye, pasti udah pada jago :D. jadi ane cuman instalasi Asterisk, MySQL, Apache2, DNS, isc-dhcp-server.

A. Instalasi Asterisk
Sebelum instalasi asterisk harus diinstall terlebih dahulu library yang dibutuhkan oleh Ubuntu:


apt- get install build-essential
apt- get install libssl-dev
apt- get install doxigen
apt-get install libncurses5-dev

Kemudian Dowload Package yang di perlukan :smiley:
Download source DAHDI (Digium.Asterisk Hardware Device Interface):


wget https://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.6.0+2.6.0.tar.gz

Download Source Libri 1.4.12


wget https://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.12.tar.gz

Download source Libss 1.0.7


wget https://downloads.asterisk.org/pub/telephony/libss7/releases/libss7-1.0.2.tar.gz

Download source Sound untuk asterisk


wget https://downloads.digium.com/pub/asterisk/releases/asterisk-sounds-1.2.1.tar.gz

Download source mpg123


wget https://sourceforge.net/projects/mpg123/files/mpg123/1.13.7/mpg123-1.13.7.tar.bz2

Download source addons asterisk


wget https://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons-1.6.2.3.tar.gz

Download source asterisk 1.8


wget https://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.10.1.tar.gz

karena kita menggunakan linux maka segala aktifitasnya banyak dilakukan di dalam console :smiley:
Setelah selesai terdownload copy semua hasil download ke dalam direktori /usr/local/src setelah itu masuk dalam direktori /usr/local/src dan extract semua file.


cd /usr/local/src
tar jxvf mpg123-1.13.7.tar.bz2
tar zxvf dahdi-linux-complete-2.6.0+2.6.0.tar.gz
tar zxvf asterisk-addons-1.6.2.3.tar.gz
tar zxvf libss7-1.0.2.tar.gz
tar zxvf asterisk-sounds-1.2.1.tar.gz
tar zxvf libpri-1.4.12.tar.gz
tar zxvf asterisk-1.8.10.1.tar.gz

selanjutnya adalah tahap kompile file yang baru di ekstrak tersebut, secara berturut turut sebagai berikut:
file mpg123


cd mpg123-1.13.7
./configure
make
make install 

Compile file libri


cd libri-1.4.12
make all
make install

Compile file dahdi


cd dahdi-linux-complete-2.6.0+2.6.0
make
make install
make config

Compile file asterisk addons


cd asterisk-addons-1.6.2.3
./configure
make
make install
make samples

Compile file libss7


cd  libss7-1.0.2
make
make install

Compile file asterisk sounds


cd  asterisk-sounds-1.2.1
make install

Complie asterisk 1.8


cd  asterisk-1.8.10.1
./configure
make menuselect
make all
make install
make samples 

setelah itu coba kita lihat udah terinstall belum asterisknya dengan perintah


asterisk -r

jika telah sukses maka seperti gambar berikut

[details=asterisk]
[/details]
:mantap:

B. Instalasi BIND9


apt-get install bind9 

C. Instalasi Apache2


apt-get install apache2 php5 links

D. Instalasi dhcp


apt-get install isc-dhcp-server

E. Instalasi MySQL


apt-get install mysql-server 

  1. Konfigurasi

A. Konfigurasi Jaringan
Konfigurasi jaringan ini untuk memberikan alamat ip address server yang statis, ane memberikan IP Address 192.168.3.1 sebagai alamat IP server. Berikut konfigurasi IP Address pada system operasi Ubuntu yang berada pada direktori /etc/network/interfaces:


iface eth1 inet static
address	192.168.3.1
netmask	255.255.255.0

B. Konfigurasi DNS
Konfigurasi DNS yang pertama adalah membuat dua file yaitu db.badai.zone dan db.badai.rev yang berada pada direktori /etc/bind/. Dengan cara seperti biasa :smiley: buka terminal lalu ketikan

touch db.badai.zone  db.badai.rev.

selanjutnya edit file db.badai.zone yang baru di buat


;
$TTL	604800
$ORIGIN badai.com
@	IN	SOA	ns.badai.com. admin.badai.com.(
   			2008110401	; Serial
   			604800	; Refresh
    	86400  	; Retry
    	2419200     ; Expire
   	604800 )    ; Negative Cache TTL
;
IN	NS	ns.badai.com.
IN	A	192.168.3.1
www	IN	CNAME	ns
sip	IN	CNAME	ns

edit file db.badai.rev


@	IN	SOA	ns.badai.com. admin.badai.com.(
   		2008110401	; Serial
   		604800	; Refresh
   		86400		; Retry
   		2419200	; Expire
   		604800 )	; Negative Cache TTL
;
IN	NS 	ns.badai.com.
1	IN	A	ns.badai.com.

Selanjutnya edit file named.conf pada direktori /etc/bind/ dan tambahkan baris berikut:


zone “badai.com” {
type master;
file “/etc/bind/db.badai.zone”;
};

zone “3.168.192.in-addr.arpa” {
type master;
file “/etc/bind/db.badai.rev”;
};

C. Konfigurasi DHCP
Selanjutnya adalah konfigurasi DHCP yang pertama adalah edit file isc-dhcp-server pada direktori /etc/default/ menggunakan vi editor, berikut penjelasannya: vi /etc/default/isc-dhcp-server ganti baris INTERFACES="eth0″ menjadi INTERFACES="eth1″ ini disesuaikan karena ane menggunakan eth1 sebagai port yang akan mendistribusikan IP address.
Selanjutnya adalah edit file dhcpd.conf yang berada pada direktori /etc/dhcp/ menggunakan editor berikut isi dari file tersebut:


subnet 192.168.3.1 netmask 255.255.255.0 {
range 192.168.3.10 192.168.3.250;
option domain-name-servers ns.badai.com;
option domain-name “badai.com”;
option routers 192.168.3.1;
option broadcast-address 192.168.3.255;
default-lease-time 600;
max-lease-time 7200;
}

D. Konfigurasi Web Server
Konfigurasi yang pertama adalah membuat sebuah direktori sip.badai.com pada direktori /var/www ini adalah folder tempat dimana halaman-halaman website akan tersimpan. Kemudian copy file pada direktori seperti dibawah ini.


cp /etc/apache2/site-available/default  /etc/apache2/site-available/sip.badai.com

Edit file sip.badai.com


vi /etc/apache2/site-available/sip.badai.com


NameVirtualHost 192.168.3.1:80
<VirtualHost 192.168.3.1:80>
ServerAdmin webmaster@badai.com
ServerName sip.badai.com
DocumentRoot /var/www/sip.badai.com
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory “/var/www/cgi-bin”>
AllowOverride None
Option +ExecCGI –MultiViews +SymlinksIfOwnerMatch
Order Allow,deny
Allow from all
</directory>
</VirtualHost>

Selanjutnya copy file sip.badai.com ke direktori /etc/apache2/site-enabled seperti berikut


cp  /etc/apache2/site-available/sip.badai.com  
/etc/apache2/site-enabled/sip.badai.com

E. Konfigurasi sip.conf
edit file sip.conf pada /etc/asterisk.sip.conf sebenernya file ini ter-isi secara otomatis, namun hanya contoh saja. :smiley:


;BEGIN 40001
[40001]
type=friend
username=40001
secret=abc1
host=dynamic
callerid=badai <40001>
context=default
dtmfmode=rfc2833
mailbox=40001

40001 adalah nomer telepon, setiap pengguna akan berbeda - beda :wawa:
40001
40002
40003

4xxxx

ini juga harus di ganti di sesuaikan sama alamat IP kita :pasrah:


[general]
rtcachefriends=yes
context=default			
realm=ns.badai.com
port=5060			
bindaddr=192.168.3.1	
srvlookup=yes		
pedantic=yes	

F. Konfigurasi extension.conf
Dial plan adalah proses peroutingan akun user SIP yang telah didaftarkan. Konfigurasi dial plan dilakukan pada file extensions.conf konfigurasi disini dilakukan agar tiap client yang terdaftar dapat melakukan proses komunikasi RTP antar client. berikut konfigurasi extensions.conf


[default]
include => macro-stdexten
include => demo
; demo call handler
exten => 900,1,Goto(demo,s,1)
; current server time
exten => 901,1,Ringing
exten => 901,2,Wait,2
exten => 901,3,SayUnixTime(ABdYIMp)
exten => 901,4,Hangup		
; noise tests
exten => 902,1,Ringing
exten => 902,2,Wait,2
exten => 902,3,Playback(tt-monkeysintro)	
exten => 902,4,Playback(tt-somethingwrong)	
exten => 902,5,Playback(tt-monkeys)	    
exten => 902,6,Playback(privacy-thankyou)	    
exten => 902,7,Hangup
; echo tests
exten => 903,1,Ringing
exten => 903,2,Wait,2
exten => 903,3,Playback(demo-echotest)	
exten => 903,4,Echo			
exten => 903,5,Playback(demo-echodone)	
exten => 903,6,Hangup
; voicemail access
exten => 904,1,Ringing
exten => 904,2,Wait,2
exten => 904,3,VoicemailMain,s${CALLERIDNUM}
exten => 904,4,Hangup
; local call
exten => _4XXXX,1,Ringing
exten => _4XXXX,2,Wait,2
exten=>_4XXXX,3,Macro(stdexten,${EXTEN},SIP/${EXTEN}/${EXTEN})
exten => _4XXXX,4,Hangup

G. Membuat File Refresh Otomatis
File ini diberi nama astwebhelper dan tersimpan pada direktori /usr/local/sbin.


#!/bin/bash
# Path web otomatisasi
VRWEB="/var/www/badai.com";
# Path php binary
PHPBIN="/usr/bin/php";
# Log peers
/usr/sbin/asterisk -rx "sip show peers" > /var/log/asterisk/peers_sip
# Update website
CWD=`pwd`
cd $VRWEB
$PHPBIN -q $VRWEB/updateconf.php
cd $CWD
# Reload new accounts (if any)
#/usr/sbin/asterisk -rx "reload"
#/usr/sbin/asterisk -rx "sip reload"
/usr/sbin/asterisk -rx "reload"

:mantap:

Setelah itu kita membuat crontab untuk astwebhelper agar selalu refresh setiap satu menit, berikut konfigurasinya


crontab –e
* * * * * /usr/local/sbin/astwebhelper >/dev/null 2>&1

H. Pembuatan Database
Pada pembuatan database dan tabel yang pertama dilakukan adalah masuk kedalam mysql server menggunakan terminal, lalu login kedalam mysql server, berikut pembuatannya: :smiley: :metal:


CREATE Database voip;
Use voip;
CREATE TABLE `tblUser` (
  `id` int(11) NOT NULL auto_increment,
  `creation_datetime` datetime NOT NULL default '0000-00-00 00:00:00',
  `realname` varchar(50) NOT NULL default '',
  `email` varchar(50) NOT NULL default '',
  `location` varchar(50) NOT NULL default '',
  `protocol` varchar(20) NOT NULL default '',
  `phone` varchar(20) NOT NULL default '',
  `username` varchar(20) NOT NULL default '',
  `secret` varchar(20) NOT NULL default '',
  `host` varchar(20) NOT NULL default '',
  `callerid` varchar(20) NOT NULL default '',
  `context` varchar(20) NOT NULL default '',
  `dtmfmode` varchar(20) NOT NULL default '',
  `mailbox` varchar(20) NOT NULL default '',
  `nat` varchar(20) NOT NULL default '',
  `canreinvite` varchar(20) NOT NULL default '',
  `flag_update` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

:pinter: :pinter:

untuk pembuatan website mungkin ane ngga bisa masukin seluruh script kedalam tutorial ini, untuk temen-temen kalo mau develop juga bisa pake Playvoip yang dari awal udah ane sampein :bangga:, ane mau kasih tampilannya aja kalo yang udah jadi :smiley: sedikit ane kasih design biar berwarna aja :hore: berikut halam index.php dari sip.badai.com

[details=index.php]
[/details]

  1. Implementasi
    pada tahap implementasi ini ane simulasikan dengan 2 (dua) pengguna.
    Pengguna satu
  • Laptop
  • OS W7
  • Softphone X-lite

Pengguna dua

  • Handphone
  • OS Android
  • Softphone CSIPSimple

softphone itu adalah aplikasi yang digunakan sebagai user agent atau aplikasi yang di gunakan untuk client (ex: Yahoo Messanger a.k.a YM) :smiley:

okeh untuk simulasi ini, ane misalkan pengguna satu untuk mengkses sip.badai.com melalui web browser kemudian pilih menu register, pengguna nnti harus mengisikan realname, email, dan location, nnti web site akan menghasilkan username (no telpon) dan password secara otomatis, fungsi dari username (no telepon) dan password itu adalah untuk di masukan kedalam softphone pengguna.

Spoiler

:mantap: :mantap:

anggap aja kedua pengguna ini sudah melakukan registrasi, maka kita akan coba liat gambarnya kedua pengguna menggunkan softphone :belajar:

konfigurasi x-lite pada pengguna satu

X-LITE




selanjutnya
konfigurasi CSIPSimple pada pengguna dua
kalo dari android tinggal ke store-nya aja terus cari CSIPSimple terus install deh, konfigurasinya kaya gini

CSIPSimple




selanjutnya jika terjadi call :smiley:

call


demikian tutorial ane kali ini semoga bermanfaat buat kita semua, :pinter: masih banyak kekurangan dari tuturial ini, barangkali dari temen-temen ada yang bisa sharing.

Terimakasih DC

*NB : tambahan, Semua komunikasi antar pengguna mengunakan wireless.

Spoiler

om admin kalo thread ane salah masuk kamar tolong pindahin ya thread ane, :smiley: terimaksih :mantap: :mantap:

banyak yg bisa diambil dari nih tutor… :mantap:
:belajar:

wanjer keren amat ni trit :wow:

wah laiani saya suka baca-baca simak yanw :metal: :belajar:

tutor sperti ini yg membuat indonesia maju, mntap bener oms,

+1

moga2 ditambah tutornya yg bisa sms san :smiley:

mantep om :smiley:
siapa tau nanti bisa di kembangkan dan DC punya voip server sendiri :mantap:

bisa juga voip server nya di cluster pakai DRBD

mantep om
makasih bantu ane bener nih :mantap:

afgan :mantap

:shock: keren banget ini trit

:mantap om

di cluster pake DRBD buat duplikasi data aja ya om?? :smiley: (ntr ane coba develop) :belajar:

keren banget om, ane juga pernah bikin ginian :mantap:

tapi ini baru tahap awal, masih ada routing dan sebagainya. jadi misal nanti ada yg telepon lewat kabel telpon biasa nanti ada suara org ngomong otomatis (mirip kayak call centre di provider telekomunikasi) buat ngasih tau ekstension. nanti org yg nelpon tinggal mencet ekstensionnya nanti dihubungin ke org yg bersangkutan sesuai ekstensionnya. dan masih banyak model routing lainnya seperti misal kita mau nelpon ke provider A dari voip nanti otomatis diarahkan ke line telepon yg menggunakan provider A, agar tarif pulsa tidak membengkak.

:smiley:

noyii bener banget, sebetulnya ane juga udah sampe bisa ky gitu si, :smiley: :smiley:

subscribe dulu :mantap:

gila dengan skrip ne ampun gw dah

coba :ngacir

monggo om :smiley:

:hah: :smangat:
om cangci sekali muncul langsung ngasih tutor dewa :panik:

:smiley: :smiley: om momodrock bisa aja nih,

:terharu:

:seneng: hihihiy
d tggu omz tutor berikutnya :kalem: