The very first step in retrofitting a snowy cabin as a DIY smart home was to install internet and create a home network connection. This presented a whole new set of challenges, unlike my San Francisco apartment or our vanlife mobile-workstation network.
I’ve moved a lot over the past 10+ years, which has meant re-building my home network setup in each new location. I re-implemented the same work so many times that I ended up building some tools (and writing this post) to help.
This post will start with the goals and basics, before moving on to the more advanced features in subsequent posts (like PiHole, Docker, Home-Assistant, Kubernetes, DIY IOT devices, and more).
Network Connection Goals
- Fast internet for everyone in the house.
- Maximize privacy: block advertisements and keep all data in-house.
- Run a home server, to do things like:
- home-assistant (IOT automation)
- movies/music (download streamed TV shows and watch them offline)
- … perform other expensive jobs (see below).
- Have a public DNS address (URL) to access the server outside the house.
- Do it all for free.
That bit about privacy is easy to overlook. As IOT applications gain even more ground, most customers are happy to fork over money to Google/Nest, Apple, Ring, or one of the other home automation providers. Recently, there have been a series of damming articles showing how these companies
Building a DIY home server setup can end up saving a lot of money. It solves the same problems as these third parties, but without the privacy concerns of sending them data. Plus, the best way to keep a network private (i.e., closed) also means that the network is faster. On top of all that, I use my home server(s) for other cost-saving reasons. For example, I run a Build Kite Agent to compile the video games I build with Unity. It would normally cost a large subscription fee to have the Unity Cloud Build system do this work for me.
Building a Home Network
We don’t call it the “snowy cabin” for nothing.
In the foothills surrounding Denver, Colorado… there’s not much in the way of internet. Our best option was CenturyLink DSL. They advertise 30 Mbps (down) using two bonded phone lines.
That seemed good enough.
But the problems began soon after installation.
The first obvious sign was that the internet would drop out intermittently… sometimes for a few seconds, sometimes a few minutes. There were also problems with port-forwarding, which led me to dig into CenturyLink’s documentation for their provided modem.
I soon became convinced (by way of reading a few rants on Reddit) that the modem was at-fault. I ended up configuring the modem in “transparent bridging” mode, basically turning the modem into a dumb pass-through. This allowed me to connect it directly to my home mesh network (see below), configured in PPPoE mode. Not all WiFi routers support this feature, but mine allowed me to enter my CenturyLink credentials in the router settings directly. This means that the internal network itself negotiates the connection to the internet.
Immediately, the internet cut-outs stopped. Bypassing the antiquated modem (which probably won’t ever receive patches to fix these problems, based upon the Reddit rants) seems to have established a more stable connection with the ISP.
Plus, now port-forwarding works.
Wireless & LAN
“Cloud computing” is often spoken of quite positively. What’s not to love? It allows us to offload computation and storage to… some server in the sky somewhere. Well, please allow me a brief story.
Back when I was a teenager, I had the… dubious honor of hosting LAN parties.
For the uninitiated, a “LAN party” was a way to play multiplayer games back when internet connections were terribly slow.
We’d all get together in person, at my house, and plug our computers together so that we could play a game together at fast speeds.
Before long, we had a media server at home. This made a lot of sense back then: watching a movie already downloaded to a server in the house was the only way to “stream” the movie. This is called the “closed-network” solution, because the TV or laptop only ever connects to the local server (and not to the cloud).
Even with a fast internet connection, there are many devices in the house competing for that bandwidth. Keeping everything as closed-network as possible (especially IOT) means that the data stays in-house, which is good for both speed and privacy.
My home network(s) never need to talk to Google (or any other service). The internet can go completely offline and everything will continue working — from the thermostat to the TV. Increasingly, we expect everything to be online all the time. But with important things like the safety of a home, it’s imperative to remember that power/internet outages do happen.
LAN Network Diagram
Before we can even talk about how fast the internet connection is, we need to first consider the speed of the network in the house — commonly referred to as a Local Area Network, or LAN. If my computer cannot talk to the one next to it quickly, then it doesn’t matter how fast the internet is.
Many uninitiated folks confuse WiFi connection quality for internet speed.
WiFi generally refers to the wireless network in your house. When your phone shows a full WiFi signal, it’s indicating it can communicate well with the internal LAN. This does not mean that the connection from the LAN to the internet is fast.
There’s also the problem of WiFi pollution. The more devices communicating wirelessly, the more the interference. Urban centers are especially bad. In San Francisco, I invested in the high end Netgear Orbi routers:
Of course, it’s faster to use an actual cable to connect the computers in your house instead of WiFi whenever possible. I use this cheap Gigabit switch to connect all the computers and devices I can.
Even Faster Internet
It’s possible to make any slow internet connection even faster.
When speeds still won’t stay great, I’ve fallen back on the same strategy we used when trying to get internet on the road (vanlife). Connection bonding, as it’s called, is actually what CenturyLink is doing already with the two DSL lines. But it’s possible to bond other connections, as well.
A cell repeater (to boost LTE signal) plus a tethered phone can provide a bonded internet connection. As described in this post about creating a mobile hotspot out of multiple bonded internet connections, you can set data-caps and priorities such that your tethered phone is only used sparingly to speed up the home network when absolutely needed.
Next Up: DIY IOT, Media, DNS, and Build Server(s)
This post has focused on setting up the physical network. In the next post, I’ll take a look at creating a server with its own custom domain name and Kubernetes cluster…