虚拟地址
# 方式 1:静态地址ipv4 = "10.144.144.10/24"
# 方式 2:DHCP 自分配dhcp = true
# 方式 3:DHCP + 指定子网dhcp = "10.126.126.0/24"结构校验要求:至少配置一种。两者都不写会构造失败。
静态地址优先
Section titled “静态地址优先”如果同时写了 ipv4 和 dhcp:
ipv4 = "10.144.144.10/24"dhcp = true结果是静态地址生效,dhcp 被关闭。不要依赖这个顺序表达“自动分配”。
静态地址规则
Section titled “静态地址规则”- 格式:
a.b.c.d或a.b.c.d/prefix; - 无前缀时按
/24; - 地址应在所选前缀的网段内;
- 静态地址在
start()阶段创建网卡; - 握手成功后应用地址并启用网卡,真正可用还要等路由。
子网冲突检查
Section titled “子网冲突检查”创建或改址前会检查虚拟网段是否与 Wi-Fi STA 物理网卡的网段重叠:
E (...) ET.PROTO: virtual subnet overlaps the physical LAN, refusing to touch the netif重叠会导致本应走隧道的流量被物理网卡直接发出,因此被拒绝。
注意:
- 检查只针对
WIFI_STA_DEF;以太网/尚未初始化的场景无法判定,会放行; - 使用以太网时请自行保证网段不冲突。
DHCP 自分配
Section titled “DHCP 自分配”- 沿用当前子网;
- 优先选择通告子网中地址最小、前缀最短的;
- 等待 2 轮仍没有任何节点通告子网,回落到:
- 配置的
dhcp子网(如果给了 CIDR),或 - 内置
10.126.126.0/24。
- 配置的
- 在主机段内以随机起点线性探测;
- 跳过网络号与广播地址;
- 跳过拓扑中已通告的地址;
- 子网满时等待下一轮。
什么时候会换址
Section titled “什么时候会换址”- 当前地址已不在选定子网;
- 当前地址被其他节点占用;
- 拓扑通告了新的、更优先的子网。
地址变化后,控制面会更新虚拟网卡并重新通告,可能短暂影响连通性。
地址规划建议
Section titled “地址规划建议”选择不冲突的网段
Section titled “选择不冲突的网段”- 不要用
192.168.1.0/24、192.168.0.0/24这类常见家用网段; - 不要与 Wi-Fi STA 的 DHCP 网段重叠;
- 推荐使用
10.144.144.0/24或10.126.126.0/24作为测试网段。
静态还是 DHCP
Section titled “静态还是 DHCP”| 场景 | 建议 |
|---|---|
| 单台 ESP32,网络固定 | 静态地址,便于对端 ping 与文档记录 |
| 多台 ESP32,批量部署 | DHCP,减少地址冲突 |
| 需要稳定服务地址 | 静态地址,并在路由器/上游侧避免冲突 |
| 不确定网络拓扑 | DHCP,先跑通再固化 |
同一设备上的多个 et::Inst 必须有不同的虚拟地址/网段,否则虚拟网卡会冲突。DHCP 实例也可能选中同一地址,建议:
- 每个实例使用不同
dhcp子网;或 - 使用静态地址并规划好网段。
虚拟 IP 始终为 0
Section titled “虚拟 IP 始终为 0”- 是否配置了
ipv4或dhcp? - 是否已经握手(
PeerUp)? - DHCP 是否还在等待对端通告子网(2 轮)?
- 是否与物理网段冲突被拒绝?
- 看
ET.DHCP/ET.NETIF/ET.PROTO日志。
DHCP 分配了地址但 ping 不通
Section titled “DHCP 分配了地址但 ping 不通”先确认路由表里有该地址对应节点,再看 常见问题 FAQ。
地址频繁变化
Section titled “地址频繁变化”- 拓扑中存在多个子网,选优逻辑在切换;
- 地址被其他节点占用;
- 对端通告了更优先的子网。
尽量固定子网,或改用静态地址。