Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sdproxy — 简单快速的 DNS 代理,具备并不简单的功能。专注于路由 DNS 转发、过滤和家长控制。 | Kitploit
工具/GitHubGitHub/cbuijs/sdproxy
防御工具加密/解密工具信息收集Web安全网络安全隐私保护实用工具与框架机器学习DNS 分析异常检测
GitHubcbuijs/sdproxy

sdproxy

6131798小时4分前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

简单快速的 DNS 代理,具备并不简单的功能。专注于路由 DNS 转发、过滤和家长控制。

查看仓库

sdproxy

一个让你真正掌控家庭网络的 DNS 代理。


简介

我曾作为顾问在“大厂”网络与安全“竞技场”里摸爬滚打多年。DNS 安全过去是、现在也是我的日常工作,同时也是我最爱折腾的业余爱好。因为我现在有了孩子,需要做一个负责任的家长,我便主动承担起为他们过滤这个凶险互联网的责任。于是我构建了 sdproxy(Simple DNS Proxy,简单 DNS 代理)。它(某种程度上)把企业级/大厂级的防护、方法和精度带到了家庭网络层面。

该代理用 Go 编写,可编译为适用于廉价路由器的精简二进制文件。没有云订阅,也没有月费。它支持各种 DNS 变体,并内置自适应准入控制以保持稳定。它就是为客厅打造的、精简(某种程度上)、凌厉、荷兰式工程精度的方案。只有你、一个可执行文件和一个 yaml 文件。

并且记住……问题总是出在 DNS 上!


注意: 本仓库中的 full_reference_config.yaml(也通过 sdproxy --example-config 嵌入到二进制文件中)始终比本 README 更新。如有疑问,请以那里为准。


DNS 是互联网的电话簿——你网络上的每台设备在连接任何地方之前都会先查询一个名称。

sdproxy 就位于其中间,运行在你的路由器上,让你决定接下来发生什么:缓存它、拦截它、将其路由到其他解析器、应用先进的机器学习安全模型,或对每个孩子强制执行时间限制。没有云订阅,没有月费,也没有会宕机的外部服务。

它用 Go 编写,可编译为单个二进制文件,并且足够精简,可以运行在廉价的家用路由器上(TP-Link、GL.iNet 或 NetGear 上的 OpenWrt,pfSense、OPNsense,或者只是一台普通的 Linux 机器)。

请参阅 KEY_ADVANTAGES.md 了解相较于替代方案的关键优势。


它的功能

支持各种 DNS 变体并自动升级

传统的 UDP/TCP(53 端口)、加密的 DNS-over-TLS(DoT)、DNS-over-HTTPS(DoH)以及 DNS-over-QUIC(DoQ)。

  • 动态 DoH3 升级: sdproxy 原生解析 Alt-Svc 头和 SVCB/HTTPS ALPN 参数,以即时将标准 DoH 流无缝升级为高性能的 HTTP/3(QUIC)连接。

加密客户端问候(ECH)与 DDR 自动发现

通过加密 TLS 服务器名称指示(SNI),保护你的浏览免受 ISP 深度包检测。

  • 入站 ECH: sdproxy 充当完整的 ECH 服务器,解密客户端问候,并通过 DDR(_dns.resolver.arpa SVCB/HTTPS)以及 /.well-known/origin-svcb / /.well-known/ech HTTPS 端点,原生向你的本地网络广播自己的密钥。
  • 出站 ECH 自动发现: 在与上游提供商通信时,sdproxy 会主动查询它们的 HTTPS/SVCB 记录(以及 L7 .well-known 回退),提取其 ECH 密钥,并完全自主地保护 TLS 握手。

机器学习 DGA 检测

一个原生的、零分配的 Logistic 回归机器学习推理引擎运行在热路径上。它提取香农熵、元音/辅音偏斜、尾部数字模式和辅音链,以即时检测并拦截僵尸网络、恶意软件和 C2 基础设施使用的算法生成域名(DGA)。

RFC 10023 _for-sale. 与停放域名检测

  • RFC 10023 _for-sale. 检测(server.for_sale): 使用 64 分片判定缓存、完整的父链缓存遍历和 SingleFlight 合并,探测 _for-sale.<qname> 和 _for-sale.<apex> 是否存在有效的 RFC 10023 TXT 记录(v=FORSALE1;)。支持 disabled、BLOCK、DROP、LOG 或任何标准 DNS RCODE。
  • 停放域名检测(server.parked): 通过主动探测和被动检查权威 NS、SOA、TXT、CNAME 和 A/AAAA 记录,检测停放域名、中间父域名和 eTLD+1 顶级域,以识别常见的域名停放和售后变现提供商(Sedo、Bodis、ParkingCrew、Above.com、Dan.com、Afternic、CashParking、HugeDomains、Squadhelp/Atom、Uniregistry、ParkLogic、RookMedia 等)。

