From 4ac1d6ab184495177d6306c954b1f305e88ad596 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Mon, 14 Feb 2022 14:04:36 -0500 Subject: [PATCH] stuff with trunks --- content/blog/2022-02-14-personal-pbx.md | 66 ++++++++++++++++++ .../images/posts/personal-pbx/my_trunks.dot | 18 +++++ .../images/posts/personal-pbx/my_trunks.png | Bin 0 -> 34043 bytes 3 files changed, 84 insertions(+) create mode 100644 static/images/posts/personal-pbx/my_trunks.dot create mode 100644 static/images/posts/personal-pbx/my_trunks.png diff --git a/content/blog/2022-02-14-personal-pbx.md b/content/blog/2022-02-14-personal-pbx.md index 7f46d4f..3c277fe 100644 --- a/content/blog/2022-02-14-personal-pbx.md +++ b/content/blog/2022-02-14-personal-pbx.md @@ -36,5 +36,71 @@ I have personally used Asterisk a fair bit due to its heavy use in the Amateur R ## The goals for this project +Going in to this project, I had a few seperate goals I decided to complete at the same time: + +- Build my own PBX without using someone else's base configs +- Play around with [Twilio](https://www.twilio.com/)'s services +- Spice up my existing [Hamshack Hotline](https://hamshackhotline.com/) connection + +And of course, like all my other projects, this one is running on a budget. Less than $10 per month for all required SAAS and IAAS subscriptions. + +## Acquiring a PSTN phone number + +The [Public Switched Telephone Network](https://en.wikipedia.org/wiki/Public_switched_telephone_network) (PSTN) is likely the only phone network you have interacted with knowingly. This is the network your cellphone number will be allocated under, and the network that routes your calls to your friends. + +Generally, if you wanted a PSTN number, you have to go to a phone carrier and get a landline or cellular subscription. Since I needed a number for a PBX, I took a slightly different approach. + +*Twilio* provides a programatically controllable PSTN service. Their services include: + +- SMS/MMS messaging APIs +- VOIP phone numbers +- Email APIs +- Elastic SIP trunking +- ..and much more + +I am personally interested in their [SIP Trunking](https://www.twilio.com/sip-trunking) service. When renting a number from Twilio (which costs just a dollar a month), you can create a SIP trunk from your PBX to theirs, and they will route all inbound calls back to you, plus allow you to place outbound calls to the PSTN through them. + +*Hey students, you practically do all of the Twillio stuff in this post for **free** through [GitHub Student Pack](https://education.github.com/pack/offers)* :wink: + +## Software PBXes and Trunking + +Before I get much further, I should explain the options for hosting a PBX, along with an explanation of trunking. + +Ignoring physical PBXes, there are a few options for self-hosting a phone network. + +- Using a commercial service like [3CX](https://www.3cx.com/) +- Using one of the many Asterisk-based sofware packages +- Using [SIPFoundry](https://www.sipfoundry.org/) + +As previously stated, I chose to go with an Asterisk-based system. Specifically, [FreePBX 15](https://www.freepbx.org/). There are other Asterisk-based systems available as well: + +- Simply running Asterisk on a server without any management software +- [VitalPBX](https://www.vitalpbx.com/) +- [PBXInAFlash](https://sourceforge.net/projects/pbxinaflash/) + +### Trunking + +Trunking in the telephony world, is essentially the same as VLANs in the computer networking world. A trunk is a seperate network that can be routed to and from based on your PBX routing rules. + +In my system, I have two trunks, one for Twilio (and by extension the whole PSTN), and one for Hamshack Hotline. + +![My trunking setup](/images/posts/personal-pbx/my_trunks.png) + +## Provisioning an IAX2 Trunk through Hamshack Hotline + +*Hamshack Hotline* is a service for Amateur Radio operators that allows us to connect physical VOIP phones to a private phone network for direct-calling other operators, clubs, and even [supported repeaters](https://apps.hamshackhotline.com:9091/links.php). All users must prove their licence status. + +Since this section does not apply to the majority of my audience, I will not go into the details of how to link up with Hamshack Hotline. Instead, I'll just link [their guide for doing this](https://wiki.hamshackhotline.com/doku.php?id=kb:iax:trunk.info). + +## Pulling everything together + +To get this whole system working, I spun up a droplet on [Digital Ocean](https://m.do.co/c/34e43c62fd02) and used their [FreePBX image](https://marketplace.digitalocean.com/apps/freepbx-1?refcode=34e43c62fd02&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge) to quickly get up and running. + +Then, I set up a number on Twilio and followed their [Elastic SIP Trunking guide](https://twilio-cms-prod.s3.amazonaws.com/documents/TwilioElasticSIPTrunking-FreePBX-Configuration-Guide-Version1-0-FINAL-06122018.pdf). As well as the Hamshack Hotline guide linked above. +## Conclusion + +In the end, with some additional tweaking to the [IVR](https://en.wikipedia.org/wiki/Interactive_voice_response) settings to allow external password access, I was able to get a working PBX up and running. + +I can now place a PSTN call from my cellphone to the PBX, enter a password, then dial a Hamshack Hotline RF-Link number to call up repeaters from my phone. \ No newline at end of file diff --git a/static/images/posts/personal-pbx/my_trunks.dot b/static/images/posts/personal-pbx/my_trunks.dot new file mode 100644 index 0000000..a0f3944 --- /dev/null +++ b/static/images/posts/personal-pbx/my_trunks.dot @@ -0,0 +1,18 @@ +graph G { + pstn -- twilio; + other_hams -- hh; + allstar -- hh; + twilio -- pbx; + hh -- pbx; + pbx -- phone, desktop, laptop; + + pstn[label="PSTN"]; + twilio[label="Twilio"]; + other_hams[label="Other Hams"]; + allstar[label="AllStarLink"]; + hh[label="Hamshack Hotline"]; + pbx[label="My PBX"]; + phone[label="My Phone"]; + desktop[label="My Desktop"]; + laptop[label="My Laptop"]; +} \ No newline at end of file diff --git a/static/images/posts/personal-pbx/my_trunks.png b/static/images/posts/personal-pbx/my_trunks.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a45f10bf8a845f7d654fd5414e5d806faaff20 GIT binary patch literal 34043 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%0DYl>$@I@l`KmgVvALXG6WTV zoMGr~Ihd$n_EHgAw-y&BK7XzsOL}z2)ZSd^#l=|i6+d~Di~G{c(7{JX?{yYu-s2ZM z68cOgg4A`Ao_QpXM^KpB^Y#1n!)x{W z{j9M5&ZBgmlm{t8Iv1T*?yAT+IC^hNV(*Pl&6amZn>E>%i8 zxbkUE+a6j8G8xn7>FtvZ>;0sgR~?eDsbDHB0*tM4aY{+3@PNaFJ#@%n19WS6BDpefGa~0bw9~Y!dLI>{LHQ>%g?f{<3ck-)W!p& zq=cEeg*G*MqZ)#GqzZfdJV#qt&EgbxnXJ}AW$jZ-)4eaooSTa{YO4g2=f?Lh4JfVN z!I|ioE`N%)w^@7FiJVic1#uA}xx7t!(ly5!XWvhKxAxpxWxvurUuuHm<5n0Z0gaTy zp3YA#U19VuM(4K6@4WVx8c0X|#ls>t2Yi9yo&c$I$~3TAFMAb_&d%BDwnP&ijDb9= zZ?eIm{p37LI#P1~$+Qye8(ktvwG!j6u#qM|RrmM5|F)BcKWSC*o2KOU`H|ETg@Onj za^Jx`L_-5oGbR&^>?dY?9v|x`NucUfyF(q4QApsxi9wj`v{?- z+S@&APXZ*NJlOyT!d!+aSra+XyGkw^j?ouE;s;-w^!qW>LSzzQ&D>_Ul^l3aF^Qs8 z;HsQLb}QeW4se;AU{l5Yq^hzL;LC7DWYkrp8u%IBaEsU}rA%YdnW3P-lNDtowO4<$ z-8IF0jC7ycdW;)=Hm-%`eg4X3W^A@RwNo zol?hveKXjUeCS;k`o34pFMPkFIvqHzWrfCu9Vql9A;q-lcIHU&`X^!|U`}6JrlVgo z`&C;wWuUkQ{=Tp<-hLotjfZyCB(8c(#$MOtnP`2i_vB3rUHe}T!`x`4@Lat{yAC>*6}whrs2(Em!Xo^X-!# zHSOpGR6V_y{zV1;O?LUDjV$FEKjO2s3tx${?Q3}sxxo1Wt3W316%?Y;P*uSuhQ0L_ z2`{7t;Soe28WeEl=(&{t)NLMHp8W4gRMnKpbwaJ5mdTNP#jsm3lz)%ROZc3fANXx>c3Os3+G|Yv)mdg?yvNxt zyp%P+ka1oy2A_N7@Hxs}7A>iz%o`ffLqUAXduA$yCGG12jHXmH(bkJ=nwD=Be(-to zlGi@``=jkWYY(q#coXG)gQocB&Uc$?N4!!3cH%lG=mpATU61p`6hcel%Juk;bY=FB zFGjI6SkrYC(Y?A#X(VW5#FF0fsu_Rkd2fAG6drNc%f-aCSzSM`L~l=j<5j!8x~+)0 z%F&{rsKrC15W9cdk&m1~)%A!;9)a}o?u=mGr!6ur^7c^4=PE^=JUXrD zYgu7a=cOoQH6n!t{1SmtSZaI6om%su`B+Q&#dT5)ki* zBiJ8FC;#;i9ei%jWE2~o*+d#oE5RJdL;v2>Q~N)Q=8ps& z-^Kg2HhQpGXw5u~YMs<2m=#5BWylO=LN&tq8f0YhGRvk56+pST@nhv_^Fx7 zSdDPE%jFj<*kLwRNq;A)%XYmM`tg|F*${S;+iRe1LcoNT3Ri;B2PJnAVG*HbBa4KJ z=`{ZDU$qnqFu#_Czo-2F|06R26O2z*$wNi4;Qu~al8gd7SuV>j{eM20+!YDG!O+r+ WPz_Mn!$txBDaxwJR7*Vz{{H~yG~7@C literal 0 HcmV?d00001