NodeMCU Ping работает на одном, но не на другом

Обновление 2: Протестировали, пропинговав различные устройства в разных подсетях/вланах. и сделал pcap на точке доступа Wi-Fi
Я вижу запросы icmp, проходящие для каждого запроса, кроме запросов в подсети 4.x, почти как если бы arduino не нравился этот IP-адрес и отказывался отправлять эти пакеты?

Обновление 1:

Протестировано следующее

Включил ведение журнала в брандмауэре и заметил следующие действия:

  • Проверка связи маршрутизатора с Arduino. См. журналы брандмауэра, Arduino получает ответ. (Красная линия)
  • Отправить внешний веб-запрос от arduino — просмотреть журналы брандмауэра, arduino получит ответ. (оранжевая линия)
  • Отправить веб-запрос на внутренний сервер — Arduino запрашивает внутренний DNS и получает IP-адрес веб-сервера, но запрос не отправляется (в журналах брандмауэра ничего) (желтый и синий)
  • Отправить ping на внутренний сервер — Arduino запрашивает тот же DNS-сервер, получает IP-адрес, но запрос не отправляется (снова записывается журнал брандмауэра) (желтый и зеленый)

однако при отправке ping-запроса и веб-запроса с рабочего стола отображается как журнал брандмауэра, блокирующий ping-запрос, так и правило, разрешающее веб-запрос. (Коричневый Фиолетовый Розовый)

Еще раз прикрепите диаграмму, чтобы визуализировать происходящее. При необходимости можно прикрепить журналы или правила маршрутизатора

https://imgur.com/a/g4TipmZ

Также я установил ПК с Windows с тем же IP-адресом и может пинговать веб-сервер, поэтому я знаю, что что-то не так с запросами Arduino, в частности, к веб-серверу, а не к брандмауэру?

Завершить обновление

У меня есть два Node MCU, которые я использую для проекта. Некоторое время назад они работали нормально, но недавно я изменил некоторые сетевые настройки в своей домашней сети и обнаружил, что это сломало сценарий, который я запускал на них. Наконец-то я понял, где что-то пошло не так, и исправил это, но теперь у меня есть еще одна интересная проблема.

Один из моих узлов выполняет этот скрипт нормально, тогда как другой застревает на этапе проверки связи. Я загрузил один и тот же сценарий на оба узла и поменял местами назначенный IP-адрес, и он следует за устройством, а не за IP-адресом. Так что я знаю, что это не проблема с сетью.

Я знаю, что WiFi работает на забавном узле, так как он получает IP-адрес. но дальше дело не идет

Есть идеи?

Сценарий прикреплен ниже:

    #include <DHT.h>
    #include <ESP8266WiFi.h>
    #include <ESP8266HTTPClient.h>
    #include <ESP8266Ping.h>

    // Учетные данные Wi-Fi.
    const char* WIFI_SSID = "SSID";
    const char* WIFI_PASS = "******";
    WiFiClientSecure wifiClient;
    bool connection = false;
    WiFiClient client;
    const char* dbServer = "webaddress";

    void setup() {
      //Открыть серийный номер
      Serial.begin(9600);
      Serial.setTimeout(2000);

    // Подключиться к Wi-Fi
      bool pingtest = false;
      Serial.print("Connecting to WiFi");
      WiFi.begin(WIFI_SSID, WIFI_PASS);
      //Ждем подключения
      int wificount = 0;
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      if (WiFi.status() == WL_CONNECTED) {
        connection = true;
        Serial.println("WiFi connected");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());
        while(!pingtest){
          Serial.println("Pinging Server");
          if(Ping.ping(dbServer) == true){
            pingtest = true;
          }else{
            Serial.print(".");
            delay(1000);
          }
        } 
      }


    }

void loop() {
  Serial.println("Hello");
  delay(2000);
}

