In April of 2022 my VOIP home phone stopped receiving incoming calls. I could still dial out, but nobody could call the house. I received warning emails from Skyetel every 3 hours that my SIP endpoint was unreachable by their servers.
Since nothing had changed on my end, I suspected that something changed with my provider: Comcast/xfinity. Similar to my experience with British Airways, I found that xfinity has now automated everything.
I understand that automation helps if someone just needs to reboot their router, or forgot their wifi password. But for those who need genuine help getting shit done, it presents a huge barrier. It took me 9 calls and 3 trips to the xfinity store to get this resolved…
I phoned tech support to explain that port 5060 (for SIP service) was being blocked on my connection.
The first guy I talked to said they won’t open up that port unless I subscribe to xfinity’s VOIP service. Honestly, I didn’t want to talk to this guy anymore. He was obviously from India. No offense, but he sounded more like a scammer than a helper. I wanted to talk to someone who actually works for xfinity in the US, that actually knows how their network is set up. Before I hung up I got the phone number for Advanced Technical Support. It’s 888-780-8571. You’re welcome.
I called that number and magically wound up speaking with an actual technical rep based in these United States. BTW, this won’t happen every time – I’ve yet to figure out what automation magic I did to skip past the overseas nonsense.
When I mentioned my issue he referenced this page https://www.xfinity.com/support/articles/list-of-blocked-ports which I had also been looking at, noting that port 5060 isn’t in the list. He said I might need to do some configuration in my modem’s settings to forward that port.
But the Netgear CM1000 isn’t a combo modem/router. It doesn’t have a firewall or port forwards or anything. It just passes all connections on to my OpenWRT router which has firewall/forwarding/wifi/etc.
So the tech guy suggested I try an xfinity-supplied cable modem (at a rental fee of $15/mo) to see if that solves the problem. I wasn’t thrilled with the extra cost, but he said it’s pro-rated and might be worth seeing if it fixes the problem.
Approach 2 (playing the game)
So I went into my nearest xfinity store, went home with a new cable modem, and set it up. Then, to my dismay, when I went into the port forwarding settings on the modem, I consistently got this error:
I called technical support back and they said:
You need to go back to the xfinity store and get a different modem that is supported by the xfinity app. I’ve made a note on your account so they’ll give you the correct one this time.
WTF. OK, so I went back and returned my modem for another one. The new one worked with the app. I did have to do some weird things like disable IPv6 on my router so that it would show up in the xfinity app as an available device and port-forward destination because xfinity only supports port forwards via IPv4.
What’s really going on?
After configuring the router and updating my IP at Skyetel, it seemed to work 💪 Our home phone now rings after dialing. I called xfinity tech support again to re-activate my Netgear CM1000 to see if it will continue to work. Hey – it worked… But why?
My hunch is that by selecting a port forward in the app, something else is getting configured in their network to allow incoming connections – something upstream from your rental router. We’ll see how long the setting lasts before I have to go (temporarily) rent one again 🤞 Also – I was able to reactivate IPv6 in my router without issue.
The next day, the phone rang and it was music to my ears! ☎️ It was my daughter’s friend and they made plans to get together. Then the day after that, I received my first spam call 😱
Configuring E911 support with Skyetel is simple on their side, as it should be. But because it’s an emergency service, I wanted to do a separate post to underscore the importance on making sure it works.
From your Incredible PBX Admin website control panel, navigate to Connectivity -> Outbound Routes.
Skyetel requires that your outbound caller ID is the 11-digit number of your phone. I updated my other Skyetel setup post to reflect this change – it was previously using a 10-digit number.
Edit your main Skyetel route and click Duplicate:
Then you’ll have a copy of your main route that you can edit:
Per the IncrediblePBX E911 Wiki page, set the name to E911 and set Override Extension to Yes. The other change I made was to mark it as an emergency route:
You can see by the help text that it forces the caller ID (CID) to be a specific number (if set). I don’t have any other numbers besides the one I ported from Google Voice, but you’ll be able to see later how it clearly indicates this extension is set up for emergency calling.
Then go to the Dial Patterns tab and remove all of the pre-existing dialplans by clicking the trashcan icons:
Click the Dial patterns wizards button to generate new dialing plans:
Unselect all options except “US Emergency” and then click Generate Routes. You’ll have all of the appropriate 911 and 933 (testing) dialplans added, plus some extras to make sure all bases are covered. There’s a sad story behind Kari’s Law and why these extra dialplans are ultimately unnecessary, but I’ll keep them just in case.
Once those are added click Submit at the bottom and you’ll be brought back to the Outbound Routes list where you can see the emergency icon lit up:
Move your E911 Route up to the top of the list by dragging it by the crosshair icon. Then click “Apply Config” to save all your changes and reload the dialplan.
Skyetel Settings
Over at the Skyetel dashboard, it’s as easy as following their support document. I’ve included screenshots here as additional examples. Head to Phone Numbers -> Local Numbers and click the gear icon on the number you want to edit.
Once editing your number, go to the E911 tab and set it to Enabled. Fill out your name and address so Skyetel can route you to the correct emergency service provider.
Once it’s enabled, the E911 indicator will be bright green:
Enabling E911 will add $1.50/mo to your bill. But for $2.50 per month ($1 for the local number, $1.50 for E911), it’s way cheaper than having a land line. I like that anyone in the house can dial 911, especially kids.
Testing
Testing 911 dialing seems like a nerve-wracking thing to do. Luckily Skyetel understands your anxiety and has set up a test number of 933 that you can dial to make sure everything is set up correctly.
When you dial 933, if everything is set up correctly an automated Skyetel message will tell you it’s working. It will also read back your configured caller ID and address to verify.
One minor hiccup I noticed is that my call didn’t go through until after a 15 second delay. If it were an actual emergency I would be panicking during this time.
The problem was at my RTP-300. You can dial a pound (#) to commit to the dialed number immediately – I like this for dialing my 702 extension. If I want to dial that extension, I dial 702# – because I might otherwise be trying to call a friend in the Las Vegas 702 area code.
I inspected the dialplan for the two lines of my RTP-300:
Most of the configuration follows this Nerdvittles Skyetel post, but I include some specifics and screenshots for my configuration using OpenWrt, IncrediblePBX on Raspberry Pi, and a Linksys RTP-300 analog telephone adapter.
On my OpenWrt router that acts as a gateway, I added a firewall port forward for UDP Port 5060 to my Asterisk server (Raspberry Pi).
I didn’t need to run any of the Skyetel add-ip customizations from the original article. On my Raspberry Pi those settings were already there. You can check to see if the firewall settings for the Skyetel IPs are already present by running:
If you see the ACCEPT all row, then you’re good to go. If you don’t get any output, you’ll need to run the commands from the Nerdvittles Skyetel post.
Trunk Setup
I also didn’t need to run any of the Skytel Trunk Setup scripts, as I already had the six Skyetel trunks configured and enabled.
I also didn’t need to change the context configuration from from-trunk to from-pstn-e164-us (for a normal 10-digit US phone setup). It was already there 💪 Also, nat=yes was already set, so no need to add that either.
For the DID and Description I added my full 11-digit number: 1 and the other 10-digits. I also set the destination to the “777 All-Five” ring group. It’s a default ring group setup to ring all extensions (701 to 705) all at once.
Once you click Submit there will be an “Apply Config” notification.
Click it to apply your new route and reload the dial plan.
Outbound Routes
The default Incredible PBX config already had default route. Click edit to view it:
As you can see it already has some Skyetel trunks pre-configured. Go ahead and click Duplicate to make a copy of this route we can change.
This will create a copy that we’ll edit.
Rename the route, add your 11-digit phone number, and add the additional Skyetel trunks, removing any extras.
After submitting the new route, use the crosshair icon to move the Skyetel route to the top, then click Apply Config.
I didn’t need to do any configuration of SIP Settings in Asterisk, my defaults all looked good.
Skyetel Configuration
Skyetel configuration is normally pretty simple, but for my configuration I want to combine my Dynamic DNS setup with the inbound SIP IP. But it turns out that Skyetel doesn’t work that way. Instead they support a script that will periodically call out from your asterisk server and update the endpoint IP at Skyetel if it’s changed https://bitbucket.org/skyetel/ip-endpoint-group-update/
In order to use the script, you must first create a set of API keys on the Skyetel dashboard by clicking the gear icon by your login name.
Go to the API keys tab and click Create. Save the keys somewhere safe, they won’t be displayed a second time.
Then head back to your Raspberry Pi to install the script. You’ll need git to install the script. Additionally, I also needed jq on my Raspberry Pi:
cd into the ip-endpoint-group-update directory, and then run the script. I used the defaults for port and transport by simply pressing <Enter>. Enter your API keys that you created on the Skyetel dashboard. I hadn’t yet set up an Endpoint Group in my Skyetel dash, so I entered “x” to do it from the script.
The script automatically installs itself into /usr/local/bin/ip-update-endpointgroup.sh and creates a cron to run it every twenty minutes at /etc/cron.d/ip-update-endpointgroup.cron
In the Skyetel dash I see there’s an endpoint group that was automatically created:
Click Save, then give it a few minutes and try calling your number from your cell phone – it should ring and connect. If audio is good, you’re good to go!
Once upon a time you could hook your Asterisk-based PBX to your Google Voice account to make and receive calls. How you hooked it up over the years changed (annoyingly). And at the end of 2018, support for accessing Google Voice via XMPP was dropped. Remember when we trusted Google to be the “for the better good” company? Oh, how times have changed.
I did it with the help of Nerdvittles and included several screenshots here for easy reference. I also used his advice when it came to picking a new VOIP provider. After looking at a few options, I’m going with Skyetel. Not because it’s the cheapest (it’s not), but because it has an important feature for our home phone: E911.
Pro-tip: don’t port your number over to Skyetel until you’ve made your first deposit into you Skyetel account. Once you make your first actual payment, they offer a 60-day free port-in service (normally $10).
Back when I had a land line from the local telephone company, it would cost at least $20/month. I expect the Skyetel monthly charges for a local number ($1) and E911 service ($1.50), plus call time, to be less than $5/mo. It’s worth it to me if I can reliably call the house and anyone can dial 911 in an emergency.
My initial deposit of $50, doubled to $100 should last me over 2 years.
It will cost $3 to unlock – worth it to me because it’s a cool number.
Once your purchase has been confirmed you’ll be emailed a receipt.
And now your number is unlocked!
Porting your number into Skyetel
From your Skyetel dash, go to Port Orders and click Submit New Order.
The process is fairly simple, but here are some key settings:
Port Type: Local
Assign to Endpoint Group: Out of Service Message – This is so we don’t need to do any SIP configuration up-front. I’m going to cover Skyetel setup in IncrediblePBX in a future post.
Current Provider: Google Voice
Account number with the losing provider: Your 10-digit Google Voice Number.
Port Out Pin: The PIN you use to access your Google Voice voicemail.
Phone Bill: I provided a screenshot of my Google Voice settings page.
Select the first available date for porting to happen, then submit. A support ticket will be automatically generated from your port-in request and you’ll get email updates during the process until it’s complete.
Stay tuned and we’ll go over tying all of the services and equipment together for a reliable VOIP-based home phone:
For phones I have a Linksys RTP300 analog telephone adapter (ATA) that I purchased at a local thrift store. It’s a discontinued product, but they’re easy to find for cheap on eBay.
Since I did this years ago, some of the instructions and firmware files are getting hard to find, but if you need instructions – let me know in the comments and I’ll try to help as best I can.
Getting into the RTP-300 admin panel
It had been at least a year since I’ve logged into the admin interface on my RTP-300. Luckily, there are some fun things you can do to help figure out how to get in. If you have a phone hooked up to it and it’s powered on, you can use the Interactive Voice Response (IVR) to get information. This article from Cisco (who purchased Linksys) has many of the available codes.
Pick up the phone and dial #### to get into the IVR menu. Then press 110# and the nice lady will read back to you the IP of your ATA.
Good info, but it wasn’t running the web interface on port 80, so I had to figure that out. The IVR option for port wasn’t working, so I did an nmap scan of all ports 1-65535 from the command line – you could use the raspberry pi or any other computer on the same network as your RTP-300:
$ nmap 172.16.0.11 -Pn Starting Nmap 7.60 ( https://nmap.org ) at 2020-04-04 18:02 CDT Nmap scan report for voip.lan (172.16.0.11) Host is up (0.0048s latency). Not shown: 999 filtered ports PORT STATE SERVICE 8080/tcp open http-proxy
There it is, port 8080. I made sure to add the address (with port) in my password manager. Then I had to use Firefox to finally connect to the ATA admin because Chrome wouldn’t complete the connection – likely because the RTP300 doesn’t have support for HTTPS. ¯_(ツ)_/¯
But we’re in! We’ll first do some configuration in Asterisk and then come back to the RTP300 configuration.
Once you’re logged in to the IncrediblePBX/Asterisk web admin, navigate to Extensions (under Applications).
There you can see there are a few extensions pre-configured for you, including 701 & 702, which will work great with the RTP-300.
Click the Edit button to the right (paper/pencil icon) to edit and view more information about that extension. You’ll need to do two things in here. First, copy the “Secret” key for each extension.
Second, for extension 702, also change the SIP port to 5061. There’s a note in there about how 5061 is sometimes used for “Line 2” on ATAs – and that’s exactly the case for the RTP-300.
RTP-300 Admin Navigation
The RTP-300 admin interface is little weird. Once you’re logged in you’ll want to navigate to the voice menu item on the far right.
Click the “Admin Login” link to switch from an informational view to one where we can actually make changes. Then click “switch to advanced view”.
Advanced view will show all of the extensions and settings.
RTP-300 Extension Configuration for IncrediblePBX
Configuring phone lines 1 & 2 is fairly simple despite the overwhelming number of settings fields on the admin. We just need to enter three values:
The IP address or domain name of our IncrediblePBX server as the SIP “Proxy” This is the SIP server the ATA is going to register this line with.
The Incredible PBX extension number as the “User ID”
The extension secret as the “Password”
Test!
Once you have these settings saved, the ATA should now register itself with Asterisk on your IncrediblePBX system. The best way to know if it worked is to pick up the receiver one of your lines – you should hear a dial tone 📞
If you’ve got a dial-tone and a phone on each port, you should be able to dial each extension with 701# or 702#. The # isn’t strictly necessary, it just instructs the ATA that you’re done dialing so it can stop waiting for further input. If you’re feeling fancy you could add a 70X entry to the dialplan on the line configuration of the ATA.
If that’s working, try one of the pre-configured Nerdvittles custom extensions. You can see them in the IncrediblePBX/Asterisk web admin by going to “Admin” and “Custom Extensions.”
Try 947# for weather by zip code ⛈️ or 951# for the latest news 📰