3 min read

DNSdist自定义域名DNS解析记录

这篇文章是之前发布的《基于DNSdist搭建动态的私有化DNS(DnsOverHttp(s))服务》的一些列延伸文章,继续阅读或参考下列操作之前,请确保你已经按照之前的文章介绍完成了相关的配置,否则此文中的配置可能并不适用你。

从刚开始了解和使用DNSdist作为你的私有DNS服务器一直到目前,最吸引我的功能无非就是自定义域名解析记录的功能,这个功能可以帮助我们在服务器上修改域名的DNS解析记录,实际中的应用场景比如帮助我们用于网络测试或在测试项目中使用自定义的域名而不用去注册,对于组织或企业,也可以基于这种方式做内部域名的解析。

a kitchen with a stove, sink and a window
Photo by Clay Banks / Unsplash

要实现自定义解析比较方便,因为DNSdist的配置文件是基于Lua语言的,并且它默认提供了这种支持环境,仅需修改你的配置文件,然后重启DNSdist服务即可。

这里我们尝试自定义 dnsdist.ps 这个域名,并将他的A记录指向一个内网IP地址 192.168.20.100,只需要在配置文件末尾添加下列行:

-- Add custom DNS record
addAction({"dnsdist.ps."}, SpoofAction("192.168.20.100"))

这种配置会使得所有的 dnsdist.ps的子域名和顶级域名都被解析到 192.168.20.100这个IP地址,如果你希望某个子域名解析到特定的IP地址,你就还需要添加一条单的配置地址。

执行下列命令重启服务

sudo systemctl restart dnsdist

然后使用本地电脑的CMD中的dig工具进行测试,查看域名解析:

查看记录可以发现已经解析成功。你可以继续采用这种方式来自定义你需要的DNS域名解析记录,对于上面的记录类型SpoofAction配置,DNSdist 还支持的一些其他的记录类型如下:

记录名称 使用方法 介绍
SpoofAction addAction({"example.com."}, SpoofAction("192.168.1.100")) 返回指定 IP 地址作为 A 记录的响应。
SpoofCNameAction addAction({"alias.com."}, SpoofCNameAction("example.com.")) 将请求重定向为 CNAME 记录,指向指定的域名。
NXDomainAction addAction({"nonexistent.com."}, NXDomainAction()) 返回 NXDOMAIN 响应,表示域名不存在。
NoAction addAction({"default.com."}, NoAction()) 不对请求进行处理,继续进行默认的解析流程。
DropAction addAction({"drop.com."}, DropAction()) 丢弃请求,不返回任何响应。
RefuseAction addAction({"refused.com."}, RefuseAction()) 返回 REFUSED 响应,表示服务器拒绝请求。
SendToAction addAction({"forward.com."}, SendToAction({"1.1.1.1"})) 将请求转发到指定的 DNS 服务器,以特定的方式进行解析。
MakeRulesetAction addAction({"ruleset.com."}, MakeRulesetAction("custom")) 创建和应用新的规则集,以更灵活地处理不同类型的请求。
DelayAction addAction({"delayed.com."}, DelayAction(2000)) 对请求进行延迟处理,可以用于测试和调试等目的。
Custom Lua 脚本动作 addAction({"custom.com."}, function() ... end) 使用 Lua 脚本定义更复杂的处理逻辑,以根据请求内容决定应对策略。

以上这些钩子足够让你实现复杂的域名查询逻辑和自定义解析逻辑,若还是无法满足你的需求,你可以参考官方文档获取更多基于Lua的自定义功能。