Awesome Open Source
Awesome Open Source

Telescope DNS

GitHub release (latest by date) Build Status codecov Go Report Card GitHub

简单易用的DNS分组/转发器

基本特性

  • 默认基于CN IP列表 + GFWList进行域名分组;
  • 支持DNS over UDP/TCP/TLS/HTTPS、非标准端口DNS;
  • 支持选择ping值最低的IPv4地址(tcp/icmp ping);
  • 支持并发请求/socks5代理请求上游DNS,支持附带指定ECS信息;
  • 支持多Hosts文件 + 自定义Hosts、通配符Hosts;
  • 支持配置文件自动重载,支持监听TCP/UDP端口;
  • 支持DNS查询缓存(IP乱序、TTL倒计时、ECS);
  • 支持屏蔽指定查询类型;
  • 支持将查询结果中的IPv4地址添加至IPSet。

DNS查询请求处理流程

  1. 当域名匹配指定规则(配置文件里各组的rules)时,将请求转发至对应组上游DNS并直接返回;
  2. 如未匹配规则,则假设域名为clean组,向clean组的上游DNS转发查询请求,并做如下判断:
    • 如果查询结果中所有IPv4地址均为CN IP,则直接返回;
    • 如果查询结果中出现非CN IP,进一步判断:
      • 如果该域名匹配GFWList列表,则向dirty组的上游DNS转发查询请求并返回;
      • 否则返回查询结果。

使用说明

  1. Releases页面下载对应系统和平台的压缩包;
  2. 解压后按需求编辑配置文件ts-dns.toml(可选)并运行进程:
# ./ts-dns -h  # 显示命令行帮助信息
# ./ts-dns -c ts-dns.toml  # 指定配置文件名
# ./ts-dns -r  # 自动重载配置文件
./ts-dns

配置示例

完整配置文件参见ts-dns.full.toml

  1. 默认配置(ts-dns.toml),开箱即用
listen = ":53"
gfwlist = "gfwlist.txt"
cnip = "cnip.txt"

[groups]
  [groups.clean]
  dns = ["223.5.5.5", "114.114.114.114"]
  concurrent = true

  [groups.dirty]
  dns = [""]  # 省略
  1. 选择ping值最低的IPv4地址(启用时建议以root权限运行本程序)
# ...
[groups.clean]
  dns = ["223.5.5.5", "114.114.114.114"]
  fastest_v4 = true
# ...
  1. 指定hosts文件和自定义hosts
# ...
hosts_files = ["adaway.txt"]
[hosts]
"www.example.com" = "1.1.1.1"
# ...
  1. 使用socks5代理转发DNS请求
# ...
  [groups.dirty]
  socks5 = "127.0.0.1:1080"
  # ...
  1. 转发至上游DNS时默认附带指定ECS信息(暂不支持DOH)
# ...
  [groups.clean]
  ecs = "1.2.4.0/24"
  # ...
  1. 自定义域名分组
# ...
  [groups.work]
  dns = ["10.1.1.1"]
  rules = ["company.com"]
  # ...
  1. 动态添加IPSet记录(使用前请阅读ts-dns.full.toml对应说明)
# ...
  [groups.dirty]
  ipset = "blocked"
  ipset_ttl = 86400
  # ...

TODO

  • 设置fallback DNS

特别鸣谢

Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Typescript (267,417
Golang (163,926
Dns (10,210
Tcp (9,444
Udp (5,537
Icmp (853
Forwarder (820
Ipset (229
Dns Over Https (160
Gfwlist (154
Dns Over Tls (90