Asterisk is an open-source platform for building real-time communications applications. It is an extremely powerful tool. You can build a simple office network with a few phones, or you can create rich applications that perform external database lookups and make intelligent call routing decisions. Asterisk provides nearly limitless possibilities when it comes to building applications that use voice, video, and even SMS. Whether you want to build a simple phone system that allows internal users to place and receive calls, or you want to write a complex voice-driven application that integrates with your business, Asterisk has you covered.
Like any powerful tool, Asterisk has many moving pieces. In a previous article, you learned about Voice over IP, or VoIP. In this article, we will investigate these pieces to develop an understanding of how Asterisk works. Doing so will make it easy to install and configure an Asterisk-based phone system in future articles.
Asterisk’s architecture
One of the best parts about Asterisk is its extremely modular architecture. Not every VoIP system needs to leverage every feature that Asterisk can provide. The modular design of Asterisk allows you to only enable those modules that you need. It also means that you can independently configure and restart parts of your VoIP system without causing problems elsewhere.
I recommend that you read the official Asterisk architecture documentation before proceeding further. While I will touch on some of the high-level architectural components below, I recommend that you familiarize yourself by reviewing the official docs. It will only take a few minutes, and you’ll be better positioned to understand, install, and configure Asterisk.
The Asterisk core provides basic and essential functionality. It reads and parses configuration files, allows you to selectively load modules, and builds the dialplan, which you will learn about later.
Asterisk modules enable all other functionality in the system. Modules exist for many different functions, such as handling voicemail, connecting to external databases, and handling various media encoding types. We will mostly focus on the PJSIP Channel Driver module throughout this series of articles. A channel driver allows Asterisk to interact with external endpoints, such as the SIP (VoIP) phone that you will configure in future articles. Channels are powerful, and they can be bridged together to create voice applications. For example, Asterisk can bridge a SIP channel driver and a public switched telephone network (PSTN) channel driver to allow your VoIP phones to call traditional telephones.
The dialplan is the heart of an Asterisk system. It lets you tie everything else together: You can receive a call on a SIP channel module, connect it with an interactive voice response (IVR) application that you wrote, and potentially connect that back to a SIP channel module to route the call accordingly (e.g., to a human operator for further assistance). The dialplan is extremely powerful, and it effectively has its own programming language. The examples that you will see in this series should give you a small idea of what you can do with the dialplan, but I strongly recommend jumping into the official dialplan documentation if you want a more thorough idea of what you can do with your Asterisk system.
Important configuration files
Before you dive into configuring your new Asterisk system, you should be aware of a few important configuration files and directories. You will explore some of these further in future articles:
File | Description |
---|---|
/etc/asterisk |
This is the base directory that contains the other configuration files. If you run the make samples command during installation (I’ll cover installation in the next article), then this directory will be populated with sample configuration files for many components of Asterisk. |
/etc/asterisk/asterisk.conf |
This file contains the base Asterisk configuration. Notably, it contains the directories that Asterisk will use for certain functions, such as sounds and logs. |
/etc/asterisk/modules.conf |
This file tells Asterisk which modules to load. Remember that Asterisk is modular, and you can turn off modules that you aren’t using. By default, all modules in /usr/lib/asterisk/modules are loaded (via the autoload=yes directive). |
/etc/asterisk/pjsip.conf |
This file contains configuration for the PJSIP channel driver. You will configure phone endpoints in this file during future articles. |
/etc/asterisk/extensions.conf |
This file is the dialplan that you learned about earlier. Asterisk considers an "extension" to be a collection of dialplan instructions. Extensions aren’t tied to physical phones. They’re just a place in the dialplan that contains code that you want to execute. |
Wrapping up
This article built on your previous VoIP knowledge to introduce the basics of the Asterisk open source private branch exchange (PBX)—PBX is just a fancy way of describing a phone system. You learned about the general architecture of Asterisk and found helpful documentation resources to further explore. You also learned about the main configuration files that you will be using to build a basic VoIP system. The next article in this series will introduce you to building and installing Asterisk.
Want more on networking topics? Check out the Linux networking cheat sheet.
About the author
Anthony Critelli is a Linux systems engineer with interests in automation, containerization, tracing, and performance. He started his professional career as a network engineer and eventually made the switch to the Linux systems side of IT. He holds a B.S. and an M.S. from the Rochester Institute of Technology.
More like this
Browse by channel
Automation
The latest on IT automation for tech, teams, and environments
Artificial intelligence
Updates on the platforms that free customers to run AI workloads anywhere
Open hybrid cloud
Explore how we build a more flexible future with hybrid cloud
Security
The latest on how we reduce risks across environments and technologies
Edge computing
Updates on the platforms that simplify operations at the edge
Infrastructure
The latest on the world’s leading enterprise Linux platform
Applications
Inside our solutions to the toughest application challenges
Original shows
Entertaining stories from the makers and leaders in enterprise tech
Products
- Red Hat Enterprise Linux
- Red Hat OpenShift
- Red Hat Ansible Automation Platform
- Cloud services
- See all products
Tools
- Training and certification
- My account
- Customer support
- Developer resources
- Find a partner
- Red Hat Ecosystem Catalog
- Red Hat value calculator
- Documentation
Try, buy, & sell
Communicate
About Red Hat
We’re the world’s leading provider of enterprise open source solutions—including Linux, cloud, container, and Kubernetes. We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.
Select a language
Red Hat legal and privacy links
- About Red Hat
- Jobs
- Events
- Locations
- Contact Red Hat
- Red Hat Blog
- Diversity, equity, and inclusion
- Cool Stuff Store
- Red Hat Summit