MetasDNS 是基于 CoreDNS 开发的 DNS 服务器
功能特性
- 通过标签模式管理域名,网络地址,通过标签快速匹配
- 支持通过文件或远程链接加载数据配置
- 内嵌管理界面,提供配置编辑管理, 可视化仪表盘
- 支持查询域名匹配, 客户端Ip匹配, 查询结果 Cname, IP匹配, 支持标签反相匹配
- 支持多个DNS上游服务器负载, 并支持上游分组分流
- 支持强制设置 ENDS Subnet
- 内嵌 API 服务,支持数据发布
编译发布
docker 发布
make fastpub
linux 二进制发布
make build
配置文件
.:53 {
cache 30
debug
datahub {
bootstrap 114.114.114.114:53 # 引导 DNS
jwt_secret 9b6de5cc-vcty-4bf1-zpms-0f568ac9da37
geoip_path conf/geoip.dat
geosite_path conf/geosite.dat
geoip_cache cn hk jp google apple
geosite_cache cn hk jp private apple
geodat_upgrade_url http://teamsacs.mydomain.cn/geodat
geodat_upgrade_cron 0 30 0 * * *
# datatables conf/datatables.txt
keyword_table cn,google conf/keywords.txt
domain_table cn,aliyun,ads conf/domains.txt
netlist_table cn,aliyun,local,office conf/networks.txt
ecs_table global conf/ecs_table.txt
datapub_listen :9800
notify_server https://teamsacs.appsway.cn
reload @every 3s
}
# 仪表盘配置
dashboard {
appid dashboard
workdir /var/metasdns
user mdns
passwd mdns
host 0.0.0.0
port 9900
secret xxxxx
debug
}
# 匹配所有 CN 域名
metadnsq cn {
debug
max_fails 3
health_check 30s
to t1 114.114.114.114 223.5.5.5 # 转发 DNS 上游
policy round_robin
matcher {
# 匹配客户端标签
client_ips office
# 强制覆盖 ECSIP, ecsip 从 global 标签匹配
force_ecs global
}
# 广告域名拦截
matcher {
query_names ads
ipset danger
nxdomain
notify ads
}
}
# 非 CN 域名
metadnsq !cn {
debug
bootstrap 114.114.114.114:53 # 引导 DNS
max_fails 3
health_check 30s
to t1 8.8.8.8 9.9.9.9
policy round_robin
# 广告域名拦截
matcher {
query_names ads
ipset danger
nxdomain
notify ads
}
}
}
systemd 服务部署
执行 sudo sh install.sh
docker install
version: "2"
services:
metasdns:
image: toughstruct/metasdns
container_name: "metasdns"
ports:
- "53:53/udp"
- "53:53"
- "9800:9800"
- "9900:9900"
volumes:
- /data/metasdns:/var/metasdns
networks:
metasdns_network:
networks:
metasdns_network: