Asterisk an open-source framework to build applications for communications. It runs on Linux, BSD, and OS X and helps you to create a PBX with enough know-how in Linux and telephony. Asterisk uses relatively inexpensive hardware to voice over IP in four protocols, and can interoperate with almost all standard-based telephony equipment.
Asterisk provides Directory, Call Conferencing, Interactive Voice Response, Call Queuing, Voicemail services. It has three-way calling support, caller ID services, ADSI, IAX, SIP, H.323 (as both client and gateway), MGCP (only call manager) and SCCP / Skinny. For a more complete list check the Features section.
Asterisk does not require any additional Voice-over – IP hardware, although it requires a non-standard driver to introduce dummy hardware as a non-portable timing mechanism (for certain applications such as conferencing). For outgoing and/or incoming calls a single (or multiple) VOIP provider(s) can be used (outgoing and incoming calls can be handled through completely different VOIP and/or telco providers)
Finally, standalone devices are available to perform a wide range of tasks including providing fxo and fxs ports that simply plug in the LAN and register as an available device to Asterisk. If you’re looking for a Windows or Linux solution that’s ready to go, 3CX offers a highly regarded product.