TravelQ lets an Arduino Uno Q act as a practical travel router:
- It boots a private AP (
TravelQ) and a phone-friendly provisioning UI. - You use that UI to connect upstream WiFi.
- You turn on internet sharing (NAT) when you want downstream devices to share one upstream path (important for captive portals).
- It supports hotel flows where a phone completes login after NAT is already in place.
This is Linux-side networking on the Uno Q (NetworkManager, hostapd, dnsmasq, iptables), not an App Lab project.
flowchart LR
upstream[Upstream_WiFi]
wlan0[wlan0_STA]
unoq[UnoQ_Linux]
ap0[ap0_AP_TravelQ]
phone[Phone_ProvisioningUI]
clients[Client_Devices]
upstream <--> wlan0
wlan0 <--> unoq
unoq <--> ap0
ap0 <--> phone
ap0 <--> clients
- Default boot mode: setup-only (
TravelQAP + DHCP + provisioning UI), NAT off. - Provisioning UI URL:
http://192.168.50.1/ - mDNS URL:
http://travelq.local/(ifavahi-daemon+avahi-utilsare installed). - Internet sharing: enable in the UI (step 1) or run
scripts/enable_travel_router_wan.sh.
Venues often key off the first device that hits their portal. With NAT on, traffic from your phone is masqueraded out wlan0, so completing login from the phone tends to authorize the path that downstream clients (baby monitor, laptop, etc.) will reuse—instead of each client fighting the portal separately.
- Install the boot service (below) so
TravelQand the UI come up automatically. - Join WiFi TravelQ on your phone (set your passphrase in
config/hostapd-travelq-wpa2.conf). - Open
http://travelq.local/(orhttp://192.168.50.1/). - Enable internet sharing (NAT) in the UI (step 1) before you open the hotel login page.
- Scan and connect to the hotel SSID (steps 2–3).
- Open the hotel / captive page (step 4), e.g. neverssl.com, and complete sign-in.
- Attach other devices to
TravelQ; they should route without repeating the portal when upstream is ready.
If you prefer one tap: use “Enable NAT & open hotel login” in step 4 after upstream is connected (or enable NAT in step 1 first, then connect, then open the link).
sudo apt-get update
sudo apt-get install -y python3-flask avahi-daemon avahi-utils iw hostapd dnsmasq iptables network-managercd ~/TravelQ
sudo ./scripts/install_systemd.sh
sudo ./scripts/check_prereqs.sh
sudo systemctl enable --now unoq-travel-router.serviceinstall_systemd.sh now installs required apt packages by default. Use sudo ./scripts/install_systemd.sh --skip-deps if you want to manage packages manually.
cd ~/TravelQ
sudo ./scripts/uninstall_systemd.shTo also remove optional provisioning packages that TravelQ uses:
sudo ./scripts/uninstall_systemd.sh --purge-depsThen follow the Recommended hotel workflow above from your phone.
For scripting, SSH, or recovery, the same operations are available from the shell:
# Setup mode (AP + provisioning UI only)
sudo ./scripts/start_travel_router.sh --setup-only --with-portal
# Full router mode now (AP + NAT + provisioning UI)
sudo ./scripts/start_travel_router.sh --with-portal
# Toggle internet sharing without restarting AP
sudo ./scripts/enable_travel_router_wan.sh
sudo ./scripts/disable_travel_router_wan.sh
# Upstream helpers
./scripts/scan_upstream.sh
sudo ./scripts/connect_upstream.sh "SSID" "PASSWORD"
# Status + diagnostics
sudo ./scripts/status_travel_router.sh
sudo ./scripts/audit_radio.sh
# Stop everything
sudo ./scripts/stop_travel_router.sh-
wlan0wait timeout at boot- Check:
journalctl -u unoq-travel-router.service -b - Check:
logs/boot-start.log - Tune:
UNOQ_WLAN_WAIT_SECandUNOQ_WLAN_IW_WAIT_SEC
- Check:
-
Upstream auth/connect failure
- Check:
journalctl -u NetworkManager -n 80 - Try:
sudo ./scripts/connect_upstream.sh "SSID" "PASSWORD"
- Check:
-
Captive portal does not appear
- Ensure NAT is enabled before loading the login page, then open a plain HTTP destination.
- Try
http://neverssl.comand complete venue login.
- Provisioning UI docs:
notes/provisioning_ui.md - Boot/systemd docs:
notes/persistence.md - Captive portal test flow:
notes/captive_portal_field_test.md - Release checklist:
docs/release-checklist.md - Roadmap:
ROADMAP.md
- This is a convenience router utility, not a hardened security appliance.
- Review and change AP credentials before wide sharing.
- Public/captive networks vary by venue; expect occasional edge cases.
