Skip to content

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BUPT 2026春 计算机网络课程设计:DNS Relay

DNS Relay 是一个使用 C 实现的轻量级本地 DNS 中继。它优先按 hosts 规则在本地回答或拦截查询;未命中时转发给指定的上游 DNS,并缓存可复用的响应。项目支持 Windows 和 macOS。

小组成员

Liophis 的 GitHub 头像
Liophis
TeaSings 的 GitHub 头像
TeaSings
Gjt20051218 的 GitHub 头像
Gjt20051218

功能

  • 监听本机 UDP 53 端口,解析并校验 DNS 查询。
  • 从 hosts 文件提供 IPv4 A 和 IPv6 AAAA 本地应答,本地记录 TTL 为 300 秒。
  • 将 0.0.0.0 和 IPv6 全零地址配置为拦截规则,命中后返回 NXDOMAIN。
  • 域名匹配不区分大小写;同一域名可同时保存 A、AAAA 记录,后出现的同类型记录覆盖旧记录。
  • 将本地未命中的查询转发至上游 DNS,并通过独立 ID 映射把响应准确返回原客户端。
  • 自动清理超时的在途请求,转发失败时立即释放对应 ID。
  • 缓存带 Answer 的上游响应;按最小 TTL 过期,命中时更新剩余 TTL,并使用 LRU 控制缓存容量。
  • 提供错误、信息、调试三级彩色日志和启动信息。
  • 支持 Ctrl+C、SIGINT 和 SIGTERM 下的正常退出与资源清理。
  • 提供 hosts/DNS 报文自动测试,以及 ID 映射、缓存和 hosts 哈希性能评测。

hosts 文件

每行格式为 <IP> <域名>:

192.0.2.10 example.test
2001:db8::10 ipv6.example.test
0.0.0.0 ads.example.test
:: tracker.example.test

普通地址生成本地 A/AAAA 应答,全零地址返回 NXDOMAIN。空行、注释行和无效记录会被忽略。

构建与运行

绑定 UDP 53 端口通常需要管理员或 root 权限。

Windows

使用 MinGW:

mingw32-make
.\dnsrelay.exe -dd 8.8.8.8 dnsrelay.txt

使用 Visual Studio Developer Command Prompt 和 GNU Make:

make CC=cl
dnsrelay.exe -dd 8.8.8.8 dnsrelay.txt

macOS

make
sudo ./dnsrelay -dd 8.8.8.8 dnsrelay.txt

命令格式:

dnsrelay [-d|-dd] [上游 DNS IPv4 地址] [hosts 文件]

默认上游 DNS 为 202.106.0.20,默认 hosts 文件为 dnsrelay.txt。无调试参数时只输出错误;-d 输出运行信息;-dd 输出完整调试信息。

测试

# macOS
make test
make bench

# Windows MinGW
mingw32-make test
mingw32-make bench

test 覆盖 hosts 加载查询和 DNS 报文解析/构造;bench 运行 ID 映射、缓存和 hosts 哈希性能评测。需要监听 53 端口的完整联调步骤见 tests/manual_commands.md。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages