All projects

VPN-AP

networking

Secure travel router with VPN

Shell Raspberry Pi Networking VPN hostapd
View on GitHub

Overview

VPN-AP turns a Raspberry Pi into a portable travel router: it broadcasts its own Wi-Fi access point and tunnels everything that connects to it through a VPN. Join the Pi’s network from a hotel room or other untrusted Wi-Fi and your devices — phones, laptops, even smart TVs and consoles that can’t run a VPN client — get encrypted egress without per-device setup.

VPN-AP logo: a green shield with a Wi-Fi symbol and a padlock.

Why I built it

Public and hotel Wi-Fi are convenient and untrustworthy. Rather than babysit a VPN client on every device I travel with, a single pocket router authenticates to the upstream network and enforces the VPN for everything behind it — with a kill switch so a dropped tunnel never leaks.

How it works

The built-in Wi-Fi (wlan0) connects upstream while a USB adapter (wlan1) hosts the access point via hostapd; client traffic is routed through the tunnel with iptables:

  • NordVPN over NordLynx (WireGuard), with a kill switch — if the VPN drops, client internet stops (no leaks).
  • Captive-portal handling — a web UI at http://192.168.4.1 lets you complete hotel / airport logins, then enable the VPN; login completion is auto-detected.
  • Flexible backhaul — a priority list (iphone0 eth0 wlan0) with a gateway-reachability probe, so an iPhone USB tether or even a HaLow (802.11ah) sub-GHz link can be the upstream.
  • Resilience — a systemd watchdog monitors services every minute and auto-recovers; Wi-Fi retries, VPN server fallbacks (US/UK/DE/NL/CH), state persistence across reboots, atomic iptables-restore transitions, and MSS clamping to survive cellular PMTU black-holes.
  • Never locks you out — SSH (port 22) stays reachable in every firewall mode, with web and CLI emergency recovery.

Tech

Shell provisioning on Raspberry Pi 4 / 3B+ with a USB Wi-Fi adapter, hostapd, iptables, systemd, and the NordVPN CLI. Optional HaLow module for long-range backhaul.

Get it

Configuration and setup are on GitHub.