https://github.com/zanjie1999/esp32_nat_router
esp32_nat_router-master工程下载地址
ESP32-S2配置成以太网+AP,两个接口之间的NAT路由转发不正常。
以太网部分是从\esp-idf\examples\ethernet\basic例程验证完成后移植过来的。
(1)PC1可以正常连接ESP32-S2-AP,并得到DHCP 分配的地址192.168.4.5,可以正常访问912.168.4.1,ESP32-S2以太网接口可以DHCP从外部路由器正常得到IP地址192.168.3.89。
C:\Users\wei>ping 192.168.4.1
正在 Ping 192.168.4.1 具有 32 字节的数据:
来自 192.168.4.1 的回复: 字节=32 时间=14ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=16ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=7ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=8ms TTL=255
192.168.4.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 7ms,最长 = 16ms,平均 = 11ms
C:\Users\wei>ping 192.168.3.89
正在 Ping 192.168.3.89 具有 32 字节的数据:
来自 192.168.3.89 的回复: 字节=32 时间=10ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=10ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=6ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=21ms TTL=255
192.168.3.89 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 6ms,最长 = 21ms,平均 = 11ms
//无法到达HUAWEI-WIFI路由器了
C:\Users\wei>ping 192.168.3.1
正在 Ping 192.168.3.1 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
192.168.3.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
(2)换一台PC2连接华为WIFI路由器,
C:\Users\wei>ping 192.168.3.1
正在 Ping 192.168.3.1 具有 32 字节的数据:
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.3.1 的回复: 字节=32 时间=1ms TTL=64
192.168.3.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 1ms,最长 = 1ms,平均 = 1ms
C:\Users\wei>ping 192.168.3.89
正在 Ping 192.168.3.89 具有 32 字节的数据:
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
192.168.3.89 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 3ms,最长 = 3ms,平均 = 3ms
(3)通过如下if 0,只保留ethernet_init(),PC2是可以ping通EPS32-S2以太网接口的,说明以太网接口移植是没有问题的
if(1){
ethernet_init(static_ip, subnet_mask,gateway_addr, base_mac_addr);
if (0) WiFi_AP_init(ap_ssid, ap_passwd, ap_ip);
}
else{
// Setup WIFI
wifi_init(ssid, passwd, static_ip, subnet_mask, gateway_addr, ap_ssid, ap_passwd, ap_ip);
}
C:\Users\wei>ping 192.168.3.89
正在 Ping 192.168.3.89 具有 32 字节的数据:
来自 192.168.3.89 的回复: 字节=32 时间=31ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=2ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.89 的回复: 字节=32 时间=2ms TTL=255
192.168.3.89 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 2ms,最长 = 31ms,平均 = 9ms
什么原因?如何解决?
仔细看,上面来自 192.168.3.89 的回复: 字节=32 时间=31ms TTL=255,TTL=255说明是最后了。
观察esp32_nat_router-master工程原始状态,PC1(192.168.4.2)ping如下三个地址:,TTL好像并没有提供什么线索。
C:\Users\wei>ping 192.168.3.86
正在 Ping 192.168.3.86 具有 32 字节的数据:
来自 192.168.3.86 的回复: 字节=32 时间=4ms TTL=255
来自 192.168.3.86 的回复: 字节=32 时间=5ms TTL=255
来自 192.168.3.86 的回复: 字节=32 时间=3ms TTL=255
来自 192.168.3.86 的回复: 字节=32 时间=22ms TTL=255
192.168.3.86 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 3ms,最长 = 22ms,平均 = 8ms
C:\Users\wei>ping 192.168.4.1
正在 Ping 192.168.4.1 具有 32 字节的数据:
来自 192.168.4.1 的回复: 字节=32 时间=5ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=4ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=7ms TTL=255
来自 192.168.4.1 的回复: 字节=32 时间=35ms TTL=255
192.168.4.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 4ms,最长 = 35ms,平均 = 12ms
C:\Users\wei>ping 192.168.3.1
正在 Ping 192.168.3.1 具有 32 字节的数据:
来自 192.168.3.1 的回复: 字节=32 时间=20ms TTL=63
来自 192.168.3.1 的回复: 字节=32 时间=28ms TTL=63
来自 192.168.3.1 的回复: 字节=32 时间=16ms TTL=63
来自 192.168.3.1 的回复: 字节=32 时间=17ms TTL=63
192.168.3.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 16ms,最长 = 28ms,平均 = 20ms
原工程用了如下函数
ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL) );//
结合以太网接口,改用如下函数,估计这个有差异。
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL));
经过排除这只是前后两种不同的格式,修改后还是不能再以太网和AP之间转发。
进一步分析,ESP32-S2内部没有路由协议,比如RIP,估计只能固定两个端口模式的NAT,缺省只能STA和AP之间吗?
2022-01-05一个新线索:以太网端口上电就接着网线,可以分配到IP地址;一开始没有接网线,或重新插拔后都不能分配到IP地址,感觉是DHCP Client异常。
需要进一步查官方资料