--- **zig 工具链** - 从 2024.03.07 版本起,程序使用 Zig + C 语言编写,`zig` 是唯一需要的工具链。 - 从 [ziglang.org](https://ziglang.org/download/) 下载 zig 0.10.1,请根据当前(编译)主机的架构来选择合适的版本。 - 将解压后的目录加入 PATH 环境变量,执行 `zig version`,检查是否有输出 `0.10.1`。 - 注意,目前必须使用 zig 0.10.1 版本,因为 0.11、master 版本暂时不支持 async 特性。 --- 如果要构建 DoT 支持,请带上 `-Dwolfssl` 参数,构建过程需要以下依赖: - `wget` 或 `curl` 用于下载 wolfssl 源码包;`tar` 用于解压缩 - `autoconf`、`automake`、`libtool`、`make` 用于构建 wolfssl 针对 x86_64(v3/v4)、aarch64 的 wolfssl 构建已默认启用硬件指令加速,若目标硬件(CPU)不支持相关指令(部分树莓派阉割了 aes 相关指令),请指定 `-Dwolfssl-noasm` 选项,避免运行 chinadns-ng 时出现 SIGILL 非法指令异常。 --- 如果遇到编译错误,请先执行 `zig build clean-all`,然后重新执行相关构建命令。 可执行文件在 `./zig-out/bin` 目录,将文件安装(复制)到目标主机 PATH 路径下即可。 --- ```bash git clone https://github.com/zfl9/chinadns-ng cd chinadns-ng # 本机 (若构建失败,请手动指定"-Dtarget"和"-Dcpu") zig build # 链接到glibc zig build -Dtarget=native-native-musl # 静态链接到musl # x86 zig build -Dtarget=i386-linux-musl -Dcpu=i686 zig build -Dtarget=i386-linux-musl -Dcpu=pentium4 # x86_64 zig build -Dtarget=x86_64-linux-musl -Dcpu=x86_64 # v1 zig build -Dtarget=x86_64-linux-musl -Dcpu=x86_64_v2 zig build -Dtarget=x86_64-linux-musl -Dcpu=x86_64_v3 zig build -Dtarget=x86_64-linux-musl -Dcpu=x86_64_v4 # arm zig build -Dtarget=arm-linux-musleabi -Dcpu=generic+v5t+soft_float zig build -Dtarget=arm-linux-musleabi -Dcpu=generic+v5te+soft_float zig build -Dtarget=arm-linux-musleabi -Dcpu=generic+v6+soft_float zig build -Dtarget=arm-linux-musleabi -Dcpu=generic+v6t2+soft_float zig build -Dtarget=arm-linux-musleabi -Dcpu=generic+v7a # soft_float zig build -Dtarget=arm-linux-musleabihf -Dcpu=generic+v7a # hard_float # aarch64 zig build -Dtarget=aarch64-linux-musl -Dcpu=generic+v8a zig build -Dtarget=aarch64-linux-musl -Dcpu=generic+v9a # mips + soft_float # 请先阅读 https://www.zfl9.com/zig-mips.html ARCH=mips32 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH+soft_float ARCH=mips32r2 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH+soft_float ARCH=mips32r3 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH+soft_float ARCH=mips32r5 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH+soft_float # mipsel + soft_float # 请先阅读 https://www.zfl9.com/zig-mips.html ARCH=mips32 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH+soft_float ARCH=mips32r2 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH+soft_float ARCH=mips32r3 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH+soft_float ARCH=mips32r5 && MIPS_M_ARCH=$ARCH MIPS_SOFT_FP=1 zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH+soft_float # mips + hard_float # 请先阅读 https://www.zfl9.com/zig-mips.html ARCH=mips32 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH ARCH=mips32r2 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH ARCH=mips32r3 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH ARCH=mips32r5 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mips-linux-musl -Dcpu=$ARCH # mipsel + hard_float # 请先阅读 https://www.zfl9.com/zig-mips.html ARCH=mips32 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH ARCH=mips32r2 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH ARCH=mips32r3 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH ARCH=mips32r5 && MIPS_M_ARCH=$ARCH zig build -Dtarget=mipsel-linux-musl -Dcpu=$ARCH # mips64/mips64el 请前往 releases 页面下载预编译的可执行文件 # 如果想自己编译,请先前往 zig 根目录,按顺序 apply 这两个补丁 # - https://github.com/ziglang/zig/pull/14541.patch # - https://github.com/ziglang/zig/pull/14556.patch # riscv64 zig build -Dtarget=riscv64-linux-musl ```
```shell # 监听地址和端口 bind-addr 0.0.0.0 bind-port 53 # 国内上游、可信上游 china-dns 223.5.5.5 trust-dns tcp://8.8.8.8 # 域名列表,用于分流 chnlist-file /etc/chinadns/chnlist.txt gfwlist-file /etc/chinadns/gfwlist.txt # chnlist-first # 收集 tag:chn、tag:gfw 域名的 IP (可选) add-tagchn-ip chnip,chnip6 add-taggfw-ip gfwip,gfwip6 # 测试 tag:none 域名的 IP (针对国内上游) ipset-name4 chnroute ipset-name6 chnroute6 # dns 缓存 cache 4096 cache-stale 86400 cache-refresh 20 # verdict 缓存 (用于 tag:none 域名) verdict-cache 4096 # 详细日志 # verbose ```
```shell # 监听地址和端口 bind-addr 0.0.0.0 bind-port 53 # 国内上游、可信上游 china-dns 223.5.5.5 trust-dns tcp://8.8.8.8 # 域名列表,用于分流 # 未被 gfwlist.txt 匹配的归为 tag:chn gfwlist-file /etc/chinadns/gfwlist.txt default-tag chn # 收集 tag:gfw 域名的 IP (可选) add-taggfw-ip gfwip,gfwip6 # dns 缓存 cache 4096 cache-stale 86400 cache-refresh 20 # 详细日志 # verbose ```
```shell # 监听地址和端口 bind-addr 0.0.0.0 bind-port 53 # 国内上游、可信上游 china-dns 223.5.5.5 trust-dns tcp://8.8.8.8 # 域名列表,用于分流 # 未被 chnlist.txt 匹配的归为 tag:gfw chnlist-file /etc/chinadns/chnlist.txt default-tag gfw # 收集 tag:chn 域名的 IP (可选) add-tagchn-ip chnip,chnip6 # dns 缓存 cache 4096 cache-stale 86400 cache-refresh 20 # 详细日志 # verbose ```
```console
$ chinadns-ng --help
usage: chinadns-ng