wolf-joe / ts-dns

Telescope DNS,灵活快速的DNS分组转发器
MIT License
316 stars 30 forks source link
dns dns-over-https dns-over-tls forwarder gfwlist

Telescope DNS

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

灵活快速的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"
  2. 选择ping值最低的IPv4地址(启用时建议以root权限运行本程序)

    # ...
    [groups.clean]
    dns = ["223.5.5.5", "114.114.114.114"]
    fastest_v4 = true
    # ...
  3. 指定hosts文件和自定义hosts

    # ...
    hosts_files = ["adaway.txt"]
    [hosts]
    "www.example.com" = "1.1.1.1"
    # ...
  4. 使用socks5代理转发DNS请求

    # ...
    [groups.dirty]
    socks5 = "127.0.0.1:1080"
    # ...
  5. 转发至上游DNS时默认附带指定ECS信息(暂不支持DOH)

    # ...
    [groups.clean]
    ecs = "1.2.4.0/24"
    # ...
  6. 自定义域名分组

    # ...
    [groups.work]
    dns = ["10.1.1.1"]
    rules = ["company.com"]
    # ...
  7. 动态添加IPSet记录(使用前请阅读ts-dns.full.toml对应说明)

    # ...
    [groups.dirty]
    ipset = "blocked"
    ipset_ttl = 86400
    # ...

未来规划

特别鸣谢