Friday, June 12, 2015

Raspberry PI turns EE Osprey Mifi into automatic back up connection for Home or Office Broadband

I have a 39Mbps Down 10Mbps up FTTC broadband connection. These days that is nothing to shout about unless it stops working.  If your business has experienced a prolonged outage you have probably muddled through with 3G dongles/phone tethering/home or cafe working. If you are a big enough organisation to have an IT person or tills that only work if the internet does then you have a redundant backup link and a plan.  Surely you do don't you ?


I aspired to do better and have a seamless fail-over solution at home. Spouses and children show far less restraint and far more anger when asking is it fixed yet every two  minutes than the usual client.

This is how I achieved it for zero increase in my monthly cost:-
EE provides my FTTC broadband
The broadband package comes with a free 10 Gig per month upgrade to my 4g pay monthly phone plan.
EE allows me to share the 4G data allowance with all devices on my plan.
EE gave my a MIFI unit last week for free so no ongoing monthly charge as it shares my data plan.

Upstairs in back bedroom the Mifi unit gets a fairly reliable 12Mbps down 5Mbps up over  4G

If only it had an ethernet port it would be perfect as a backup route for my home network.  The challenge was to use a Rasperry pi to bridge the USB interface to its Ethernet port and use a Homeplug to get it to accept packets from the downstairs FTTC router when phone line was unplugged.

I now have this working:-  The necessary networking ingredients incantations and magic are as follows:-


my lan network is 192.168.9.0/24
my FTTC router is 192.168.9.1/24 an Ubiquiti Edge Router POE but other makes are available. (cough cisco).

EE Osprey Mifi 

configured to No DHCP and 192.168.9.2/24 via its web gui

Edgerouter additional commands

set firewall receive-redirects disable

*because otherwise router will send an ICMP redirect if it routes a packet out of the same interface and attached PC will then use backup link even if main link comes back up.

set interfaces ethernet eth0 pppoe 0 default-route force

*because I found in testing that the default route wouldn't always come back into the kernel routing table when the FTTC link re-established

set protocols static interface-route 0.0.0.0/0 next-hop-interface pppoe0 distance 10
set protocols static route 0.0.0.0/0 next-hop 192.168.9.2 distance 20

* the magic routing. The osprey will NAT anyway so no point having a dedicated WAN port to talk to it. Your firewall requirement mileage may vary.
* the assumption here is the pppoe dies when fttc link goes down. I may experiment with ping based SLA route injection/retraction for faster fail-over but the 30 seconds this currently takes is an acceptable outage for a home network.


Raspberry PI

Hmm this was a lot trickier than I thought. You will need:-

a /etc/network/interfaces  file containing

auto lo
iface lo inet loopback

iface eth0 inet manual


auto br0
iface br0 inet static
        bridge_ports eth0
        address 192.168.9.3
        broadcast 192.168.9.255
        netmask 255.255.255.0
        gateway 192.168.9.1


allow-hotplug usb0
auto usb0
iface usb0 inet manual
      up ifconfig $IFACE 0.0.0.0 up
      up brctl addif br0 $IFACE
      down ifconfig $IFACE down
      post-down brctl delif br0 $IFACE


The bridge interface IP address 192.168.9.3 gives me a method to communicate with the PI for other projects but the IP address  isn't need to make the fail-over work.

The mifi when connected via usb to the PI isn't detected as a network interface but as a mass storage device and we need to fix that.  

sudo apt-get install ppp usb-modeswitch wvdial

and we need bridging to actually work so

 sudo apt-get install bridge-utils

now when you plug the mifi unit in (and switch it on) it will auto detect and become part of the network bridge.

And that's it...

pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0424:2517 Standard Microsystems Corp. Hub
Bus 001 Device 008: ID 1bbb:0195 T & A Mobile Phones 
Bus 001 Device 005: ID 22b8:0938 Motorola PCS 
Bus 001 Device 006: ID 22b8:093a Motorola PCS 

pi@raspberrypi ~ $ ping 192.168.9.2
PING 192.168.9.2 (192.168.9.2) 56(84) bytes of data.
64 bytes from 192.168.9.2: icmp_req=1 ttl=64 time=1.60 ms
64 bytes from 192.168.9.2: icmp_req=2 ttl=64 time=0.342 ms
--- 192.168.9.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.342/0.974/1.607/0.633 ms
pi@raspberrypi ~ $ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.46c46400d0da no eth0
usb0



This is a ping from the PI to outside world initially via FTTC then watch latency increase as I disable the FTTC link and it switches to the 4G

64 bytes from 8.8.8.8: icmp_req=120 ttl=52 time=13.5 ms

64 bytes from 8.8.8.8: icmp_req=121 ttl=52 time=14.9 ms
64 bytes from 8.8.8.8: icmp_req=122 ttl=52 time=13.2 ms
64 bytes from 8.8.8.8: icmp_req=123 ttl=52 time=13.8 ms
64 bytes from 8.8.8.8: icmp_req=124 ttl=52 time=13.2 ms
64 bytes from 8.8.8.8: icmp_req=125 ttl=52 time=183 ms
64 bytes from 8.8.8.8: icmp_req=126 ttl=52 time=62.4 ms
64 bytes from 8.8.8.8: icmp_req=127 ttl=52 time=103 ms
64 bytes from 8.8.8.8: icmp_req=128 ttl=52 time=94.0 ms
64 bytes from 8.8.8.8: icmp_req=129 ttl=52 time=93.8 ms
64 bytes from 8.8.8.8: icmp_req=130 ttl=52 time=92.7 ms
64 bytes from 8.8.8.8: icmp_req=131 ttl=52 time=72.8 ms





Thanks go to 
https://www.thefanclub.co.za/how-to/how-setup-usb-3g-modem-raspberry-pi-using-usbmodeswitch-and-wvdial

On Main FTTC link

My Broadband Speed Test

On Back up Link

My Broadband Speed Test

Bonus to this config is  you can make use of the wifi part of the Mifi to provide an extra wifi point for your home network. This is useful as it is on the other side of my house from my Ubiquiti access point but I did have to connect the two by 200mbps Homeplugs.

Ok the next challenge is to get the Mifi to send my mobile phone a text every time the system fail-over or recovery happens...how hard could that be?