天天看點

esp32_nat_router-master工程在STA+AP模式正常工作,改成以太網+AP,無法正常NAT路由轉發.

https://github.com/zanjie1999/esp32_nat_router

esp32_nat_router-master工程下載下傳位址

ESP32-S2配置成以太網+AP,兩個接口之間的NAT路由轉發不正常。

以太網部分是從\esp-idf\examples\ethernet\basic例程驗證完成後移植過來的。

esp32_nat_router-master工程在STA+AP模式正常工作,改成以太網+AP,無法正常NAT路由轉發.

(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));

esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx); - 猴子上樹 - 部落格園esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx){ if (s_event_init_flag) { return ESP_

esp32_nat_router-master工程在STA+AP模式正常工作,改成以太網+AP,無法正常NAT路由轉發.

https://www.cnblogs.com/whigym/p/9132284.html

經過排除這隻是前後兩種不同的格式,修改後還是不能再以太網和AP之間轉發。

進一步分析,ESP32-S2内部沒有路由協定,比如RIP,估計隻能固定兩個端口模式的NAT,預設隻能STA和AP之間嗎?

2022-01-05一個新線索:以太網端口上電就接着網線,可以配置設定到IP位址;一開始沒有接網線,或重新插拔後都不能配置設定到IP位址,感覺是DHCP Client異常。

需要進一步查官方資料

繼續閱讀