WiFi Repeater based on ESP32-S3 with WPA2-Enterprise support and embedded Tailscale client capable of advertising LAN routes.
All configuration is done via an embedded responsive web UI served directly from the device.
- Simultaneous STA+AP — Connects to a WiFi network (STA) and creates its own Access Point (AP).
- WPA2-Enterprise — Supports EAP-PEAP/TTLS configurations commonly used by corporate and university networks (including eduroam).
- NAPT & Port Forwarding — Network Address Translation for AP clients and port redirection.
- Hideable SSID — Option to hide the AP's SSID.
- Non-blocking Reconnection — STA retries with exponential backoff, recovery mode, and always-available captive portal.
- Configurable Identity — Custom Hostname and MAC addresses for STA/AP.
- Embedded Tailscale Client — Native C/FreeRTOS integration using MicroLink.
- Advertise Routes (Subnet Router / Gateway SNAT) — Advertises LAN routes using
Hostinfo.RoutableIPsand performs SNAT toward the LAN, allowingTailscale -> LANaccess without requiring static return routes on the main router. - Noise IK Authentication — Cryptographic handshake with
controlplane.tailscale.com. - DERP Relay — Global relay connection when direct peer-to-peer connectivity is unavailable.
- Automatic Reconnection — Recovers after WiFi changes or connectivity drops.
- Responsive UI — Mobile-first responsive design with no external frameworks.
- HTTP Basic Auth — Configurable credentials via the interface.
- Full Configuration — WiFi network, EAP, port forwarding, Tailscale, hostname, MACs, and logging.
- Log Viewer — Real-time system logs (32KB circular buffer).
- Runtime Logging — Adjustable global and MicroLink/WireGuard log levels without rebooting WiFi.
- OTA Updates — Web-based firmware updates with dual partitions and automatic rollback.
- Factory Reset — Reset to factory defaults via web or physical BOOT button.
| Component | Detail |
|---|---|
| Chip | ESP32-S3 (Xtensa dual-core 240MHz) |
| Flash | 16MB |
| PSRAM | 8MB octal |
| WiFi | 802.11 b/g/n, 2.4GHz |
| Connector | USB-C (native + UART) |
Pre-built binaries may be available in the firmware/ directory or in GitHub Releases depending on the current release workflow.
Use esptool.py to flash the device via USB for the first time:
esptool.py -p /dev/ttyACM0 -b 460800 --before default_reset --after hard_reset --chip esp32s3 \
write_flash --flash_mode dio --flash_size 16MB --flash_freq 80m \
0x0 firmware/bootloader.bin \
0x8000 firmware/partition-table.bin \
0xf000 firmware/ota_data_initial.bin \
0x20000 firmware/wifi_repeater.bin- ESP-IDF v6.1-dev or higher (Installation guide)
source ~/esp/esp-idf/export.sh
idf.py set-target esp32s3
idf.py -B build_s3 buildidf.py -B build_s3 -p /dev/ttyACM0 flashidf.py -B build_s3 -p /dev/ttyACM0 monitor
# Exit: Ctrl+]



