I wanted to make a script to make my failover to a secondary ISP easy and fast if my dedicated WAN link for VoIP went down and I needed to route traffic through my data WAN link in a hurry.
Lets assume the following:
- You have a secondary IP connection that you use exclusively for voip traffic.
- You have a NAT Router/Firewall for each WAN link plugged into your main switch, and use one as a gateway for data and the other for VoIP but you have SIP and RTP forwarded to the Asterisk Server from both NAT/Firewalls.
- Your SIP Provider supports failover to a Secondary IP and you have configured the failover to your secondary data WAN
- Both WAN Connections have a static IP address
- You only have one asterisk server
I know this is super specific, but you may get some use out of this script in other similar scenarios. You need to do a bit of setup in order for this to work. The script will switch between configuration files and restart associated services. The files affected are:
/etc/asterisk/sip_nat.conf /etc/sysconfig/network /etc/resolv.conf
Assuming your system is currently set up for your VoIP ISP, lets assume its AT&T, and your data WAN is Time Warner Cable, you want to make a config file for each ISP as follows:
# cp /etc/asterisk/sip_nat.conf /etc/asterisk/sip_nat.att # cp /etc/asterisk/sip_nat.conf /etc/asterisk/sip_nat.twc # cp /etc/sysconfig/network /etc/sysconfig/network.att # cp /etc/sysconfig/network /etc/sysconfig/network.twc # cp /etc/resolv.conf /etc/resolv.att # cp /etc/resolv.conf /etc/resolv.twc
now edit all of the .twc files in your text editor of choice and change the settings needed.
in sip_nat you need to change the external ip to the static ip address for your data WAN, in network, you need to change the gateway to the local IP of the NAT router/firewall for the data WAN and in resolv.conf you need to change the DNS servers if you are using the router or your ISP’s DNS servers. If you are using a third party like google or openDNS you don’t need to change the values.
So now you have two alternative versions of the configuration files, one for ISP att and one for ISP twc.
now just make the shell script.
# nano /usr/local/bin ispswitch.sh
#/bin/bash #Change Gateway to config based on argument cp /etc/sysconfig/network.$1 /etc/sysconfig/network #Change DNS Server to Arg Config cp /etc/resolv.$1 /etc/resolv.conf #Restart Networking /sbin/service network restart #Change SIP-NAT to arg config cp /etc/asterisk/sip_nat.$1 /etc/asterisk/sip_nat.conf #Restart Asterisk asterisk -rx "restart now"
# sudo chmod +x ispswitch.sh
Now you have a shell script that will switch between the sets of config files when you feed it the three letter file extension as follows:
# ./usr/local/bin/ispswitch.sh att
Will switch to the ATT configuration files. If you feed the argument “twc” it will switch to those files.
Obviously this is not something you want to do or test while people are on the phone, but it will get the job done. The scenario would go that your VoIP data link goes down, your VoIP provider tries to route the calls to the backup IP address and it will start to ring through on the backup IP (but with one way audio due to the gateway and improper sip_nat.conf settings) you then quickly run this script and switch the settings while you fix the primary WAN connection.