Skip to content

修复 singbox 内核 ECS 获取失败导致启动 FATAL#1301

Open
abcfy2 wants to merge 2 commits into
juewuy:devfrom
abcfy2:fix/ecs-dns-empty-client-subnet
Open

修复 singbox 内核 ECS 获取失败导致启动 FATAL#1301
abcfy2 wants to merge 2 commits into
juewuy:devfrom
abcfy2:fix/ecs-dns-empty-client-subnet

Conversation

@abcfy2

@abcfy2 abcfy2 commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

问题

开启 ECS 优化(ecs_subnet=ON)后,get_ecsip.sh 获取公网 IP 失败时,singbox_modify.sh 仍写入空值 "client_subnet": "",导致 sing-box 启动 FATAL:

FATAL dns.client_subnet: netip.ParsePrefix(""): no '/'

mihomo 分支因已有判空保护不受影响。

另外 get_ecsip.sh 的公网 IP 轮询形同虚设:[ -n "$ip" ] 只判非空,members.3322.org 被限流返回 429 HTML 错误页时也判为成功 return,后续更可靠的源不会被尝试。

修复

  • get_ecsip.sh:每个响应用 grep -oE 提取合法 IPv4,提取失败(HTML/空)则继续轮询下一个;新增 ddns.oray.com/checkip 放首位(响应为 Current IP Address: x.x.x.x,grep 提取末尾 IPv4),移除部分运营商不可解析的 4.ipw.cn
  • singbox_modify.sh:补 ecs_address 判空,失败时不写字段,与 mihomo 分支对齐
  • clash_modify.sh:原告警 logger 缺颜色码只写日志不打印终端,补 33

singbox_modify.sh 之前 ecs_address 为空时仍写入 client_subnet:"",
导致 sing-box 启动时 netip.ParsePrefix("") 报 'no /' FATAL,
服务无法启动。根因是 get_ecsip.sh 在部分环境(如梅林 resolv.conf
无 # Interface wan 标记、members.3322.org 被限流)下拿不到公网 IP。

- singbox_modify.sh: 与 mihomo 分支对齐,加 [ -n ecs_address ] 判空,
  失败时不写字段并 logger 告警
- clash_modify.sh: logger 补颜色码 33(黄色),使告警同样打印到终端,
  原来无颜色码只写日志文件用户无感知
@abcfy2 abcfy2 changed the title fix(dns): singbox ECS 分支补齐判空,修复 client_subnet 空值导致启动 FATAL 修复 singbox 内核 ECS 获取失败导致启动 FATAL Jul 5, 2026
原轮询 [ -n "$ip" ] 只判非空,members.3322.org 被限流返回 429 HTML
错误页时也判为成功 return,后续更可靠的源不会被尝试。

- 每个响应用 grep -oE 提取合法 IPv4,提取失败(HTML/空)则继续下一个
- 新增 http://ddns.oray.com/checkip 放首位(响应含 'Current IP Address:'
  前缀,grep 提取末尾 IPv4),比 3322 免费 DDNS 更稳定
- 移除 http://4.ipw.cn(部分运营商 DNS 解析失败)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant