chinadns 重构增强版,支持域名分流、ipset/nftset、UDP/TCP/DoT
-A/--add-taggfw-ip
选项,用于添加 tag:gfw 黑名单域名的 IP 至 ipset/nftset。-a/--add-tagchn-ip
接收可选参数,用于指定其它集合,默认还是 --ipset-name4/6
的那个集合。目前,有3套 ipset/nftset,分别用于这3类域名:
--ipset-name4/6
选项,用于测试china上游的结果是否为大陆IP。--add-tagchn-ip
选项,用于添加白名单域名的IP,用于iptables/nft操作。--add-taggfw-ip
选项,用于添加黑名单域名的IP,用于iptables/nft操作。相关新功能、新特性见 2023.04.01 版本的发布说明。
预发布版本,功能粗略跑了下,问题不大。我这边 code review 后再正式发布。有问题随时交流。
-g/--gfwlist-file
、-m/--chnlist-file
支持多个文件路径,文件路径之间使用逗号隔开,如 -g a.txt,b.txt
。
新增 -a/--add-tagchn-ip
选项:将chn域名的解析结果加入ipset/nftset,类似dnsmasq的ipset/nftset指令。见 #115 。
添加nftset支持,参数还是原来的-4/--ipset-name4 <name>, -6/--ipset-name6 <name>
,若name包含@字符,则使用nft后端,否则使用ipset后端。nft的name格式:family名称@table名称@set名称
。注意:不支持混用ipset/nftset,即:v4和v6要么都用ipset,要么都用nftset。
对nft的add操作进行了性能优化,效率要比dnsmasq的nftset实现高得多;对于dnsmasq,如果要添加的ip与集合中已存在的cidr存在重叠(在set已存储大部分大陆ip(cidr)时,很容易触发该条件),则add操作会导致数十毫秒级别的延迟,并且nftset会报告interval overlaps with an existing one
错误。
-N/--no-ipv6
选项添加规则T
,当一个AAAA查询只转发给了可信上游时,此规则开始发挥作用:若启用了规则T,则过滤非大陆ip的解析结果;否则(默认行为)不进行ip判定/过滤。见 issue #116 。
dnl相关优化,弃用brk/sbrk,改用mmap/mremap,并进行4k页面对齐。
移除libm.so依赖,现在只依赖libc.so了。
-d gfw/chn
纯域名分流模式时,避免 ipest 相关调用。新增 -d/--default-tag <tag>
选项,用来纯域名分流。见 #117
修复 #113 bug:主机源 IP 变动导致 chinadns-ng 无法与 DNS 上游进行通信。
修复 2023.02.27 版本的 sbrk 兼容问题(musl) e1859360c0db96c6d36c54ba85d23a12c4bcd91b