Disclaimer: This is currently just a personal project, I don’t intend to release anything currently.
Recently I ran into the issue of subscription WiFi service that charges a per-device fee, basically after connecting to an open gateway you would see a captive portal page that offers you purchasing options or login if you have already purchased. If you log in and someone is already logged in with that username it boots you off immediately.
I have a good deal of devices and while they don’t all need access all the time I’d prefer to not have to log in each time I want to use one.
Worse yet I have some devices that are not able to complete a captive portal, such as a Chromecast. I don’t like leaving them out in the cold 🙁
On top of that sometimes wifi only works in that one magic spot, or works best in one particular area.
A standard wifi repeater solution will fix that last issue but not the first two, or the cost.
Essentially, the Pi runs a NAT. Boom: Problem solved.
Now all the traffic as far as the AP is concerned will be coming from the Pi, no matter how many devices I have connected.
Additionally, I can authenticate straight through captive portals from any device, and it will then be authenticated for all devices (since it’s really just authenticating the Pi’s MAC Address).
I wrote a small PHP website for scanning access points and appending new entries to the wpa_supplicant.conf as needed.
I didn’t stop there, though. I repurposed an old Blink(1) device and I bought a PiGlow board for it. The PiGlow board displays signal strength to the AP and number of clients connected, the blink(1) just shows a basic status of the device (helpful when first booting up). Both LEDs can be disabled through the website, to prevent annoying lights in a hotel room.
The Pi its self requires two WiFi antennas, one to be the AP and one to be the client. I attached a Plugable 4-port USB hub and some 90 degree USB adapters, attached it all with some velcro to the Pi (in a case). The Pi is powered via USB from the hub, so the entire thing only requires 1 cable (other than the 2 short USB cables from the hub to the Pi: one for power one for data).
Here’s a picture of it: