У меня есть ESP32 wroom32, который имеет WiFi внутри и порт Ethernet. Я хочу иметь возможность подключить мой телефон к WiFi и получить доступ к веб-серверу, работающему через порт Ethernet. Схематически это выглядит так:
ПК ----------------------- ETH (ESP32) <---- Пересылка ----> Wifi (ESP32) ------- ----- Телефон
ПК имеет статический IP: 192.168.2.150 ETH (ESP32) имеет статический ip 192.168.2.100 Wi-Fi (ESP) имеет включенный dhcp, подсеть: 192.168.4.x
Я могу настроить Wi-Fi и локальную сеть для инициализации. Сторона ETH имеет статический IP-адрес, а сторона Wifi имеет DHCP для назначения IP-адреса телефону.
Я только хочу получить доступ к определенной странице веб-сервера, работающей на ПК (доступ через 192.168.2.150:8000), это заставляет меня думать, что должна быть возможность иметь очень простую функцию пересылки, которая пересылает между Wifi и ETH.
Сейчас я попробовал две вещи:
- Примите входящие соединения TCP/UDP на интерфейсе wifi и откройте соединение на интерфейсе ETH, куда перенаправляются все входящие пакеты wifi. Это не работает, потому что TCP-соединения, которые нужно открыть для загрузки веб-страницы, хотят открыть несколько сокетов. Количество розеток, которые могут быть открыты, ограничено WROOM. Плюс сокеты не закрыты, что заставляет меня задуматься, как TCP-соединение для загрузки веб-страницы «знает», что оно должно закрываться. Опция сверху: веб-страница использует веб-сокеты для передачи данных. Если я правильно понимаю, это другой протокол, чем TCP, который является дополнительной реализацией.
- Второй вариант - более низкий уровень. Я занимаюсь мониторингом пакетов Ethernet, поступающих на оба интерфейса. Для интерфейса Wi-Fi: если порт назначения 8000, я изменяю IP-адреса и адреса HW в заголовке пакета и отправляю его через интерфейс ETH. И все, что поступает на интерфейс ETH, пересылается через интерфейс wifi (после изменения ip- и HW-адресов).
Я думаю, что второй вариант - лучшая реализация для этой проблемы. И мне удалось заставить его почти работать. С wireshark я могу слушать как интерфейс Wifi, так и интерфейс Ethernet. Я вижу, что пакеты отправляются и принимаются на другом конце. Однако, когда я слушаю с Netcat, пакеты не приходят.
Wireshark также выдает сообщение о том, что пакеты передаются промежуточным устройством. Поэтому я думаю, что пакеты отклоняются из-за этого.
Чтобы прийти к моему вопросу:
- а) Как определяется, что эти пакеты передаются промежуточным устройством?
- б) Могу ли я сделать что-нибудь, чтобы разрешить отклонение этих пакетов?
Примечание: я ограничен WROOM или другим встроенным устройством из-за характеристик, которые мне нужны: оно должно быть очень маленьким для встроенного приложения и иметь несколько интерфейсов для других датчиков (I2C, UART, SPI)