数据外泄、隧道与信息窃取防御

  • 流量体积分析: 跟踪每个客户端或每个子网的 Alpha 平滑指数移动平均(EMA)字节传输量。检测通过 DNS 从网络流出的突发异常数据量,并在无锁惩罚箱(Penalty Box)中将该客户端黑洞化。
  • 子域名速率限制: 在可配置的时间窗口内跟踪每个 (client/subnet, apex domain) 查询的唯一子域名数量(可选 exempt_shared_hosting),以拦截慢速低量 DNS 隧道和信息窃取外泄,同时避免跨客户端的拒绝服务。

域名策略与伪造记录(rrs:)及正则表达式支持

  • 域名与记录类型策略: 通过内联配置、本地文件或远程 URL,针对特定 DNS 记录类型(rtype_policy)、域名后缀、IP/CIDR 或正则表达式(/pattern/)执行阻止、丢弃或返回自定义 RCODE。
  • 伪造记录(rrs:): 使用静态 IPv4/IPv6 地址或透明递归 CNAME 别名(例如强制启用安全搜索)覆盖全局或按组域名(精确匹配或 /pattern/ 正则表达式)。

企业级路由与共识验证

sdproxy 并非盲目转发查询;它会动态评估上游服务器。

  • 安全共识: 同时查询组内最多 max_secure_upstreams(默认 5)个健康服务器。深度检查规范 RRset 指纹(CNAME 链、最终 IP 端点、SVCB/HTTPS、DNSSEC 状态),支持 fastest、ordered 和 consolidate(合并应答集)偏好。在 strict 模式下,强制要求 100% 参与且应答等价;在 loose 模式下,使用健康响应者的多数意见。若上游不一致或返回被污染的 NULL-IP,则丢弃或阻止该响应。
  • 最快 EMA: 跟踪每个上游的纳秒级延迟。使用 Epsilon-Greedy 算法坚持使用最快的健康解析器,同时保留 5% 的查询用于随机探索,以发现正在恢复的网络路径。
  • SingleFlight 合并: 相同的并发缓存未命中查询被无缝合并为单次出站执行,消除惊群(Thundering Herd)峰值。

积极缓存

最近应答过?直接从缓存提供。sdproxy 使用 32 个加密种子内存分片,并可选支持跨重启的崩溃安全磁盘持久化(包括路由配置指纹)。如果某条记录在仍然热门时过期,sdproxy 会触发后台预取,让你的设备永远不会察觉缓存未命中。它完全支持 RFC 8767 陈旧服务、严格的 DNSSEC RRSIG 过期边界以及 serve_stale_infinite 故障回退。

了解你的本地网络

将其指向你的 DHCP 租约文件和 /etc/hosts,它就能应答本地名称查询(你的 NAS、打印机、树莓派),而无需打扰上游解析器或将局域网查询泄露到上游。支持 dnsmasq、ISC DHCP、Kea 和 odhcpd。

为不同设备路由不同策略

将设备身份映射到不同的上游解析器组或家长控制配置文件。

  • 标识符: 物理 ARP MAC 精确匹配、MAC 通配符掩码、EDNS0 Option 65001 MAC(mac:<mac> 和 mac:<glob>)、IP / CIDR、EDNS0 客户端子网(ecs:<ip> 和 ecs:<cidr>)、ASN(ASxxxx)、国家代码(CC:XX,通过 IPinfo)、客户端名称、TLS SNI(sni:)、HTTP DoH 路径(path:)以及监听端口(port:)。
  • 可信转发器边界(server.trusted_proxies): 将客户端提供的 EDNS0 Option 65001(mac:)和 EDNS0 客户端子网(ecs:)身份断言限制为授权的本地转发器(例如 dnsmasq --add-mac / --add-subnet,默认回环地址 127.0.0.0/8 和 ::1/128)。
  • 复合交集规则: 使用 force-and: true 组合多个标识符(例如子网 AND 监听端口)。
  • 即时黑洞与绕过: 将显式 DNS 返回码(rcode: REFUSED、NXDOMAIN、BLOCK、DROP)或 bypass_local / bypass_global 标志直接绑定到路由规则。

家长控制 - 按孩子、按类别

为每个孩子设置一个配置文件,分配他们的设备,并配置:

  • 时间表 - 上学日和周末使用不同的时段。
  • 时间预算 - 累积的逐分钟跟踪(group 或按 device)。支持 ALLOW、BLOCK、FREE、LOG、UNLIMITED 以及临时的 UNTRIGGER 窗口覆盖。
  • 类别拦截 - 从公共仓库或本地文件动态加载(域名、Hosts、AdBlock/uBlock 以及 IP/CIDR 列表),并带有预编译的二进制磁盘缓存。
  • 状态跟踪: 时间跟踪通过 DNS 心跳 TTL 运行,并快照到磁盘以在重启后保留。

