[Bug] has invalid keys: data_providers, servers
Joyist2021 opened this issue · comments
在提交之前,请确认
- 我已经尝试搜索过 Issue ,但没有找到相关问题。
- 我正在使用最新的 mosdns 版本(或者最新的 commit),问题依旧存在。
- 我仔细看过 wiki 后仍然无法自行解决该问题。
- 我非常确定这是 mosdns 核心的问题。(如果是通过第三方衍生软件使用 mosdns 核心,不确定问题源头时,请先向衍生软件开发者提交问题。)
mosdns 版本
几乎最新版本
操作系统
ubuntu
Bug 描述和复现步骤
2024-03-20T13:57:26.474Z INFO working directory changed {"path": "/etc/mosdns"}
Error: fail to load config, failed to unmarshal config: 1 error(s) decoding:
-
'' has invalid keys: data_providers, servers
2024-03-20T13:57:26.478Z FATAL fail to load config, failed to unmarshal config: 1 error(s) decoding: -
'' has invalid keys: data_providers, servers
2024-03-20T14:05:57.139Z INFO working directory changed {"path": "/etc/mosdns"}
2024-03-20T14:05:57.142Z INFO main config loaded {"file": "/etc/mosdns/config.yaml"}
Error: failed to init plugin #4 hosts, failed to init plugin: failed to read file #0 /etc/mosdns/hosts, open /etc/mosdns/hosts: no such file or directory
2024-03-20T14:05:57.144Z FATAL failed to init plugin #4 hosts, failed to init plugin: failed to read file #0 /etc/mosdns/hosts, open /etc/mosdns/hosts: no such file or directory
2024-03-20T14:15:23.744Z INFO working directory changed {"path": "/etc/mosdns"}
2024-03-20T14:15:23.747Z INFO main config loaded {"file": "/etc/mosdns/config.yaml"}
2024-03-20T14:17:45.469Z INFO working directory changed {"path": "/etc/mosdns"}
2024-03-20T14:17:45.471Z INFO main config loaded {"file": "/etc/mosdns/config.yaml"}
使用的配置文件
# EasyMosdns v3.0(Final Release)
# https://apad.pro/easymosdns
log:
file: "./mosdns.log"
level: error
data_providers:
- tag: chinalist
file: ./rules/china_domain_list.txt
auto_reload: true
- tag: gfwlist
file: ./rules/gfw_domain_list.txt
auto_reload: true
- tag: cdncn
file: ./rules/cdn_domain_list.txt
auto_reload: true
- tag: chinaip
file: ./rules/china_ip_list.txt
auto_reload: true
- tag: gfwip
file: ./rules/gfw_ip_list.txt
auto_reload: true
- tag: adlist
file: ./rules/ad_domain_list.txt
auto_reload: true
- tag: ecscn
file: ./ecs_cn_domain.txt
auto_reload: true
- tag: ecsnoncn
file: ./ecs_noncn_domain.txt
auto_reload: true
- tag: hosts
file: ./hosts.txt
auto_reload: true
plugins:
# 缓存的插件
# [lan|wan]
- tag: cache_lan
type: cache
args:
size: 8192
#redis: "redis://127.0.0.1:6379/0"
lazy_cache_ttl: 86400
cache_everything: true
lazy_cache_reply_ttl: 1
- tag: cache_wan
type: cache
args:
size: 131072
compress_resp: true
#redis: "redis://127.0.0.1:6379/0"
lazy_cache_ttl: 86400
cache_everything: true
lazy_cache_reply_ttl: 5
# Hosts的插件
- tag: hosts
type: hosts
args:
hosts:
- "provider:hosts"
# 获取ECS的插件
- tag: ecs_auto
type: ecs
args:
auto: true
force_overwrite: false
# 指定ECS的插件
- tag: ecs_global
type: ecs
args:
auto: false
ipv4: "168.95.1.0"
ipv6: "2001:b000:168::"
force_overwrite: false
# 匹配ECS的插件
- tag: ecs_is_lan
type: query_matcher
args:
ecs:
- "0.0.0.0/8"
- "10.0.0.0/8"
- "100.64.0.0/10"
- "127.0.0.0/8"
- "169.254.0.0/16"
- "172.16.0.0/12"
- "192.0.0.0/24"
- "192.0.2.0/24"
- "198.18.0.0/15"
- "192.88.99.0/24"
- "192.168.0.0/16"
- "198.51.100.0/24"
- "203.0.113.0/24"
- "224.0.0.0/3"
- "::1/128"
- "fc00::/7"
- "fe80::/10"
- tag: ecs_is_cn
type: query_matcher
args:
ecs:
- "provider:chinaip"
# 调整TTL的插件
# [1m|5m|1h]
- tag: ttl_1m
type: ttl
args:
minimal_ttl: 60
maximum_ttl: 3600
- tag: ttl_5m
type: ttl
args:
minimal_ttl: 300
maximum_ttl: 86400
- tag: ttl_1h
type: ttl
args:
minimal_ttl: 3600
maximum_ttl: 86400
# 匹配TYPE12类型请求的插件
- tag: qtype12
type: query_matcher
args:
qtype: [12]
# 匹配TYPE65类型请求的插件
- tag: qtype65
type: query_matcher
args:
qtype: [65]
# 匹配TYPE255类型请求的插件
- tag: qtype255
type: query_matcher
args:
qtype: [255]
# 匹配RCODE2的插件
- tag: response_server_failed
type: response_matcher
args:
rcode: [2]
# 屏蔽请求的插件
- tag: black_hole
type: blackhole
args:
rcode: 0
ipv4: "0.0.0.0"
ipv6: "::"
# 匹配无效域名的插件
- tag: query_is_non_domain
type: query_matcher
args:
domain:
- "keyword::"
# 匹配本地域名的插件
- tag: query_is_local_domain
type: query_matcher
args:
domain:
- "provider:chinalist"
# 匹配污染域名的插件
- tag: query_is_non_local_domain
type: query_matcher
args:
domain:
- "provider:gfwlist"
# 匹配CDN域名的插件
- tag: query_is_cdn_cn_domain
type: query_matcher
args:
domain:
- "provider:cdncn"
# 匹配广告域名的插件
- tag: query_is_ad_domain
type: query_matcher
args:
domain:
- "provider:adlist"
# 匹配强制本地解析域名的插件
- tag: query_is_cn_domain
type: query_matcher
args:
domain:
- "provider:ecscn"
# 匹配强制非本地解析域名的插件
- tag: query_is_noncn_domain
type: query_matcher
args:
domain:
- "provider:ecsnoncn"
# 匹配本地IP的插件
- tag: response_has_local_ip
type: response_matcher
args:
ip:
- "provider:chinaip"
# 匹配污染IP的插件
- tag: response_has_gfw_ip
type: response_matcher
args:
ip:
- "provider:gfwip"
# 转发至本地服务器的插件
- tag: forward_local
type: fast_forward
args:
upstream:
- addr: "223.5.5.5"
- addr: "tls://120.53.53.53:853"
enable_pipeline: true
# 转发至远程服务器的插件
- tag: forward_remote
type: fast_forward
args:
upstream:
- addr: "tcp://208.67.220.220:5353"
enable_pipeline: true
#socks5: "127.0.0.1:1080"
- addr: "tls://8.8.4.4"
enable_pipeline: true
#socks5: "127.0.0.1:1080"
# 转发至分流服务器的插件
- tag: forward_easymosdns
type: fast_forward
args:
upstream:
- addr: "https://doh.apad.pro/dns-query"
bootstrap: "119.29.29.29"
#dial_addr: "ip:port"
#enable_http3: true
# 主要的运行逻辑插件
# sequence 插件中调用的插件 tag 必须在 sequence 前定义
# 否则 sequence 找不到对应插件
- tag: main_sequence
type: sequence
args:
exec:
# 域名映射IP
- hosts
# 屏蔽TYPE65与无效类型请求
- if: "[qtype65] || (query_is_non_domain)"
exec:
- _new_nxdomain_response
- _return
# 优化PRT与ANY类型请求
- if: "[qtype12] || [qtype255]"
exec:
- _no_ecs
- forward_local
- ttl_1h
- _return
# 缓存ECS
- ecs_auto
- _edns0_filter_ecs_only
- if: ecs_is_lan
exec:
- cache_lan
- _no_ecs
else_exec:
- cache_wan
# 强制用本地服务器解析
- if: query_is_cn_domain
exec:
- forward_local
- ttl_5m
- _return
# 强制用非本地服务器解析
- if: query_is_noncn_domain
exec:
# 优先返回ipv4结果
- _prefer_ipv4
- ecs_global
- primary:
# 默认用分流服务器
- forward_easymosdns
secondary:
# 超时用远程服务器
- forward_remote
fast_fallback: 2500
always_standby: false
- ttl_5m
- _return
# 屏蔽广告域名
- if: query_is_ad_domain
exec:
- black_hole
- ttl_1h
- _return
# 已知的本地域名或CDN域名用本地服务器解析
- if: "(query_is_local_domain) || (query_is_cdn_cn_domain)"
exec:
- primary:
# 默认用本地服务器
- forward_local
- ttl_1m
secondary:
# 超时用分流服务器
- forward_easymosdns
- ttl_5m
fast_fallback: 25
always_standby: false
# 预防已知的本地域名临时污染
- if: "(! response_has_gfw_ip)"
exec:
- _return
# 已知的污染域名用分流服务器或远程服务器解析
- if: query_is_non_local_domain
exec:
# 优先返回ipv4结果
- _prefer_ipv4
- ecs_global
- primary:
# 默认用分流服务器
- forward_easymosdns
secondary:
# 超时用远程服务器
- forward_remote
fast_fallback: 2500
always_standby: false
- ttl_5m
- _return
# 剩下的未知域名用IP分流
# 优先返回ipv4结果
- _prefer_ipv4
- primary:
# 默认用分流服务器
- forward_easymosdns
- if: response_server_failed
exec:
- forward_local
- _return
- ecs_global
- if: "(! ecs_is_cn) && (! response_has_local_ip) && [_response_valid_answer]"
exec:
- forward_easymosdns
secondary:
# 超时用本地分流器
- forward_remote
- if: response_has_local_ip
exec:
- forward_local
- _return
- ecs_global
- if: "(! ecs_is_cn) && [_response_valid_answer]"
exec:
- forward_remote
fast_fallback: 2500
always_standby: false
- ttl_5m
servers:
- exec: main_sequence
timeout: 6
listeners:
- protocol: udp
addr: "0.0.0.0:53"
- protocol: tcp
addr: "0.0.0.0:53"
#- protocol: http
# addr: "127.0.0.1:9053"
# url_path: "/dns-query"
# get_user_ip_from_header: "X-Forwarded-For"
#- protocol: tls
# addr: "0.0.0.0:853"
# cert: "/etc/mosdns/yourdomain.cert" # TLS 所需证书文件。
# key: "/etc/mosdns/yourdomain.key" # TLS 所需密钥文件。
#api:
# http: "127.0.0.1:9080"
mosdns 的 log 记录
2024-03-20T13:57:26.474Z INFO working directory changed {"path": "/etc/mosdns"}
Error: fail to load config, failed to unmarshal config: 1 error(s) decoding:
* '' has invalid keys: data_providers, servers
2024-03-20T13:57:26.478Z FATAL fail to load config, failed to unmarshal config: 1 error(s) decoding:
* '' has invalid keys: data_providers, servers
open /etc/mosdns/hosts: no such file or directory