Is there any "POP redundancy" available for my SIP trunk?

Hello !

I have a trunk which is associated to the Montreal1 POP, but I would like to know if its possible to have multiple trunks connected to different POP in case a failover is required. For example this morning, my PBX lost connectivity with Montreal1 at least 3 times for many minutes between 10AM and 11AM Eastern time, so I lost multiple calls during these connectivity loss.

I would love it if I could have a backup trunk in Toronto for example. My PBX could automatically failover to the 2nd trunk if the main one is down.

Do you guys know if this is an option with VoIP.ms?

Oh … it seems that there is a POP restriction section that I didn’t see before. Enabling both of my wanted POP did the trick and allowed the 2nd one to register. Seems like I have my solution :wink:

1 Like

Can you explain about this POP restriction you fund and how you were able to set a backup POP server.

There are 2 sections about the POP

#1 : DID / Manage DID (you will see the “main” POP for each DID there)
#2 : Main Menu / Account Settings / Security / POP Restriction / Select Allowed POP Servers

The one in #1 is the main one and seems like it always works, but if you try to register your account to another POP simultaneously it will fail

If you go to #2 and select multiple POP, as soon as you save this section the 2nd registration will succeed. If you go back to Home you will see your 2 registrations for the same account on both POP.

I followed your steps and see how I can restrict which POPs I use, but I do not see where I specify which is primary and which is secondary.

Primary POP seems to be the one assigned to the DID in Manage DIDs. At least in my case, the INVITE comes in from that IP when both are registered. If the main POP is disconnected, the INVITE comes in from the 2nd POP

Hi,
In their native form, SIP trunks from VoIP.ms do not have any redundancy. The trunk getting the incoming calls can only be associated with a single POP Server.
I still managed to increase the availability on my SIP phone service. Here is what I did…

For this example, let’s assume that my DID POP Server is Montreal8 (just change it to whatever yours is).

Step 1: In the VoIP.ms portal, I created 3 subaccounts for my PBX (each of them ends up being a different SIP trunk, more on that later). Let’s call them pbx1, pbx2 and pbx3 for this example.

Step 2: In the VoIP.ms portal, in my DID configuration, I set the Main routing to SIP/IAX subaccount pbx1. I also set the “If Unreachable” routing from the Failover section to SIP/IAX subaccount pbx2.

Step 3: SIP trunk configuration on my PBX:
a. I configured Trunk1 to montreal6.voip.ms (the POP matching my DID) port 5060 using subaccount pbx1
b. I configured Trunk2 to montreal6.voip.ms (again, the POP matching my DID) port 5080 (this is the alternative SIP port for VoIP.ms) using subaccount pbx2.
c. I configured Trunk3 to toronto2.voip.ms (I chose any other POP server from any other VoIP.ms location, other than Montreal) using subaccount pbx3

Step 4: In the Inbound call routing rules on my PBX, I included Trunk1, Trunk2 and Trunk3 (in this order) in all rules for external calls.

Step 5: In the Outbound call routing rules on my PBX, I included Trunk1, Trunk2 and Trunk3 (in this order) in all rules for external calls.

Step 6 (bonus): If you have a secondary internet connection (dual WAN), create a policy-based routing rule in your router/firewall that always steers all traffic going to montreal6.voip.ms on port 5080 to the secondary WAN. This will make Trunk2 always go through your secondary internet connection even if the main one is up. (This does not apply to me, I only have a single internet connection)

Here are a few incident scenarios and how this setup should react:

Scenario 1: POP Montreal6 or the entire Montreal VoIP.ms site goes completely down. Trunk1 and Trunk2 will be down. Trunk3 will remain up and will handle all outbound calls, including emergency calls (911). Inbound calls will not go through however. This usually only last a few minutes, probably when VoIP.ms is performing maintenance on their server.
This scenario happens to me a few times per month, both of my SIP trunks to my main POP server go down for about 3 to 7 minutes each time. When Trunk1 and Trunk2 are disconnected, my outbound calls are getting routed completely transparently to Trunk3 to Toronto. For me, getting no inbound calls for a few minutes is not a big deal. Having 21 minutes of down time on incoming calls during a month is still a 99.95% availability rate :slight_smile:.
Fortunately, VoIP.ms never performs maintenance simultaneously at Montreal and Toronto so I get close to 100% availability rate on outbound calls. At this point, both my single internet connection and single PBX system become my availability bottleneck, it is not VoIP.ms anymore.