Web 管理面板

可选的、受密码保护的基于浏览器的 UI(HTTP/HTTPS,或在 DoH 端口 443 上多路复用),用于实时操作。

  • 通过可选倒计时器,即时将设备组切换为 ALLOW、BLOCK、FREE 或 LOG。
  • 已知客户端与拦截: 查看发现的 LAN 和 EDNS0-MAC 客户端(IP、MAC、DHCP 名称、随机 MAC 徽章以及实时 Last Seen 时间戳),并一键拦截/解除拦截单个设备或批量拦截所有未知/隐私 MAC 客户端。
  • 自定义规则与缓存检查器: 直接从浏览器管理实时的按组或全局域名允许/拦截规则,并检查/搜索实时缓存的 DNS 记录。
  • 查看实时流式查询日志(SSE)和 24 小时环形缓冲区性能图表。

防御 DNS 重绑定与搜索域泄漏

丢弃任何包含私有或 bogon IP(RFC1918、环回、链路本地、ULA)的上游响应,以防止服务端请求伪造(SSRF)和浏览器枢轴攻击,并拦截会向最近被拦截的查询追加本地搜索域的操作系统存根解析器。


快速开始

git clone https://github.com/cbuijs/sdproxy
cd sdproxy
go build -o sdproxy .
./sdproxy --config config.yaml

需要 Go 1.26+。无需 CGo。

命令行选项

  -c, --config <file>    Path to YAML configuration file (default: config.yaml)
  -t, --test             Test the configuration file for syntax/logic errors and exit
  -C, --clean-config     Clean the configuration file (strip comments and default values) to stdout and exit
  -U, --update-config    Update/complement the configuration file with all comments and missing options to stdout and exit
  -E, --example-config   Print the full documented default/reference configuration to stdout and exit
  -f, --force-refresh    Force fetching/loading fresh copies of all external lists and databases on startup
  -4, --ipv4             Limit resource loading and listeners to IPv4 only
  -6, --ipv6             Limit resource loading and listeners to IPv6 only
  -v, --version          Show current sdproxy version and exit
  -h, --help             Show this help message

最小配置

server:
  listen_udp: ["0.0.0.0:53"]

cache:
  enabled: true
  size: 1024

upstreams:
  default:
    - "udp://1.1.1.1:53"
    - "udp://9.9.9.9:53"

为你的路由器构建

# OpenWrt MIPS (TP-Link, Netgear, etc.)
GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags="-s -w" -o sdproxy .

# OpenWrt ARM (Linksys, Asus, etc.)
GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="-s -w" -o sdproxy .

# OpenWrt x86_64
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o sdproxy .

-s -w 标志会剥离调试符号——可节省 30-40% 的二进制体积,这在小型闪存存储上很重要。


配置

所有内容都放在一个 YAML 文件中。本仓库中的 full_reference_config.yaml 以内联方式记录了每一个选项——该文件就是手册。你也可以随时使用 ./sdproxy -E > config.yaml 生成它,使用 ./sdproxy -C -c config.yaml 剥离默认值,或使用 ./sdproxy -U -c config.yaml 用新选项和注释升级现有配置文件。


日志输出

2026/05/01 14:23:01 [DNS] [DoH3+ECH] 192.168.1.42 (alice-iphone) -> google.com. A | ROUTE: kids (CLIENT-NAME) | UPSTREAM: [ECH] cloudflare-dns.com (1.1.1.1) (kids) | OK | NOERROR
2026/05/01 14:23:02 [DNS] [UDP] 192.168.1.42 (alice-iphone) -> google.com. A | ROUTE: kids (CLIENT-NAME) | CACHE HIT | NOERROR
2026/05/01 14:23:05 [DNS] [DoQ] 192.168.1.10 -> nas.lan. A | ROUTE: default (DEFAULT) | LOCAL | NOERROR
2026/05/01 14:23:10 [DNS] [UDP] 192.168.1.42 (alice-iphone) -> dga-domain-xzq1.com. A | DGA INTERCEPT (Score: 98.2) | NXDOMAIN
2026/05/01 14:23:12 [DNS] [UDP] 192.168.1.42 (alice-iphone) -> parked-example.com. A | FOR-SALE BLOCK (_for-sale.parked-example.com TXT "v=FORSALE1;") | NOERROR (NULL-IP)
2026/05/01 14:23:15 [DNS] [UDP] 192.168.1.42 (alice-iphone) -> sedo-domain.com. A | PARKED BLOCK (sedo-domain.com: NS Sedo (ns1.sedoparking.com)) | NOERROR (NULL-IP)
下载工具