If you don’t want to read my long-winded backstory, jump down to the section about OpenMPTCPRouter
According to my friends and colleges, I live in the middle of nowhere. Surrounded by farms, cattle, cornfields, and able to see the stars at night… maybe i do? I maintain that being 45 minutes from inner harbor Baltimore, 50 minutes from Harrisburg, and only 20 minutes from downtown York shouldn’t count! Yet here I am, with absolutely zero reasonable options for internet access.
According to the FCC Broadband Map, I have broadband access, by using ViaSat or Hugesnet. ,According to that map, my neighbors 200ft away have access to: Cable internet, three different fixed wireless providers, ADSL, and able (Spoiler: They don’t). The map is just plain wrong, and is constantly used by providers to justify not expanding their services into areas like mine.
When I moved into my current location, that map showed that I was able to get cable internet. I called the cable provider and asked. I even had them send someone out to double check, and they said: “Yep! We can hook you up, no problem!”. We moved in, and a month later got a nice little notice saying that they could indeed hook us up, for $30k. Thus started the last 10 years of trying to get my family connected to the internet!
I initially was able to get ADSL service from Verizon, which got me online with 1-3mbit down, 0.25-0.5mbit up. This was enough to start, as our (at the time) only child was 3, and both my wife and I worked out of the house most of the time. We got a small, low resolution TV, hooked up youtube at low quality, and lived the country life.
Over time the ADSL got worse and worse, until the point that Verizon came out and canceled the service, deciding to no longer provide it in our area. At that time, I had zero options, and was completely cut off from the internet. Cell phones barely worked, and only outside the house. So! We decided to give a hotspot a try, and stick it in a window.
This worked for a few years, but then AT&T started throttling our connection. We would have good service for the first 7-8 days of the month, at which point we would hit 22GB and it would drop to completely unusable speeds (how is 128kbit considered usable, when no webserver is willing to wait that long to send you data before timing out?)
And so begins my jaunt into the wonderful world of connection bonding! As my AT&T plan was slowing down I had the idea to purchase a second plan on another provider to supplement my connection. There are some options for failover/fallback/balancing that allow you to use two connections, but none of them allowed for seamless failover, or proper bandwidth aggregation. OpenMPTCPRouter provides exactly this.
OpenMPTCPRouter is an open source solution to aggregating multiple lower-speed and varying latency connections into a single logical internet connection. It does this by running on a router connected to multiple internet connections and tunneling your packets through each connection, reassembling things in a VPS up in the cloud.
Ignore the Starlink in the image above…. we’ll get to that hot mess another time.
OpenMPTCPRouter works on various devices, and they include images for all sorts of routers, VMs, as well as a Raspberry PI. You can utilize this the primary router for a house-hold, as it is OpenWRT based and has all the normal OpenWRT features built in.It also has the capability to link to multiple internet gateways, and bond them together into one larger pipe for the systems on your local network.
Say I have an AT&T plan that gives me 10mbit down, and a Visible plan that gives me 5mbit down. I would be able to download files at around 12-14mbit! It seamlessly handles the bonding of the connections, and managing each of them to ensure you have consistent uptime.
This whole magic is handled by a combination of technologies that OMR bundles together into an easy-to-consume packaging. The underlying connection technology is Multi-Path TCP which has recently been included in the mainline Linux kernel, and as such is a widely available technology. This allows a single TCP stream to go over multiple connections, and get re-assembled on the other side by the VPS, at the kernel level.
The next cool tech on top of the TCP stack is a proxy called Shadowsocks. This proxy has been widely used to bypass censorship, however it has the benefit of bundling all network traffic into a single stream, which makes it perfect for pushing through a MPTCP connection. This works fantastic for TCP, however that leaves things like UDP/ICMP connections.
Things like video streaming and online multiplayer games often use UDP for low latency lossy connectivity. To handle this, OMR allows you to choose a VPN tunnel like Glorytun which handles bundling those connections over its own implementation of multipath over UDP.
These three technologies together allow me to actually have usable internet in the middle of nowhere, by combining several semi-reliable connections into one much faster, much more reliable pipe! And OpenMPTCPRouter provides a super nice web interface to tie it all together, allowing for configuration, monitoring, and diagnostics whenever things go wrong.
I’ll detail out my current setup in another post, as I am actually running OpenMPTCPRouter on an ESXi box, in front of OPNSense on my network, and tied to two Atomic PI SBCs, each running Ubuntu with their own 4GLTE cell modem and a Starlink Dishy to top it all off. It still sucks, but at least it sucks a bit less and allows me to work from home most of the time.
If you have a need for reliable connections that will handle bandwidth aggregation and failover without interruption of streaming services or voice communications, i highly recommend you check this stuff out. Comment below if you’ve had successes (or failures) getting reliable connections in rural areas, and how you managed it!