Code Monkey home page Code Monkey logo

ts-dns's Introduction

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域名解析自闭环

特别鸣谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.