farm_logs

How to Build Your Own ISP (in the United States)

1. Buy full duplex software-defined radio (SDR). Note that for 3G and beyond, you also need a USB hub due to the large current draw of the SDR. I went with the LimeSDR Mini, which is a great entry-level SDR. It supports frequencies from 10 MHz to 3.5 GHz, which covers all the major cellular bands. It also has a decent amount of bandwidth (up to 30.72 MHz) and is compatible with popular software like srsRAN and Open5GS. The full duplex capability allows it to transmit and receive simultaneously, which is essential for running your own ISP. 2. Get a license to use the spectrum from the FCC. This is very important to avoid hefty fines. 3. Buy a Peltier module and thermal tape to keep the SDR cool ($30 total on Amazon). You can even plug this into the USB hub and control it based on the workload of the SDR/VM using PID. 4. Migrate LXCs from one Proxmox server to another. I clustered the two servers and setup a one-time replication job to ensure data was copied accurately. I had to delete a few VMs and LXCs that were taking up too much space, but I was able to keep all the important ones. 5. Proxmox uses the Corosync Cluster Engine under the hood. I wanted to keep the two servers clustered given that one was running a ton of self-hosted apps and the other was effectively my backup ISP. This ensures that if I want to change one server, the other server (my ISP) can approve it. 6. Once the self-hosted apps are wiped from the first server, I created an Ubuntu 24.04 VM. Critically, networking software requires a full VM to have access to its own kernel. 7. Next, I installed an LXC to send torrents through. This separation ensures that the VM can focus on interacting with the public Internet. 8. Now my clustered Proxmox homelab is finally complete! I installed a number of packages and libraries on the VM, including Open5GS and srsRAN. Originally, I was going to use 1xBTS for 3G CDMA2000 communications. But as I thought about where I wanted to take this project, I realized that I wanted faster Internet. Refurbishing my old Palm Treo in 2026 seemed like kind of a pointless endeavor. Luckily srsRAN supports both 4G and 5G Internet, so I chose to go with 5G. A good Peltier module should ensure that the SDR doesn't overheat and crash. 9. Next, you have to enable USB passthrough for the devices in the hub. Ideally, this is done directly on the Proxmox host so you don't have to worry about each container individually. 9. I wanted to beef up security as my own ISP, and initially I was going to use Tailscale because it's the GOAT. However, I wanted more control so I setup a memory-purged WireGuard server for my torrent LXC (this is what no-log VPN companies do) and V2Ray for the VM. This was mostly just for fun to play around with V2Ray. Well, and a running joke in my homelab is that I should try to give porn to the Saudis. No, of course I'm not actually going to start WW3; that's the joke. 10. Next, we have to create a WireGuard kill switch in case of IP leakage. If WireGuard goes down, the VM will automatically drop all torrents. This is basically just ensures that my torrenting configuration follows the same practices that shoplifters do in retail stores. If the alarm goes off, then drop everything and run! This is also useful when accessing geoblocked content. For example, you don't want a foreign streaming service to see that you are in the US and block you from accessing content that you have already paid for such as watching TSN outside of Canada. 11. Do I need a SIM card? 12. Enable NAT on the VM 13. Persist IP tables in the VM so that the rules are still there after a reboot. 14. My main router for my primary ISP is coincidentally an OpenWRT router already. The VM goes to a switch which goes to the router. This allows you to assign certain traffic for each ISP. 15. I have an additional router that is acting as a Tailscale subnet router. This allows me to have a separate subnet for my homelab that is only accessible through Tailscale. This is useful for testing and development, and also adds an extra layer of security by keeping the homelab off the public Internet. Tailscale is the GOAT because it just works and you can have Internet without going tracing packets through your homelab every single time. 16. Next, I recommend OPNsense as another VM mostly for firewall and load balancing for generic unassigned traffic between ISPs. 17.

Cornbroom: The Derivation of a Name

