项目简介
本项目是 ChinaDNS 的个人重构版本,名为 chinadns-ng。运用 C 语言开发,借助 epoll 和 ipset(netlink) 实现,致力于解决原版 chinadns 的痛点,在性能、功能及可控性上有显著提升。能完整支持 IPv4 和 IPv6 协议,兼容 EDNS 请求和响应,提供更精准的 DNS 解析服务。
项目的主要特性和功能
- 采用 epoll 和 ipset(netlink),实现高性能。
- 完整支持 IPv4 和 IPv6 协议,兼容 EDNS 请求和响应。
- 可手动指定国内 DNS 和可信 DNS。
- 修复原版对保留地址的处理问题,去除过时特性,仅保留核心功能。
- 支持
gfwlist/chnlist
黑/白名单模式,优化时空效率。 - 支持纯域名分流,避免 DNS 泄露问题。
- 可动态添加大陆域名结果 IP 至
ipset/nftset
实现 chnroute 分流,添加 gfw 域名结果 IP 至ipset/nftset
用于 gfwlist 透明代理。 - 支持
nftables set
,优化 add 操作性能,避免延迟。 - 提供更细致的 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*.ipset
或 chnroute*.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】