跳转到内容

虚拟地址

# 方式 1:静态地址
ipv4 = "10.144.144.10/24"
# 方式 2:DHCP 自分配
dhcp = true
# 方式 3:DHCP + 指定子网
dhcp = "10.126.126.0/24"

结构校验要求:至少配置一种。两者都不写会构造失败。

如果同时写了 ipv4 和 dhcp:

ipv4 = "10.144.144.10/24"
dhcp = true

结果是静态地址生效,dhcp 被关闭。不要依赖这个顺序表达“自动分配”。

  • 格式:a.b.c.d 或 a.b.c.d/prefix;
  • 无前缀时按 /24;
  • 地址应在所选前缀的网段内;
  • 静态地址在 start() 阶段创建网卡;
  • 握手成功后应用地址并启用网卡,真正可用还要等路由。

创建或改址前会检查虚拟网段是否与 Wi-Fi STA 物理网卡的网段重叠:

E (...) ET.PROTO: virtual subnet overlaps the physical LAN, refusing to touch the netif

重叠会导致本应走隧道的流量被物理网卡直接发出,因此被拒绝。

注意:

  • 检查只针对 WIFI_STA_DEF;以太网/尚未初始化的场景无法判定,会放行;
  • 使用以太网时请自行保证网段不冲突。
  1. 沿用当前子网;
  2. 优先选择通告子网中地址最小、前缀最短的;
  3. 等待 2 轮仍没有任何节点通告子网,回落到:
    • 配置的 dhcp 子网(如果给了 CIDR),或
    • 内置 10.126.126.0/24。
  • 在主机段内以随机起点线性探测;
  • 跳过网络号与广播地址;
  • 跳过拓扑中已通告的地址;
  • 子网满时等待下一轮。
  • 当前地址已不在选定子网;
  • 当前地址被其他节点占用;
  • 拓扑通告了新的、更优先的子网。

地址变化后,控制面会更新虚拟网卡并重新通告,可能短暂影响连通性。

  • 不要用 192.168.1.0/24、192.168.0.0/24 这类常见家用网段;
  • 不要与 Wi-Fi STA 的 DHCP 网段重叠;
  • 推荐使用 10.144.144.0/24 或 10.126.126.0/24 作为测试网段。
场景建议
单台 ESP32,网络固定静态地址,便于对端 ping 与文档记录
多台 ESP32,批量部署DHCP,减少地址冲突
需要稳定服务地址静态地址,并在路由器/上游侧避免冲突
不确定网络拓扑DHCP,先跑通再固化

同一设备上的多个 et::Inst 必须有不同的虚拟地址/网段,否则虚拟网卡会冲突。DHCP 实例也可能选中同一地址,建议:

  • 每个实例使用不同 dhcp 子网;或
  • 使用静态地址并规划好网段。
  • 是否配置了 ipv4 或 dhcp?
  • 是否已经握手(PeerUp)?
  • DHCP 是否还在等待对端通告子网(2 轮)?
  • 是否与物理网段冲突被拒绝?
  • 看 ET.DHCP / ET.NETIF / ET.PROTO 日志。

先确认路由表里有该地址对应节点,再看 常见问题 FAQ。

  • 拓扑中存在多个子网,选优逻辑在切换;
  • 地址被其他节点占用;
  • 对端通告了更优先的子网。

尽量固定子网,或改用静态地址。