You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升Unbound视图中local-zones的配置行数限制?

解决Unbound 1.21视图中local-zone配置行数限制的问题

问题根因

你碰到的yacc stack overflow报错,是因为Unbound 1.21的配置解析器(基于yacc)在处理视图内大量重复的local-zone指令时,栈深度触碰到了硬编码的上限。旧版1.18的解析器栈配置更高,或者视图内指令的处理逻辑不同,所以没触发这个问题。

解决办法

1. 修改yacc栈大小重新编译

Unbound的配置解析逻辑写在parser.y文件里,你需要调整yacc的栈大小参数:

  • 找到Unbound源码里的parser.y,在文件开头加一行:
    %define parse.stacksize 32768
    
    (默认栈大小可能是8192或16384,你报错在9994行,设为32768足够覆盖76k行的配置)
  • 然后按OpenBSD的流程重新编译:
    1. 拿到对应版本的Unbound源码(可以从OpenBSD ports或者NLnetLabs获取)
    2. 解压后进目录,执行./configure——记得用和系统捆绑版本一致的编译参数,用unbound -V就能查到原参数
    3. 依次跑make和make install替换系统里的Unbound

2. 拆分配置到include文件(不用编译)

不想改源码编译的话,把视图里的local-zone指令拆到单独的包含文件里:

  • 新建refuse-zones.conf,把所有local-zone: "name" refuse都放进去
  • 在视图里用include: "refuse-zones.conf"代替直接写所有指令,这样解析器只处理一条include指令,不会触发栈溢出

3. 调整配置结构(临时 workaround)

你已经试过把local-zone移到顶级server:下能正常加载,如果这些拒绝规则是全局生效的,直接这么用就行;如果必须按视图区分,就把不同视图的规则分别拆到对应的include文件里。

补充说明

Unbound 1.21调整了配置解析器的逻辑,视图内的指令会被解析成嵌套结构,栈消耗比顶级指令高很多。这个硬编码的栈限制官方文档没提,只能通过改源码编译突破。

内容的提问来源于stack exchange,提问作者dfen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:55:01