Asterisk 설치 방법이 정리가 잘 되어 있음!~
출처 : http://sipjs.com/guides/server-configuration/asterisk/
Guides
Tired of fighting with configs?
Configure Asterisk
SIP.js has been tested with Asterisk 11.11.0 without any modification to the source code of SIP.js or Asterisk. Similar configuration should also work for Asterisk 12.
System Setup
Asterisk and SIP.js were tested using the following setup:
- CentOS 6.5 minimal (x86_64).
- Asterisk 11.11.0.
- OpenSSL 1.0.1e-fips 11 Feb 2013 or later.
- A public IP address to avoid NAT scenarios on the server side.
Required Packages
Install the following dependencies:
- wget
- gcc
- gcc-c++
- ncurses-devel
- libxml2-devel
- sqlite-devel
- libsrtp-devel
- libuuid-devel
- openssl-devel
Using YUM, all dependencies can be installed with:
yum install wget gcc gcc-c++ ncurses-devel libxml2-devel sqlite-devel libuuid-devel openssl-devel
.
Install libsrtp
First try installing libsrtp from the repo.
yum install libsrtp-devel
If libsrtp is not available in the repo install it from source.
cd /usr/local/src/
wget http://srtp.sourceforge.net/srtp-1.4.2.tgz
tar zxvf srtp-1.4.2.tgz
cd /usr/local/src/srtp
./configure CFLAGS=-fPIC
make && make install
Install Asterisk
cd /usr/local/src/
.- Download Asterisk with
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.11.0.tar.gz
. - Extract Asterisk:
tar zxvf asterisk*
. - Enter the Asterisk directory:
cd /usr/local/src/asterisk*
. - Run the Asterisk configure script:
./configure --libdir=/usr/lib64
. - Run the Asterisk menuselect tool:
make menuselect
. - In the menuselect, go to the resources option and ensure that res_srtp is enabled. If there are 3 x’s next to res_srtp, there is a problem with the srtp library and you must reinstall it. Save the configuration (press x).
- Compile and install Asterisk:
make && make install
. - If you need the sample configs you can run
make samples
to install the sample configs. If you need to install the Asterisk startup script you can runmake config
.
Setup DTLS Certificates
mkdir /etc/asterisk/keys
- Enter the Asterisk scripts directory:
cd /usr/local/src/asterisk*/contrib/scripts
. - Create the DTLS certificates (replace pbx.mycompany.com with your ip address or dns name, replace My Super Company with your company name):
./ast_tls_cert -C pbx.mycompany.com -O "My Super Company" -d /etc/asterisk/keys
.
Configure Asterisk For WebRTC
For WebRTC, a lot of the settings that are needed MUST be in thepeer settings. The global settings do not flow down into the peer settings very well. By default, Asterisk config files are located in/etc/asterisk/
. Start by editing http.conf
and make sure that the following lines are uncommented:
1 2 3 4 5 |
;http.conf [general] enabled=yes bindaddr=127.0.0.1 ; Replace this with your IP address bindport=8088 ; Replace this with the port you want to listen on |
Change the IP address and port to the IP address of your server and the port that you would like Asterisk to listen for web socket connections on.
Next, edit sip.conf
. Here you will set up two peers, one for a WebRTC client and one for a non-WebRTC SIP client. The WebRTC peer requires encryption, avpf, and icesupport to be enabled. In most cases, directmedia should be disabled. Also under the WebRTC client, the transport needs to be listed as ‘ws’ to allow websocket connections. All of these config lines should be under the peer itself; setting these config lines globally might not work.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
;sip.conf [general] realm=127.0.0.1 ; Replace this with your IP address udpbindaddr=127.0.0.1 ; Replace this with your IP address transport=udp [1060] ; This will be WebRTC client type=friend username=1060 ; The Auth user for SIP.js host=dynamic ; Allows any host to register secret=password ; The SIP Password for SIP.js encryption=yes ; Tell Asterisk to use encryption for this peer avpf=yes ; Tell Asterisk to use AVPF for this peer icesupport=yes ; Tell Asterisk to use ICE for this peer context=default ; Tell Asterisk which context to use when this peer is dialing directmedia=no ; Asterisk will relay media for this peer transport=udp,ws ; Asterisk will allow this peer to register on UDP or WebSockets force_avp=yes ; Force Asterisk to use avp. Introduced in Asterisk 11.11 dtlsenable=yes ; Tell Asterisk to enable DTLS for this peer dtlsverify=no ; Tell Asterisk to not verify your DTLS certs dtlscertfile=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS cert file is dtlsprivatekey=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS private key is dtlssetup=actpass ; Tell Asterisk to use actpass SDP parameter when setting up DTLS [1061] ; This will be the legacy SIP client type=friend username=1061 host=dynamic secret=password context=default |
Lastly, set up extensions.conf
to allow the two peers to call each other.
1 2 3 4 |
;extensions.conf [default] exten => 1060,1,Dial(SIP/1060) ; Dialing 1060 will call the SIP client registered to 1060 exten => 1061,1,Dial(SIP/1061) ; Dialing 1061 will call the SIP client registered to 1061 |
Restart Asterisk using service asterisk restart
to ensure that the new settings take effect.
Configure SIP.js
Asterisk does not accept Contact headers with the .invalid
domain. When creating a UA, add the configuration parameterhackIpInContact. If you are missing this property you will be able to make calls from WebRTC, but not receive calls through Asterisk will fail.
Additionally this guide will only work with audio calls, Asterisk will reject video calls.
The following configuration example creates a UA for the Asterisk configuration above. Replace the values with the values from your config.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
var config = { // Replace this IP address with your Asterisk IP address uri: '1060@127.0.0.1', // Replace this IP address with your Asterisk IP address, // and replace the port with your Asterisk port from the http.conf file ws_servers: 'ws://127.0.0.1:8088/ws', // Replace this with the username from your sip.conf file authorizationUser: '1060', // Replace this with the password from your sip.conf file password: 'password', // HackIpInContact for Asterisk hackIpInContact: true, }; var ua = new SIP.UA(config); // Invite with audio only ua.invite('1061',{ audio: true, video: false }); |
- Update 10/24/2014 – If you are still having trouble with Asterisk and are using a WebSocket Secure (WSS), you can try using the
hackWssInTransport: true
parameter in your UA’s configuration. This is new as of commit 32bffbe on the SIP.js Master branch.
Troubleshooting
Firefox 34+ requires SIP.js 0.6.4 or later to interop with FreeSWITCH or Asterisk.
This forum post on troubleshooting WebRTC issues is a great guide for trouble shooting problems with Asterisk.
Asterisk Secure Calling Guide can help you setup dtls certificates.