-1

我的路由器/调制解调器提供了一个本地(家庭 192.168.0.X)网络,它通过通常的动态 DNS 分配本地 IP 地址。我添加了一个在 WiFi Nat (natp) 模式下运行的 ESP8266 作为扩展器。因此它作为一个站点连接到路由器,然后提供其他设备可以连接的接入点。目前,它的子网是172 。。。X)。

这在扩展子网上的设备可以看到像 google.com 等“世界”的意义上是有效的......

问题是192 上的设备。网络看不到扩展网络上的任何设备。

问题的根源很明显: 192个网络设备都由路由器连接,路由器不知道连接到扩展接入点的任何设备。

这可能吗,是否有一个很好的 ESP 82666 示例?

如果不是示例,我不确定我不理解什么——我不确定如何调用这个配置,所以谷歌搜索它不起作用。

我觉得应该有一种方法让扩展器只是一个透明的复制器/中继器,这样路由器就可以看到每个设备,并且自己做 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() {
}
4

1 回答 1

0

您可以从 nat devices onwords 对路由器网络进行子网划分。这样就可以形成树状的网络结构。

假设您的路由器正在为您的第一跳设备分配 192.168.0.x/24 ip,然后这些设备可以使用 192.168.1.x/24 修改其接入点网络,依此类推,直到可能的最后一跳。

要使其自行动态形成,您可能需要为该结构中的所有设备分配通用 ssid 和密码。

如果您能够实现这一点,那么他们可能有机会从路由器访问单个设备。

此外,您可能会通过子网 ip 了解单个设备在网络树中所处的跃点级别。

于 2020-05-26T05:48:02.460 回答