Skip to content

wolf-joe/ts-dns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a1cc733 · Mar 30, 2023
Nov 29, 2022
Nov 29, 2022
Nov 29, 2022
Jan 11, 2023
Nov 30, 2022
Mar 30, 2023
Dec 22, 2022
Nov 29, 2022
Jan 11, 2023
Dec 22, 2022
Nov 29, 2022
Nov 29, 2022
Mar 20, 2020
Mar 6, 2020
Nov 30, 2022
Nov 30, 2022
Nov 29, 2022
Nov 29, 2022
Jan 11, 2023
Nov 30, 2022

Repository files navigation

Telescope DNS

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

灵活快速的DNS分组转发器

设计目标

灵活解析

  • 支持按ABP风格规则/GFWList对DNS请求进行分组
  • 支持按CIDR对DNS请求进行重定向
  • 支持DNS over UDP/TCP/TLS/HTTPS、socks5代理、ECS
  • 支持将查询结果中的IPv4地址添加至IPSet

快速解析

  • 支持并发请求上游DNS,选择最快响应
  • 选择ping值最低的IPv4地址(tcp/icmp ping)
  • 支持hosts/DNS缓存/屏蔽指定查询类型
  • 支持热重载配置文件

解析流程

arch.drawio.svg

查找hosts -> 查找缓存 -> 匹配规则 -> 指定group处理 -> 重定向 -> 设置缓存

使用说明

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

配置示例

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

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

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

  [groups.dirty]
  dns = [""] # 省略
  gfwlist_file = "gfwlist.txt"
  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
  # ...

未来规划

  • 支持定期拉取最新gfwlist
  • 支持http接口管理
  • 降低gfwlist的匹配优先级
  • DoT/GFWList域名解析自闭环

特别鸣谢