使用 iOS 快捷指令管理 SmartDNS
之前网络布局使用了 SmartDNS 作为 DNS 服务,并承担分流能力。但是 smartDNS 并不提供管理界面,每次添加新的域名都需要手动修改配置文件,十分麻烦。于是我写了一个小服务,并通过 iOS 快捷指令来进行管理。
出发点
在蹲坑的某天,突然发现有个网站打不开,怀疑域名是被墙了,但如果想把这个域名加入到翻墙列表里,要么修改 smartDNS 的配置,加到 GFWList 里,要么修改 clash 配置,加到 rule 里。但这两个方式都得打开电脑,登录到 gateway 服务器上修改。这种方式实在是太不 geek 了。
解决方案
1 | server-name gateway |
根据 smartDNS 配置,可以看到,smartDNS 的配置文件分为三部分,include-conf
、domain-set
、upstream
。其中include-conf
是引入其他配置文件,domain-set
是定义域名集合,upstream
是定义上游 DNS 服务器。 include-conf
都是使用的共享配置,只需要定期更新就可以了。
这样只需要定义upstream
和domain-set
,就可以很重新生成smartdns.conf
,然后重启 smartDNS 服务,就可以实现添加域名的功能了。
为了实现简单和部署方便,使用golang
进行开发,gin
暴露 http 接口,gorm
+ sqlite3
存储数据,template
输出配置文件,coreos/go-systemd
重新加载服务。简单组合一下,一个简单的 smartDNS 的管理服务就完成了。
操作界面
写完服务接口,突然不像写前端页面,于是就想到了 iOS 快捷指令,可以通过快捷指令来调用接口,实现添加域名的功能。于是就有了下面的操作界面。
总结
虽然快捷指令受限与 API 操作不是非常灵活,但是对于简单的操作还是非常方便的。而且可以通过快捷指令来调用接口,实现一些简单的功能,也是非常有意思的。