Asibul Ahsan(063473056)


Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Asibul Ahsan(063473056)

  1. 1. ETE 605: IP Telephony Setting an IP telephony solution between Asterisk Servers Course Instructor: Dr. Mashiur Rahman Submitted by: Md. Asibul Ahsan ID: 063 473 056 Date of Submission- 15/04/08
  2. 2. Introduction: Asterisk is the world’s leading open source telephony engine and tool kit. Different types of VoIP solution can be provided using Asterisk. The unit configuration of asterisk is quit simple and anyone can able to configure it easily. But in practical implementation where communication between multiple Asterisk servers is required, there are lots of methods to implement this. Depending upon the situation we have to choose the right method. The main objective of my report is to choose the right method depending upon the situation. Objective: • Implementation of IP telephony solution between two asterisk • Discuss various methods for communicating between two Asterisk server Communication Between Two Asterisk: There are various methods to communication between two Asterisk servers. • IAX (Inter Asterisk Exchange) • SIP • H.323 • MGCP Of course you can also use SIP or H.323 (but not MGCP) to interlink two Asterisk servers, however IAX is the most common approach (Note: SIP > IAX > SIP does not currently work for video calls as of Jan 08). In order to share a dial plan you can • intelligently design the dial plan on each server so that it becomes immediately clear when an extension on the other server is dialed, e.g. use 3xxx for server A, 4xxx for server B, and 5xxx for extensions on server C. • use the "switch" statement to make server A lookup locally unknown extensions on server B (both boxes must be permanently on-line, if that is not the case you'll experience large delays when dialing!) • use DUNDi: Distributed Universal Number Directory (DUNDi) • use EnumLookup SIP methods Unlike with IAX there is no clean distinction between type=peer and type=user when it comes to sip.conf. You can start out with type=friend on both sides, and if you get that working you'll probably want to split the entry into a peer and a user. Also take a look at the sip.conf parameters "insecure=very" and maybe "autocreatepeer=yes".
  3. 3. • server A with static IP, server B with dynamic IP: Register server B with server A in sip.conf • both servers with static IP: No need to register at all • both servers with dynamic IP: That's a bit tricky, you'll need to resort to a service like in to be able to register the servers with each other; in any case this is not a good setup as during IP change connectivity will be lost until the update has been propagated through dyndns. • both servers behind their own NAT: Don't use SIP, turn to IAX2 instead Fig: Connecting two Asterisk servers using SIP SIP can be used to interconnect two Asterisk boxes. It is important to pay attention to the dial plan before moving on with this configuration. Users usually want to connect other PBXs with minimal effort. The idea now is to use an extension number only to connect to the other PBX. The complete implementation is given bellow: Server 1: IP : Server Name: B Extension : 34XX Server 2: IP : Server Name: A Extension : 30XX
  4. 4. Required Configuration Files: 1) sip.conf 2) Extension.conf Server 1 sip.conf [B] type=user secret=B host= allow=all canreinvite=no [B-out] type=peer fromuser=A username=A secret=A host= allow=all canreinvite=no [3401] callerid="West User" <3401> canreinvite=no context=default host=dynamic mailbox=3401 secret=3401 type=friend username=3401 allow=all [3402] callerid="West User" <3402> canreinvite=no context=default host=dynamic mailbox=3402 secret=3402 type=friend username=3402 allow=all
  5. 5. extension.conf [default] exten=_34XX,1,dial(SIP/${EXTEN},20) exten=_34XX,2,hangup() exten=_30XX,1,dial(SIP/B-out/${EXTEN}) exten=_30XX,2,hangup() Server 2 sip.conf [A] type=user host= secret=A allow=all canreinvite=no [A-out] type=peer host= fromuser=B username=B secret=B allow=all canreinvite=no [3001] callerid="East User" <3001> canreinvite=no context=default host=dynamic mailbox=3001 secret=3001 type=friend username=3001 allow=all [3002] callerid="East User" <3002> canreinvite=no context=default host=dynamic mailbox=3002 secret=3002
  6. 6. type=friend username=3002 allow=all extension.conf [default] exten=_30XX,1,dial(SIP/${EXTEN},20) exten=_30XX,2,hangup() exten=_34XX,1,dial(SIP/A-out/${EXTEN}) exten=_34XX,2,hangup() Log Files for call from extension 3001(server A) to 3401 (Server B) Server : A *CLI> *CLI> -- Executing [3401@default:1] Dial("SIP/3001-0891ebe0", "SIP/A-out/3401") in new stack -- Called A-out/3401 -- SIP/A-out-08923e58 is ringing -- SIP/A-out-08923e58 answered SIP/3001-0891ebe0 -- Packet2Packet bridging SIP/3001-0891ebe0 and SIP/A-out-08923e58 == Spawn extension (default, 3401, 1) exited non-zero on 'SIP/3001-0891ebe0' Server : B *CLI> *CLI> -- Executing [3401@default:1] Dial("SIP/B-084c0e48", "SIP/3401|20") in new stack -- Called 3401 -- SIP/3401-084c64a0 is ringing -- SIP/3401-084c64a0 answered SIP/B-084c0e48 -- Packet2Packet bridging SIP/B-084c0e48 and SIP/3401-084c64a0 == Spawn extension (default, 3401, 1) exited non-zero on 'SIP/B-084c0e48'
  7. 7. IAX setup details An IAX connection between two Asterisk servers is setup in steps: • Configure Asterisk servers at both ends in iax.conf, one as peer and the other as user. • Set up the user's dialplan in extensions.conf so that calls can be made from the user to the peer. • Optionally, register the peer with the user (for when the peer's ip is dynamic and therefore unknown by the user.) • Repeat the previous steps in the opposite direction (swap peer and user) if you want to be able to place calls in both directions. Declaration of IAX2 user A peer receives calls. The following would be needed in iax.conf on the peer machine to verify (authenticate) the identify of the user before allowing calls from that user. [username] type=user auth=md5 secret=secretword context=iax2users The "context" is important as it sets the local context in which to place any calls incoming from this user (see extensions.conf ). This setup lets the remote user register to your system from any host. If you want to restrict which IP-address or hostname the remote user connects from, add permit or deny settings when describing the user in the peer's iax.conf. Declaration of IAX2 peer A user makes calls. The following would be needed in iax.conf on the user machine to identify (authenticate) itself to the peer before the peer will take the call. [peername] type=peer host=hostname.domain.tld (or "dynamic" which would then require a "register" comman d by the peer.) auth=md5 secret=secretword ; redundant when already embedded in Dial string username=username-at-the-peer ; redundant when already embedded in Dial string Please note:
  8. 8. • a type=user is to authenticate an incoming call • a type=peer is someone you send a call to • type=friend, of course, is both Using type=friend makes life easier, but treat it as a shortcut. If you add both type=friend and host=hostname, domain.ext you limit the hosts your peer can place calls from, which may not be what you want. For instructions on using auth=rsa, see Asterisk IAX RSA authentication wiki page. Now that we have completed steps 1 and 2 the only thing left is to set up the dialplan. Read the examples below for how to accomplish that. Connecting the dial plans Example 1 extensions.conf: exten => _7XXX,1,Dial(IAX2/myserver:passwordA@IAXserverA/${EXTEN:1},30,r) exten => _7XXX,2,Dial(SIP/myserver:passwordA@SIPserverA/${EXTEN:1},30,r) exten => _7XXX,3,Congestion exten => _8XXX,1,Dial(IAX2/myserver:passwordB@IAXserverB/${EXTEN:1},30,r) exten => _8XXX,2,Dial(SIP/myserver:passwordB@SIPserverB/${EXTEN:1},30,r) exten => _8XXX,3,Congestion Of course we'll need matching entries like [IAXserverA] etc. in iax.conf and sip.conf in order for the above to work as intended. The example uses SIP as a fallback in case we have problems with your IAX connection. Note that with this approach username and password will be shown in the CDR records (you might want to use the second example or to look at using keys instead of a username/password combination)! Example 2 This example doesn't show the username and secret in the CDR. Note: As if 1.0.9 this shortcut is still not part of the Asterisk Stable branch, so still requires the user and password as part of the dial string in extensions.conf. e.g. exten => _7XXX,1,Dial(IAX2/username:pass@serverB/${EXTEN:1},30,r) (serverA) iax.conf
  9. 9. [general] register => <username>:<password>@<serverB hostname or IP> [serverB] type=friend user=<username> secret=<password> host=<serverB hostname or IP> extensions.conf exten => _7XXX,1,Dial(IAX2/serverB/${EXTEN:1},30,r) exten => _7XXX,2,Congestion (serverB) iax.conf [serverA] type=friend user=<username> secret=<password> host=<dynamic> | <serverA hostname or IP> extensions.conf exten => _8XXX,1,Dial(IAX2/serverA/${EXTEN:1},30,r) exten => _8XXX,2,Congestion In some cases the serverA and serverB, will be the usernames of the server. Example 3 With the Switch object in extensions.conf you may connect two Asterisk servers and the other servers dial plan. In this case our own box "server C" will either connect to "server A" or "server B": [default] exten => _801XXX,1,Goto,srvA|${EXTEN}|1 exten => _802XXX,1,Goto,srvB|${EXTEN}|1 [srvA] exten => _801XXX,1,StripMSD,3 exten => _XXX,2,Goto,1 switch => IAX/serverA [srvB] exten => _802XXX,1,StripMSD,3 exten => _XXX,2,Goto,1 switch => IAX/serverB
  10. 10. Notes: You may not establish circular links by switching serverA to serverB and serverB to serverA! Also take a look at the (new) iax.conf setting "autokill=" to prevent a long hang when the remote server is down or disconnected. Example 4 In extensions.conf: (on master) [outbound] switch => IAX2/ In iax.conf (on master): [slave] type=user auth=plaintext context=outbound context=outbound2 ; (can have multiple if you want) secret=secret host=dynamic callerid="slave" trunk=yes notransfer=yes [slave] type=peer auth=plaintext context=outbound-nuphone secret=secret host=dynamic trunk=yes notransfer=yes In extensions.conf (slave): [assigned-dids] ; uncomment a dial mechanism, first one goes to specific extension ; other one goes to dial parameter s. ;exten => 7046446999,1,Dial,IAX2/master@slave/${EXTEN} ;exten => 7046446999,1,Dial,IAX2/master@slave In iax.conf (slave): register =>
  11. 11. [master] type=peer secret=secret context=outbound trunk=yes canreinvite=no [master] type=user secret=secret context=acontext trunk=yes canreinvite=no The register command When the ip of the peer is unknown, a user has no way to place a call (e.g. when an office/user calls a teleworker/peer at home, where the teleworker has only a dynamic ip or is behind NAT.) To compensate for this, the teleworker/peer actively registers with the office/user by providing its identity and ip location. On the peer, in the [general] section of iax.conf, add a registration entry: register => user:password@hostname.domain.ext The continually updates the user so it will always know how to reach the peer even if the peer's ip changes. The "register" statement only works if you want to hook up a server with a dynamic IP to a server with a static (public) IP, i.e. on the user you must add "host=dynamic" in the iax.conf for that peer. If both servers are at known, static IPs then there is no need for a register statement as you'd use host=hostname on both ends. Summery The configurations between two Asterisk servers were discussed in here. It’s a easy and scalable way to communicate over IP. The upcoming VoIP requirements for Call Center and other VoIP based solutions can be easily implemented through the process.
  12. 12. Reference: 1) 2) Asterisk PBX Configuration Guide - Flavio E. Gonçalves 2) 3) 4) 5) 6) 7)