Skip to content

config.yaml 中的 dns 配置被静默丢弃 #1335

Description

@ashi009

yamls/config.yaml 里写的 dns: 不生效,也没有任何提示。最终配置的 DNS 段由
clash_modify.sh 重新生成,用户写的 nameserver-policyfake-ip-filteripv6
等都被替换掉。

复现

$ grep -A1 nameserver-policy /etc/ShellCrash/yamls/config.yaml
  nameserver-policy:
    "+.ts.net": "100.100.100.100"

$ grep -E "nameserver-policy|^  ipv6" /tmp/ShellCrash/config.yaml
  ipv6: false
  nameserver-policy: {'rule-set:cn': [ 127.0.0.1 ]}

config.yaml 里是 ipv6: true,运行时成了 false+.ts.net 那条策略没了。同一份
config.yaml 里的 proxy-groupsrulesrule-providers 都正常保留,只有 dns:
这一段如此。

想覆盖只有一条路:在 user.yaml 里写 dns:。但 clash_modify.sh:29
grep '^dns:' 判断,一旦命中就完全不生成 DNS 段 —— listen: :$dns_port
fake-ip-range: 28.0.0.0/8 这些也得自己复刻,漏一项就可能打断 dnsmasq 转发或
nftables 重定向。中间没有「只想加一条 nameserver-policy」的档位。

configs/fake_ip_filter 给 fake-ip-filter 留了追加入口,但仅此一项。

建议

生成 DNS 段时,把 config.yaml / user.yaml 中的同名键作为覆盖项合并进去,而不是
整段二选一;或者比照 configs/fake_ip_filter,给 nameserver-policy 之类也留一个
追加入口。

至少在丢弃时 log 一行,不要静默。

环境:ImmortalWrt 25.12,ShellCrash 1.9.5alpha14,dns_mod=mix

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions