littlebot
Published on 2025-04-13 / 0 Visits
0

【源码】基于C语言的下一代DNS解析工具

项目简介

本项目是 ChinaDNS 的个人重构版本,名为 chinadns-ng。运用 C 语言开发,借助 epoll 和 ipset(netlink) 实现,致力于解决原版 chinadns 的痛点,在性能、功能及可控性上有显著提升。能完整支持 IPv4 和 IPv6 协议,兼容 EDNS 请求和响应,提供更精准的 DNS 解析服务。

项目的主要特性和功能

  1. 采用 epoll 和 ipset(netlink),实现高性能。
  2. 完整支持 IPv4 和 IPv6 协议,兼容 EDNS 请求和响应。
  3. 可手动指定国内 DNS 和可信 DNS。
  4. 修复原版对保留地址的处理问题,去除过时特性,仅保留核心功能。
  5. 支持 gfwlist/chnlist 黑/白名单模式,优化时空效率。
  6. 支持纯域名分流,避免 DNS 泄露问题。
  7. 可动态添加大陆域名结果 IP 至 ipset/nftset 实现 chnroute 分流,添加 gfw 域名结果 IP 至 ipset/nftset 用于 gfwlist 透明代理。
  8. 支持 nftables set,优化 add 操作性能,避免延迟。
  9. 提供更细致的 no-ipv6(AAAA) 控制,可根据域名类型和上游类型过滤。

安装使用步骤

编译

bash cd chinadns-ng make && sudo make install 相关 make 变量: - CC:指定编译器,默认是 gcc,如交叉编译 make clean all CC=/path/to/aarch64-linux-gnu-gcc - DEBUG:编译 debug 版本(gdb 调试信息),如 make clean all DEBUG=1 - STATIC:生成静态链接(包括 libc)的可执行文件,如 make clean all STATIC=1 - LDDIRS:库文件搜索路径,通常用不到,格式 make clean all LDDIRS=-L/path/to/libs - MAIN:可执行文件名,默认是 chinadns-ng - DESTDIR:指定安装目录,默认是 /usr/local/bin

运行

运行 chinadns-ng 时,可根据需求添加命令选项。例如: bash chinadns-ng -g gfwlist.txt -m chnlist.txt -a # 使用 ipset chinadns-ng -g gfwlist.txt -m chnlist.txt -a -4 inet@global@chnroute -6 inet@global@chnroute6 # 使用 nft

配置

命令选项可用于配置 chinadns-ng 的各项参数,以下是部分常用选项: - -b, --bind-addr <ip-address>:监听地址,默认:127.0.0.1 - -l, --bind-port <port-number>:监听端口号,默认:65353 - -c, --china-dns <ip[#port],...>:国内 DNS 服务器,默认:<114DNS> - -t, --trust-dns <ip[#port],...>:可信 DNS 服务器,默认: - -m, --chnlist-file <path,...>:白名单域名文件路径 - -g, --gfwlist-file <path,...>:黑名单域名文件路径

测试

导入项目根目录下的 chnroute*.ipsetchnroute*.nftset: ```bash ipset -R <chnroute.ipset ipset -R <chnroute6.ipset

nft -f chnroute.nftset nft -f chnroute6.nftset `` chinadns-ng 默认监听127.0.0.1:65353/udp,可给 chinadns-ng 带上-v参数,使用dig` 测试,观察其日志。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】