Scenario 2: In case there really is a disaster in Montreal and the VoIP.ms site goes down for a while, a few manual steps are required to restore the Inbound calls (outbound calls are still functional at this point because they are already routed to Toronto on Trunk3). I need to log into my VoIP.ms portal and change:

  • My DID POP server to Toronto2
  • The Main routing on my DID to SIP/IAX subaccount pbx3.
    No settings on my PBX need to be changed, all inbound calls will now be coming on Trunk3. Outbound calls were already being routed on Trunk3 as soon as Trunk1 and Trunk2 went down.
    (Since nothing need to be changed on the PBX, this change can easily be done remotely and recovery is faster).
    At this point, the phone service should be fully restored for the users, so the pressure goes off. However, the PBX does not have any SIP redundancy anymore. At this point, I can take my time to change the redundancy configuration using two other VoIP.ms sites, like connecting Trunk1 and Trunk2 to Toronto2 instead of Montreal6 and connecting Trunk3 to Chicago3 instead of Toronto2. After doing that, I have to change the Main call routing of my DID back to subaccount pbx1.

Scenario 3: My firewall messes up the state table of my SIP trunk connection to montreal6.voip.ms on port 5060 and stop passing the traffic. After a few seconds, the pbx1 subaccount will appear unresponsive to VoIP.ms and the Failover rule on the DID will redirect the inbound calls to pbx2 subaccount (Trunk2 on the PBX). Around the same time, the PBX should also realize that Trunk1 is down and start routing outbound calls to Trunk2.

Scenario 4: Toronto site or Toronto2 server goes down. If Montreal6 is still up, nothing will happen to the phone service because, in a normal situation, all inbound and outbound calls are going through Trunk1 connected to Montreal6.

Scenario 5: My main internet connection goes down and let’s say that I have a secondary one (dual WAN). After a few seconds, Trunk1 will appear unresponsive from both my PBX and VoIP.ms. My PBX should start using Trunk2 for outbound calls and VoIP.ms should redirect inbound calls to pbx2 subaccount (Failover on DID). Since Trunk2 is already routed to my secondary internet connection by the policy-based routing, the WAN Failover delay from my internet router/firewall should be partially avoided and the phone service should be restored before the entire Internet connectivity does. Once the internet Failover is done to WAN2, Trunk1 should reconnect over the secondary internet connection.

Like I said, this is not a perfect VoIP “high availability” solution for both incoming and outgoing calls like a large corporate SIP provider would offer, but it covers the most likely scenarios that can disrupt the phone service. Moreover, this configuration does not add any recurring costs from VoIP.ms, it only cost the time of the IT staff to design and implement it.

After setting up a high availability solution like this one, I always advise to run disaster recovery tests by simulating the different scenarios to confirm that the system really behaves as expected.

Hope this will be helpful to you. :wink:

Salut Jocelyn,

In fact, the way I am setup right now works for both inbound and outbound calls without any other change. So I feel that it is much easier to work with rather than creating multiple sub accounts.

I don’t see how connecting a single account or subaccount to multiple servers would give a better availability for incoming calls. If the POP server specified in the DID configuration is down, VoIP.ms will not redirect the inbound calls to another POP server even if the account defined in the Main routing for the DID is also connected elsewhere. Unless something changed in VoIP.ms way to handle inbound calls, this configuration has no failover for inbound calls. I have never seen an incoming call coming from a POP server different from the one configured in the DID. I tried before connecting my SIP account to a POP server different from the one configured in the DID, the incoming calls never reached my PBX.
However, I agree that, with your configuration, outbound calls would failover to another server thus creating a higher availability for that.
If your intent was to increase availability on outbound calls, then your goal is met with the simple configuration you described.
My recipe is indeed significantly more complex, but it covers a range of different scenarios including a problem with the local firewall or internet connection. It also aims at speeding up my recovery time if VoIP.ms would loose an entire site.
I wish that VoIP.ms would offer an option to redirect inbound calls to a backup POP when the primary is down, it would make thing so mush easier to get a higher availability: one account + 2 SIP trunks, that’s it!