Обновление (кросс-опубликовано с другого форума): У меня есть Arduino, который пингует сервер в другой VLAN/подсети как часть своего кода. Некоторое время назад это работало, но я изменил некоторые настройки своего брандмауэра, чтобы ограничить доступ, и это сломало код Arduino. Я обнаружил, что это произошло из-за того, что я блокировал ICMP через VLAN. Поэтому я создал правило, разрешающее запросы ping между двумя VLAN. проверено на моем рабочем столе (в той же сети, что и Arduino) и отлично работает. Пошел тестировать на Arduino и не получил никакого ответа.

Поэтому я вставил IP-адрес маршрутизатора и проверил его на Arduino, все работает нормально. Я даже могу пинговать Arduino со своего рабочего стола и пинговать свой рабочий стол с Arduino

Поэтому я решил, что у меня должно быть какое-то другое правило брандмауэра, позволяющее моему рабочему столу иметь особый доступ. (не то, чтобы я мог найти это) поэтому дал Arduino тот же IP-адрес и не повезло, но все еще может пинговать маршрутизатор

Я прикрепил здесь грубый рисунок. Надеюсь, это поможет визуализировать мою проблему.

, 👍-1

Обсуждение

попробуйте стереть флешку с помощью esptool, чтобы очистить старые настройки RF, затем загрузите скетч и подождите пару минут, пока настройки RF откалибруются, @Juraj

Это не сработало Удалил флэш-память на обоих устройствах, и теперь они оба не могут выполнить ping или выполнить мой веб-запрос позже в коде., @Thomas PomTom Steel

хорошо, не уверен, что это проблема с маршрутизацией или проблема с arduino, так как я получаю странные результаты тестов. Обновлю исходную публикацию новыми выводами, @Thomas PomTom Steel

Вы позволили ему откалибровать радиочастотную часть?, @Juraj

Да, обновил исходную публикацию дополнительной информацией, @Thomas PomTom Steel


1 ответ


1

Если проверка связи не работает через маршрутизируемое соединение, возможно, это так.

  1. Шлюз по умолчанию на устройстве Arduino. Добавьте Serial.println(WiFi.gatewayIP().toString());, чтобы напечатать шлюз по умолчанию.

  2. Проблема с DNS. Я предполагаю, что const char* dbServer = "webddress"; указывает полное доменное имя.

  3. Брандмауэр блокирует ICMP на входящем или исходящем пути.

,

Провели много тестов на другом форуме и пришли к выводу, что Arduino не хочет отправлять запросы в очень определенный диапазон IP-адресов. Для тестирования у меня есть следующая настройка Настольный ПК: 192.168.1.100, arduino 192.168.1.222 (Vlan 10) Сервер 1: 192.168.99.40 (Влан 99) Сервер 2: 192.168.4.200 (Vlan 40) Я могу нормально пинговать оба сервера со своего настольного ПК. Я могу пинговать Google, маршрутизатор и сервер 1 с Arduino, но не сервер 2. Я сделал захват пакетов в точке доступа Wi-Fi и вижу пакеты ICMP для других пингов, но не при пинге сервера 2., @Thomas PomTom Steel

Я также установил для ноутбука тот же IP-адрес, что и для Arduino (после выключения Arduino во избежание конфликтов), и пинг проходит нормально. Я также подтвердил, что IP-адрес шлюза и сетевая маска установлены правильно на Arduino. и я удалил все домены из сценариев для тестирования, используя только IP-адреса, чтобы попытаться устранить проблемы с DNS., @Thomas PomTom Steel

Добавьте сниффер в vlan 10 и посмотрите, что отправляет Arduino. И проверьте, что пишет/блокирует журнал брандмауэра., @MatsK

Чтобы не показаться грубым. Просто я уже упоминал об этом дважды. Сделал pcap на точке доступа Wi-Fi и не вижу никаких запросов от arduino при пинге диапазона 4.x, но я делаю это с другими запросами ping. И брандмауэр показывает то же самое, журналы для всех моих тестов пинга, кроме диапазона 4.x, @Thomas PomTom Steel