I have been interested in how the Internet works for about a decade now. In 2017, I made my first website. It was a dinky 1990s-style piece of crap, and I was so proud of myself when I finally got a few nested dropdown subnav bars working. Well, and my brute force keylogger that was written in vanilla JavaScript. I didn't even know what a keylogger was until I was talking about it with a friend, and he said that is what I made! After several years of writing way too much numerical computation in Python (including some Tkinter), I started self-hosting Home Assistant on an RPi 4 that I got from a coworker. That was the extent of my homelab for many years because Home Assistant supports so many different pieces of hardware and APIs. Then, everything changed when I bought a 15-year-old Toshiba laptop on eBay. Initially it was intended to be a livestreaming server for my curling games, which it did twice, Bluetooth mics included. It sat on my desk for a few months, and then I overwrote Windows with Proxmox. Within a day I had 20 LXCs and VMs getting served around the house, including Windows 95 and Red Star OS. Eventually, I developed a larger overarching strategy to best serve family and friends, and that is how that Toshiba laptop and RPi 4 remain a part of my networking stack to this day. Trust me, I have tried to download more RAM many times to no avail.

As you can probably tell at this point, I am very into old technology. All the new stuff is just a variation on the theme. A few years ago, at the curling club's AGM, I was lucky enough to see a cornbroom in the lost-and-found. Cornbrooms were used up to circa late 1960s as the sweeping devices, mostly to get cigarette ashes out of the path of the curling stone. I had always wanted to try sliding with one, just like you can see in some old videos. After nobody claimed the broom for a week, it was officially mine. I spent the summer performing historical preservation and maintenance to it (another blog post soon), and continue to use it as a reminder of the roots of the game.

Therefore it was a no-brainer what to name my machine when I first started using Home Assistant. The corn theme has since stuck with my homelab, which has only grown into a large family farm where some of the crop goes to ethanol, livestock feed, and farmers markets. I am even looking into getting more acres to grow species of corn from around the world. Thanks for supporting local, human-produced cyberagriculture, and please be sure to use the contact form to let me know what content you want to see. If you want access to certain parts of the stack, please reach out too! It is always helpful to have more farmhands because the combine doesn't drive itself! No experience necessary, I can teach you how to operate a cybercombine. Even if you just want to say hi, or want to join some of the decentralized social media sites that don't sell your data for ads or AI training, please reach out! (Please note that comments on blog posts are indeed on the roadmap.)

Lastly, a quick note AI was not, and will never be, used to generate these blog posts. However, anyone that knows basic web dev knows that writing CSS can be classified as an enhanced interrogation technique, especially when you want things to look a certain way. So, yes, most of the styling for this website is vibe coded. However, most of the HTML and scripting was done by myself. (I do occasionally vibe code Bash scripts at 11pm to hotfix a troubled backend.) On that note, please enjoy the farm tour, and take care for now.


- . .-.. . --. .-. .- .--. .... -.-- / .- -. -.. / - .... . / .. -. - . .-. -. . -

People have been computer geeks for over 100 years. The telegraph is easily one of the most impactful in human history, right up there with the discovery of fire. It is truly remarkable to consider the fact that someone in the 1880s could use a metal contactor or switch to send a series of electrical pulses to someone else regardless of where they physically were in the world. You could send a telegram to the nearest exchange and then pay a courier to deliver that message to the recipient. Around the turn of the century, wireless radio transmissions completely revolutionized society. Heinrich Hertz proved high capacitance between those contactors produced radio waves, and the same patterns that encoded messages on the wires between telegraph exchanges could be used on this wireless "spark gap transmitter." Various other computer geeks improved long-distance communication; Fessenden went transatlantic, Phillips and Bride were martyrs on what might be the greatest troubleshooting accident in maritime history, and de Forest ushered in analog solid-state electronics. When vacuum tubes were the hottest product at general stores in the post-war 1950s, researchers were already trying to figure out ways to send larger data packets between devices. It would be really difficult to send a tarball over a few copper strands in Morse code today! Imagine how long it would take!

← return to terminal