littlebot
Published on 2025-04-02 / 12 Visits
0

【源码】基于ESPIDF框架的ESP32本地端口转发器

项目简介

本项目是基于ESP-IDF框架开发的固件,把ESP32作为同一网络中的端口转发器。因部分本地路由器支持的端口转发规则有限,此项目应运而生。它可接收特定端口的流量,并将其转发到本地网络的其他IP上。该项目基于martin - ger的ESP32 NAT Router代码开发,修改了lwip库以支持同一网络的端口转发,还具备OTA固件更新等功能。

项目的主要特性和功能

  1. 端口转发功能:最多可设置32条端口转发规则,支持TCP和UDP协议,能按规则将同一网络的传入数据包转发到其他设备。
  2. 网络拓展与隔离:可作为现有WiFi网络的简单范围扩展器,也能为访客或物联网设备设置有不同SSID和密码的额外WiFi网络。
  3. 高带宽:测试中,使用IPv4TCP协议,能实现超15mbps的带宽。
  4. 多种配置方式:支持通过简单的Web界面或串行控制台配置,如设置WiFi网络、端口映射规则等;还能通过命令行接口进行更细致的操作,如管理NVS存储、设置睡眠模式等。
  5. OTA固件更新:支持通过Web进行OTA固件更新,无需物理连接到ESP32。
  6. LED状态指示:可通过板载LED的状态和闪烁次数判断ESP32与上游AP的连接状态以及连接到ESP32的设备数量。

安装使用步骤

前提条件

用户已下载本项目的源码文件。

步骤

  1. 构建并烧录固件
    • 下载并设置ESP-IDF。
    • 在项目目录中运行make menuconfig(或idf.py menuconfig 用于cmake),确保以下选项被启用:
      • *Component config -> LWIP > [x] Enable copy between Layer2 and Layer3 packets。
      • *Component config -> LWIP > [x] Enable IP forwarding。
      • *Component config -> LWIP > [x] Enable NAT (new/experimental)。
    • 构建项目并将其烧录到ESP32: esptool.py --chip esp32 --port /dev/ttyUSB0 \ --baud 115200 --before default_reset --after hard_reset write_flash \ -z --flash_mode dio --flash_freq 40m --flash_size detect \ 0x1000 build/bootloader/bootloader.bin \ 0x10000 build/esp32_nat_router.bin \ 0x8000 build/partitions_example.bin
    • 也可使用 Espressif's Flash Download Tools ,并按相应参数配置。
  2. 首次启动与配置
    • 首次启动后,ESP32将提供一个开放的AP,SSID为“ESP32_NAT_Router”。
    • 可通过以下两种方式配置:
      • Web界面:将PC或智能手机连接到该WiFi SSID,在浏览器中访问“http://192.168.4.1” ,先配置“STA Settings”(上行WiFi网络),点击“Connect” ,ESP32重启并连接到WiFi路由器;之后重新连接并刷新页面,配置“Soft AP Settings” ,点击“Set” ,ESP32再次重启,即可开始通过新配置的Soft AP转发流量。
      • 串行控制台:使用串行控制台(如Putty或GtkTerm,波特率115200bps),通过“set_sta”和“set_ap”命令配置WiFi设置,使用“show”命令显示当前配置,NVS命名空间为“esp32_nat” 。
  3. 配置端口转发规则:连接到ESP32的静态IP,使用浏览器或命令行(portmap [add|del] [TCP|UDP] <ext_portno> <int_ip> <int_portno>)配置端口转发规则。
  4. OTA固件更新:若需更新固件,可通过Web界面上传固件文件(.bin)进行OTA更新。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】