DEV Community

Ekim
Ekim

Posted on • Edited on

Asterisk basic set up

Weekly sharing

Hi everyone, I am Ekim, a fresh Bootcamp graduate and an IT helper (I don't dare to call myself a programmer yet). Every Friday, I will share some of the work that I've done over the last week in a bid to get feedbacks from you guys and record my journey to become a programmer.

Introduction

Over the last week, I've been familiarizing myself with Asterisk, the open-source communications toolkit, which powers IP PBX systems, VoIP gateways, and conference servers. It is such a bitter start for a coding newbie like me, in which I struggled a lot in the installation process and making a simple phone call under the same network. This article aims at sharing a laconic work flow of the asterisk set-up and how a video call is made.

Before getting started ...

I'm using WSL Ubuntu to do the Asterisk set-up.

And before getting straight into the code, I would like to share several links that helped me a lot when I started from zero.

Get started!

To start with, as always,


 bash
sudo su     # enter the superuser mode 
apt update
apt upgrade
apt autoclean


Enter fullscreen mode Exit fullscreen mode

How to install Asterisk ?

Installing Asterisk 18



cd /var/local/  # Go to /var/local as the download location
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz    # Download Asterisk 18
tar zxf asterisk-18-current.tar.gz      # Unzip it
apt install flex bison subversion       # Install flex, bison, and subversion
contrib/scripts/get_mp3_source.sh       # Download the mp3 decoder save it in ./asterisk 18.xxx/contrib/scripts
contrib/scripts/install_prereq install  # Ensure all dependencies are set up
./configure     # Set up the asterisk based on the above
make menuconfig # Choose the modules you need
make -j 3       # Allocate cpu cores to run the installation
install     # Install all the things we've just set up


Enter fullscreen mode Exit fullscreen mode

Softphone recommendation

I use MicroSIP and Linphone to make calls on Windows.

Connecting softphone to WSL Ubuntu

Asterisk Firewall Rules


  # SIP on UDP port 5060. Other SIP servers may need TCP port 5060 as well
  iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT

   # IAX2- the IAX protocol
  iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT

   # IAX - most have switched to IAX v2, or ought to
  iptables -A INPUT -p udp -m udp --dport 5036 -j ACCEPT

   # RTP - the media stream
   # (related to the port range in /etc/asterisk/rtp.conf) 
  iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT


   # MGCP - if you use media gateway control protocol in your configuration
  iptables -A INPUT -p udp -m udp --dport 2727 -j ACCEPT


Enter fullscreen mode Exit fullscreen mode

Basic calling set-up

  • Going to set our configs.

 bash
  cd /etc/asterisk
  nano pjsip.conf


Enter fullscreen mode Exit fullscreen mode
  • The below is the pjsip.conf for basic calling (Account creation).

 conf
  ;================================ TRANSPORTS ==
  ; Our primary transport definition for UDP communication behind NAT.
  [transport-udp-nat]
  type = transport
  protocol = udp
  bind = 0.0.0.0
  ;================================ CONFIG FOR SIP ITSP ==

  [calling](!)                    ; template
  type=endpoint                   ; specify the below are the configurations related to an endpoint (a device)
  context=interaction             ; *** it refers to the context set in the dialplan (extensions.conf) ***
  allow = !all, ulaw, alaw  ; do not allow all codecs and only allow audio codecs - ulaw and alaw
  direct_media=no                   ; do not allow two devices directly talking to each other
  trust_id_outbound=yes
  rtp_symmetric=yes
  force_rport=yes
  rewrite_contact=yes
  device_state_busy_at=1
  dtmf_mode=rfc4733

  [auth-userpass](!)            ; template 
  type = auth                       ; specify the below are the configurations related to authentication
  auth_type = userpass      ; specify the type of the authentication is based on username and password

  [aor-single-reg](!)           ; template
  type = aor
  max_contacts = 1            ; specify the maximum sip addresses allocated. Here, that means each sip address could only connect to one device.

  [7000](calling)                 ; endpoint 7000 inherits the settings in calling template
  auth=7000                       ; authentication = 7000
  aors=7000                       ; address of record = 7000
  callerid = 7000 <7000>      ; caller's id = 7000

  [7000](auth-userpass)     ; account creation for endpoint 7000
  password = 7000
  username = 7000

  [7000](aor-single-reg)

  [7100](calling)
  auth=7100
  aors=7100
  callerid = 7100 <7100>

  [7100](auth-userpass)
  password = 7100
  username = 7100

  [7100](aor-single-reg)


Enter fullscreen mode Exit fullscreen mode
  • The below are the configurations of the extensions.conf (Dialplan)


  [globals]
  INTERNAL_DIAL_OPT=,30

  [interaction]                       ; refers to the `context=interaction` in calling template in pjsip.conf
  exten = 7000,1,Answer()               ; the first argument 7000 refers to the number you dial on your softphone. 
  same = n,Dial(PJSIP/7000,60)      ; PJSIP/7000 refers to the endpoint 7000 , 60 means waiting for 60 seconds
  same = n,Playback(vm-nobodyavail)
  same = n,Voicemail(7000@main)
  same = n,Hangup()

  exten = 7100,1,Answer()
  same = n,Dial(PJSIP/7100,60)
  same = n,Playback(vm-nobodyavail)
  same = n,Voicemail(7000@main)
  same = n,Hangup()

  ; same means following the same extension
  ; n means the next action. 


Enter fullscreen mode Exit fullscreen mode
  • After setting the pjsip.conf and extensions.conf, you need to reload the pjsip and dialplan.


  asterisk -r   # go to the CLI of Asterisk (command line interface)


Enter fullscreen mode Exit fullscreen mode


  core reload       # reload pjsip and modules

  dialplan reload       # reload dialplan

  pjsip show endpoints # showing the endpoints you have


Enter fullscreen mode Exit fullscreen mode
  • The below is how you set up on the MicroSIP softphone

microsip-set-up

  • Do the same on another softphone for the 7100 endpoint.

  • Then call 7100 on 7000 endpoint / 7000 on 7100 endpoint to each other.

    • Why I can call certain numbers on my device and can ring another device ?
  • https://wiki.asterisk.org/wiki/display/AST/Creating+Dialplan+Extensions

  • This is because we've done the set-up in the extensions.conf, in which we've set a number, for example, 6001, in the illustration below, for the dial action.



                  [from-internal]
                  exten=>6001,1,Dial(SIP/demo-alice,20)
                  exten=>6002,1,Dial(SIP/demo-bob,20)


Enter fullscreen mode Exit fullscreen mode

Video calling

  • To achieve video calling, you only need to add the video codec in the pjsip.conf to make it work. And there's no other differences from the basic calling settings.

 conf
  [calling](!)
              type=endpoint
              context=interaction
              allow = !all, ulaw, alaw, vp8, h263, h263p        ; video codec vp8, h263 and h263p are added 
              direct_media=no
              trust_id_outbound=yes
              rtp_symmetric=yes
              force_rport=yes
              rewrite_contact=yes
              device_state_busy_at=1
              dtmf_mode=rfc4733


Enter fullscreen mode Exit fullscreen mode
  • After changing the pjsip.conf, remember to reload the pjsip like the above again.

Conclusion

  • By now, I hope you could achieve video calling in your own network. In the meantime, stay healthy and stay tuned for more content !!!

Top comments (0)