Human-Powered Broadband Internet and Web Server
I described in an earlier post how I used a pedal-powered generator to generate the electricity needed to power the DSL modem/router and web server that serves this web site.
While this worked, our internet service's slow upload speed caused problems. Pages took too long to load for most visitors to our site [1]. We couldn't video chat with family, friends, or customers, either.
But I was hesitant to upgrade to higher-speed internet service. Every service option required considerably more power than the 2.9 W our DSL modem/router did. I was already pedaling my old generator over 4 hours each day; for every extra watt a high speed internet connection required, I would need to pedal 40 minutes per day more. I didn't want to pedal an additional couple of hours each day just to reduce this site's page load times or engage in a video chat a few times a year.
In the end, I came up with a solution that significantly upgraded our internet service, made our server more secure, and lowered the amount I had to pedal each day.
Choosing an Internet Services Provider (ISP)
These are my current high-speed internet service options:
Internet Service Type (Provider) | Equipment Required | AC Power Consumption |
---|---|---|
Broadband Cable (Mediacom) | DOCSIS 3.1 modem/router | 8.3-25.5 W |
Fixed Wireless (T-mobile)> | 5G home internet gateway | 15-22 W, (possibly less) |
Broadband Fiber (Metronet) | ONT & Eero wifi router | 3.8 W (ONT) + 3-7 W (Eero router) |
I chose broadband fiber from Metronet. The service was superior to the other options (symmetric upload and download speeds, no data caps) and consumed the least power. We signed up for their 100 Mbps plan.
To connect our home to their service, Metronet installed a fiber-to-Ethernet adapter known as an optical network terminal (ONT) in our house. The ONT came with a 110 VAC-to-12 VDC adapter, but we didn't need it since the PedalPC supplies 12 VDC already. Powering the ONT directly off DC saved a few watts that would be wasted in a DC-to-AC-to-DC conversion.
On our 100 Mbps service plan, the Nokia ONT Metronet installed consumes 2.5 W when powered from one of the PedalPC's 12 VDC power sockets. It appears a higher-speed plan wouldn't require significantly more power--a friend with 1 Gbps Metronet service reported his ONT uses slightly less 3 W AC from the wall outlet.
Choosing a Router
The ONT provides a single, wired internet connection; to connect all our household devices to the internet, we needed to connect a wireless router to it. Metronet supplies a free Eero wifi router to every customer, but doesn't require you to use it. You can use any router you want.
Our internet needs are modest (which is why we chose 100 Mbps service). My wife and I live alone, have few internet-connected devices, and don't engage in high-bandwidth activities like watching high-definition video or online games. We therefore didn't need all the features the Eero router offered. What we really needed was a more energy-efficient router.
My friend suggested using a mini-router (also called a travel router). These USB-powered routers consume less energy than traditional routers because they use a USB cable instead of an AC adapter for power, have fewer Ethernet ports, and transmit at a lower power level.
I chose a GL.iNet GL-AR300M-Ext because it consumed the least power of all their available models. I chose it over similar routers from other brands because it uses easily-updatable open-source firmware.
The router is 2.4 GHz wifi only (as opposed to newer dual-band 2.4 GHz and 5 GHz routers), so it's real-life maximum wifi transmission speed is only about 20-30 Mbps. This didn't matter much to us--it's still 2X the download speed of our old DSL service! Also, 2.4 GHz can transmit farther and through walls better than 5 GHz, so we're not sacrificing much.
The router is rated to use < 2 W; my PedalPC's dashboard says it uses about 0.9 W.
Since the mini-router transmits at lower power than convention routers, it's wifi coverage area is slightly less. But it's proven adequate to cover all the rooms and basement in our small, two-bedroom house.
The total power consumption of the ONT and mini-router was 2.5 W + 0.9 W = 3.4 W, only 0.4 W more than our previous DSL modem/router. Using the formula I derived in my previous post, I need to pedal 2.3 hours each day to keep our wifi network and broadband internet connection up all day.
Setting up a Pedal-Powered Web Server
With the internet connection solved, I now needed to make our web server accessible from the internet.
Web Hosting with Dynamic DNS
Hosting a web server normally requires a globally-unique, public IP address. Whenever you type a URL (e.g., 'https://www.pedalpc.com') in your web browser, your browser looks up the IP address corresponding to that domain from the site's domain name server (DNS), which in our case is at Cloudflare. Your browser then uses that IP address to find the server hosting the web site and retrieves the content from it.
Our previous DSL ISP provided each customer us with a public IP address. However, the address wasn't fixed; it often changed whenever the modem rebooted. As I explained in the previous post, we solved this problem by running a script on our server that updated our DNS records at Cloudflare whenever the IP address changed. This method of hosting a web service behind a varying IP address is known as dynamic DNS (DDNS).
Web Hosting with CGNAT
But Metronet customers don't get a public IP address [2], because Metronet uses carrier-grade network address translation (CGNAT). In CGNAT, customers are pooled together into small networks, each of which is behind its own router. Each customer is assigned a private IP address unique to their network. This reduces the number of public IP addresses Metronet must purchase, saving them money, and helps conserve the limited number of IPv4 addresses left. It also increases their customer's internet security, because their home router is no longer accessible to the public internet.
But it makes it impossible to host a public server using DDNS, because the server has no public IP address.
To work around this, I set up a Cloudflare tunnel. In a Cloudflare tunnel, our web server sets up a connection to Cloudflare's nearest data center, allowing two-way communication between them. Whenever someone requests content from our site, Cloudflare either retrieves the content from our server or, if it's already in their cache, serves the cached content themselves.
Serving our web site through a Cloudflare tunnel has worked very well. It's saved us the cost of purchasing a static IP address and increased our web server's security by making us invisible to malicious attackers who scan public IP addresses to find vulnerable servers.
Saving Energy by Combining the Router and Web Server
Our Raspberry Pi 3B+ web server consumes 2.7 W, so the total power drawn by the ONT, mini-router, and web server is 2.5 + 0.9 + 2.7 = 6.1 W. This is only 0.8 W more than 5.3W the DSL modem/router and web server together previously used. Using the PedalPC's new generator, this new setup required pedaling a little under 4 hours a day to keep us connected to the internet via wifi our web server online 24 hours a day.
To see if I could save more energy, I configured our Pi web server to also act as a wifi router, thereby eliminating the need for the mini-router.
In this configuration, the Pi is connected to the ONT via an Ethernet cable to provide the upstream internet connection. The Pi's built-in wifi transceiver broadcasts the wifi signal to clients.
Four additional pieces of software are needed to make the SBC act as a wifi router [3]:
- hostapd - An access point server. It authenticates wifi clients to the router's network.
- dnsmasq - A lightweight DHCP and DNS server. It assigns an IP address to a client when the client joins the network. It also resolves local domain names and determines which upstream DNS servers the network uses.
- a firewall (e.g., ufw or firehol - Prevents unwanted intrusions from outside the network. The Pi is not open to the larger internet (except for services exposed through Cloudflare), thanks to CGNAT, so it's not subject to attack from malicious bots scanning IP addresses. But, it is exposed to computers on other networks that share the same CGNAT subnetwork.
- fail2ban - intrusion prevention software. Blocks repeated attacks against our web server.
The Pi is capable of both 2.4 GHz & 5 GHz wifi, so it should be possible to create a dual-band wifi access point that's faster than the mini-router. However, I have only been able to create a single-band, 2.4 GHz wifi access point using it so far.
The signal strength is slightly lower than the mini-router. It's not quite strong enough to reach the corners of the basement on the side opposite of the house from where the Pi is located, due to the floor and interfering walls.
With the Pi serving as the router, the ONT and CGNATed web server together consume only 5.2 W--0.1 W less than our previous DSL setup!
Conclusions
Operating a human-powered high-speed wifi network is possible, but you need to select an ISP and networking equipment that minimizes power consumption. Downstream connections up to at least 1 Gbps require little or no more power than a 100 Mbps connection, but to take advantage of the extra speed, you'll need a more powerful router and have to pedal longer each day to supply the energy it needs. For some routers, the additional pedaling time required may be too long to be practical.
If you're also operating a web server, configuring it to also serve as a wifi router uses the least amount of power, but may come at the expense of lower wifi coverage area and lower transmission speeds.
You don't need a static or even dynamic IP address to host a public web site. A Cloudflare tunnel is more secure and works seamlessly with it's CDN service.
Hosting a human-powered, public-accessible web site requires pedaling at least 3 hours a day. That may sound like a lot, but since you can do it while you work on your computer, it doesn't cut into your free time. It turns an otherwise sedentary activity--sitting in front of a computer--into a fantastic source of exercise. It's also very hard to skip, as missing a day will take down both your internet connection and your web site!
Perhaps the biggest obstacle to human-powered web hosting is travelling becomes difficult. Any trips longer than a day require either:
- pedaling more before your trip to store enough energy to keep your server and router up,
- use an alternate power source for your network equipment and router,
- find someone to fill in for you, or
- accept your web site goes offline occasionally.
I seldom travel, so this has yet to be an issue for me.
If pedal-powered web hosting ever becomes popular, one solution to this obstacle might be federating each server's content among the pedal-powered servers to allow a server to go offline when necessary. This is how the solar protocol uses several geographically-dispersed solar-powered servers to host their web site.
I have powered our web server and home network now for over 2-1/2 years. I've enjoyed the challenge, learned a lot, and, of course, gotten a ton of exercise. As I age and my strength inevitably declines, I will at some point have to give it up. But until that day arrives, I will continue to enjoy supplying the power needed to host this web site.
1 While we use Cloudflare as a CDN in front of our site to speed up page delivery, Cloudflare doesn't cache the content indefinitely. On low-traffic sites like this one, Cloudflared usually empties the cache between visitors. More than half the requests to this site are retrieved from the server, not the cache.)
2 Cloudflare offers a static IP address for an extra $10 a month, but I didn't think it was worth it and would reduce our security since our IP address would now be public.
3 There is an open-source project on GitHub, linux-wifi-hotspot, that eases setting up a wifi access point, but I have yet to try it.