Обмен данными между подсетями с помощью расширителя Wi-Fi ESP8266 - PullRequest
0 голосов
/ 26 мая 2020

У меня есть локальная (бытовая 192.168.0.X) сеть, предоставляемая моим маршрутизатором / модемом, которая назначает локальные IP-адреса с помощью обычного Dynami c DNS. Я добавил ESP8266, работающий в режиме WiFi Nat (natp), чтобы действовать как расширитель. Таким образом, он подключается к маршрутизатору как станция, а затем предоставляет точку доступа, к которой могут подключаться другие устройства. В настоящее время его su bnet - 172. . .X).

Это работает в том смысле, что устройства на расширенном su bnet могут видеть «мир», как Google. com et c ...

Проблема в том, что устройства в сети 192. не видят никаких устройств в расширенной сети.

источник проблемы довольно очевиден: все 192 сетевых устройства подключены к маршрутизатору, который не имеет понятия о каких-либо устройствах, подключенных к точке доступа повторителя.

Возможно ли это и есть ли хороший ESP 82666 пример для этого?

Если не пример, я не уверен, что я не понимаю - я не уверен, как назвать эту конфигурацию, поэтому поиск в Google не работает.

Я чувствую, что должен быть способ сделать повторитель просто прозрачным репликатором / реле, чтобы маршрутизатор видел каждое устройство и сам выполнял работу DHCPS, а не точку доступа ESP8266. Но я застрял.

Какой подход к конфигурации я могу использовать, чтобы предоставить доступ к устройствам в расширенной сети компьютерам в сети 192?

Возможных настроек множество, но я не могу найти работающую перестановку. (например, настройка шлюза или отключение DHCP на точке доступа повторителя.) Я попытался сделать сеть повторителя такой же 192.168.0.X, а не 172. Но это не помогло.

Подробности: У меня есть сенсорная сеть в моем сарае, которая находится на точке доступа. Я хочу иметь доступ к датчикам из дома. Я придумал обходные пути, чтобы устройства сараев отправляли свои данные на сервер в мире. Но мне нужен прямой доступ, чтобы я мог запрашивать устройства или программировать по беспроводной сети прямо на устройства с моего домашнего компьютера. Я могу сделать это прямо сейчас, только подключив домашний компьютер к (более медленной) расширенной точке доступа к сети, а не к высокоскоростному домашнему маршрутизатору.

Вот пример кода, который я изменяю (в основном, один из Примеры скетчей ESPWIFI.)


// NAPT example released to public domain

#if LWIP_FEATURES && !LWIP_IPV6

#define HAVE_NETDUMP 0

#ifndef STASSID
#define STASSID "HouseModem"
#define STAPSK  "HouseModemPassword"
#endif

#include <ESP8266WiFi.h>
#include <lwip/napt.h>
#include <lwip/dns.h>
#include <dhcpserver.h>

#define NAPT 1000
#define NAPT_PORT 10

#if HAVE_NETDUMP

#include <NetDump.h>

void dump(int netif_idx, const char* data, size_t len, int out, int success) {
  (void)success; // What does this do?
  Serial.print(out ? F("out ") : F(" in "));
  Serial.printf("%d ", netif_idx);

  // optional filter example: if (netDump_is_ARP(data))
  {
    netDump(Serial, data, len);
    //netDumpHex(Serial, data, len);
  }
}
#endif

void setup() {
  Serial.begin(115200);
  Serial.printf("\n\nNAPT Range extender\n");
  Serial.printf("Heap on start: %d\n", ESP.getFreeHeap());

#if HAVE_NETDUMP
  phy_capture = dump;
#endif

  // first, connect to STA so we can get a proper local DNS server
  WiFi.mode(WIFI_STA);
  WiFi.begin(STASSID, STAPSK);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(500);
  }
  Serial.printf("\nSTA: %s (dns: %s / %s)\n",
                WiFi.localIP().toString().c_str(),
                WiFi.dnsIP(0).toString().c_str(),
                WiFi.dnsIP(1).toString().c_str());

  // give DNS servers to AP side
  dhcps_set_dns(0, WiFi.dnsIP(0));
  dhcps_set_dns(1, WiFi.dnsIP(1));

  WiFi.softAPConfig(  // enable AP, with android-compatible google domain
 //   IPAddress(172, 217, 28, 254),
 //   IPAddress(172, 217, 28, 254),
 //   IPAddress(255, 255, 255, 0));
   WiFi.localIP(),IPAddress(192,168,0,1),IPAddress(255, 255, 255, 0));
  WiFi.softAP(STASSID "extender", STAPSK);  // odd way to concat strings
  Serial.printf("AP: %s\n", WiFi.softAPIP().toString().c_str());

  Serial.printf("Heap before: %d\n", ESP.getFreeHeap());
  err_t ret = ip_napt_init(NAPT, NAPT_PORT);
  Serial.printf("ip_napt_init(%d,%d): ret=%d (OK=%d)\n", NAPT, NAPT_PORT, (int)ret, (int)ERR_OK);
  if (ret == ERR_OK) {
    ret = ip_napt_enable_no(SOFTAP_IF, 1);
    Serial.printf("ip_napt_enable_no(SOFTAP_IF): ret=%d (OK=%d)\n", (int)ret, (int)ERR_OK);
    if (ret == ERR_OK) {
      Serial.printf("WiFi Network '%s' with same password is now NATed behind '%s'\n", STASSID "extender", STASSID);
    }
  }
  Serial.printf("Heap after napt init: %d\n", ESP.getFreeHeap());
  if (ret != ERR_OK) {
    Serial.printf("NAPT initialization failed\n");
  }
}

#else

void setup() {
  Serial.begin(115200);
  Serial.printf("\n\nNAPT not supported in this configuration\n");
}

#endif

void loop() {
}

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете разбить сеть маршрутизаторов на подсети из nat устройств onwords. Таким образом, может образоваться древовидная сетевая структура.

Допустим, ваш маршрутизатор назначает 192.168.0.x / 24 ip вашим устройствам первого перехода, тогда эти устройства могут изменять свою сеть точек доступа с 192.168.1.x / 24 и так далее до возможного последнего перехода.

Чтобы заставить его формироваться динамически самостоятельно, вам может потребоваться назначить общие ssid и пароль для всех устройств в этой структуре.

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

Также вы можете получить представление о том, на каком уровне перехода отдельные устройства размещаются в дереве сети по их su bnet ip.

...