esp32_nat_router
martin-ger · martin-ger/esp32_nat_router
Firmware for ESP32 to function as an AI-enabled NAT router/firewall, exposing an MCP server for programmatic control.
An AI-enabled NAT Router/Firewall for the ESP32
Preview
What you can do with it
- Programmatically configure router settings and firewall rules using an AI agent.
- Monitor network traffic and respond to events via an AI agent interacting with the ESP32.
- Integrate an ESP32-based router into an agent-driven home automation system.
Safety check
Usable, but read the notes first.
- ●No clear license: check with the author before using it in a commercial product.
Automated scan of the repo files. Always review code you run.
From the README
ESP32 NAT Router
This is a firmware to use the ESP32 as WiFi NAT router. It routes between the network of the AP interface and the STA or ETH interface as uplink network. It can also work as a VPN router using WireGuard as uplink.
Other WiFi Router/Repeater Projects
Starting from this code base I started several spin-off projects with slightly differrent scope. These are all (ab)using the ESP as a minimal network device.
- Layer 2 WiFi Repeater: Finally we have it - the WiFi Repeater, a layer 2 network bridge between STA and AP (no NAT, no DHCP, just plain frame forwarding in one broadcast domain, i.e. one IP network segment). You currently find it's sources in the esp32_wifi_repeater branch of this repo, that is still under development, but it works generally with good performance and makes it a >2$ WiFi extender.
- WiFi Access Point: If you have a W32-ET01 board and you are looking for a plain ESP32 Ethernet AP, or correctly for an Ethernet to WiFi Layer 2 Bridge, check out esp32_eth_wifi_bridge.
- Ethernet Router: If you are looking for an ESP32 NAT router with reverse direction, i.e. WiFi STA as uplink (Internet) and Ethernet as downlink (LAN), check out esp32_ethernet_router. Here I also experiment with support for the common WIZnet W5500 SPI Ethernet NIC.
- PPPoE Router: If you ever consider using the ESP32 as an open-source ISP router, have a look at the esp32_PPPoE_router. It adds PPPoE as additional Ethernet uplink option. So it could be used directly on an ISP modem.
- ESP8266 NAT Router/Repeater: The grandfather of all these projects, a feature monster once build on the NONOS-SDK for the ESP8266.
Use cases for the NAT Router:
- Simple range extender for an existing WiFi network
- An additional WiFi network with different SSID/password and restricted access for guests or IoT devices
- VPN-Router using WireGuard
- Converter from a corporate (WPA2-Enterprise) network to a regular (WPA-PSK) network for simple devices
- Classic WiFi router with Ethernet uplink
- MCP-server to control your network using agentic AI
- Presence detection and network monitoring in a Home Assistant IoT network
- Debugging and monitoring of WiFi devices
Key Features
- NAT Routing: Full WiFi NAT router with IP forwarding (15+ Mbps throughput)
- WireGuard VPN: Optional VPN tunnel for upstream traffic with automatic MSS clamping and Path MTU
- DHCP Reservations: Assign fixed IPs to specific MAC addresses
- Port Forwarding: Map external ports to internal devices
- Firewall: Define ACL to restrict or monitor traffic
- PCAP Capture: Live packet capture can be streamed to Wireshark or other network tools
- WPA2-Enterprise Support: Connect to corporate networks (PEAP, TTLS, TLS) and convert them to WPA2-PSK
- 5 GHz WiFi: Dual-band support on ESP32-C5 with configurable band preference (auto/2.4 GHz/5 GHz)
- Ethernet Support: Use a W32-ET01 board with LAN8720 PHY to get Ethernet uplink
- Web Interface: Web UI with password protection for easy configuration
- Serial Console: Full CLI for advanced configuration
- Remote Console: Network-accessible CLI via TCP (password protected, per-interface binding)
- LED Status Indicator: Visual feedback via plain GPIO LED or addressable LED strip (WS2812/SK6812) with color-coded status
- OLED Display: Status display on 72x40 I2C SSD1306 OLEDs (as found on some ESP32-C3 mini boards)
- MQTT Home Assistant: Publish telemetry and per-client stats to MQTT with HA auto-discovery
- MCP Bridge (AI-Ready): BETA - Control the router from AI assistants (Claude, etc.) via the Model Context Protocol
- mDNS: The router is reachable as
esp32-nat-router.localvia mDNS/Bonjour — no need to look up the IP address. - OTA Updates: Flash new firmware directly from the Web UI
The maximum number of simultaniously connected WiFi clients is 8 (5 on the ESP32c3) due to RAM limitations (uses about 5KB per client). Each of the features: Web Interface, PCAP Capture, Wireguard VPN, Remote Console, WPA Enterprise and MQTT Home Assistant require several KB of additional RAM. So using all of them at once will probably burst the ESP32's ressources. Unused/disabled features are optimized for minimal to no RAM usage. Have a look at remaining heap size if in doubt.
First Boot
After first boot the ESP32 NAT Router will offer a WiFi network with an open AP and the ssid "ESP32_NAT_Router". Configuration can either be done via a web interface or via the serial console.
- Connect to the ESP32_NAT_Router WiFi network
- Open http://esp32-nat-router.local (or http://192.168.4.1) in your browser
- Configure your upstream WiFi and AP settings on the Getting Started page
- Click Save & Reboot
Flashing Pre-built Binaries
Web Installer (Easiest)
Flash directly from your browser — no tools or command line required:
Requires a browser with Web Serial API. Select your firmware variant (WiFi or Ethernet) and click "Connect & Install".
esptool (Command Line)
Install esptool and flash using the pre-built binaries from the firmware_* directories. Example for ESP32:
esptool.py --chip esp32 \
--before default_reset --after hard_reset write_flash \
-z --flash_mode dio --flash_freq 40m --flash_size detect \
0x1000 firmware_esp32/bootloader.bin \
0x8000 firmware_esp32/partition-table.bin \
0xf000 firmware_esp32/ota_data_initial.bin \
0x20000 firmware_esp32/esp32_nat_router.bin
Pre-built binaries are available for: ESP32, ESP32-C3, ESP32-C5, *