实现了一个简单的通配 DNS 服务
source link: https://www.dosk.win/2022/08/08/shi-xian-le-yi-ge-jian-chan-de-tong-pei-dns-fu-wu/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
实现了一个简单的通配 DNS 服务
2022/08/08
地址在这,先放上来 infinity-server/dosk_dns
不过先说好,就是个玩具,有其他需求或
bug
自己酌情修改或者提pr
给我
简单来说,就是一个兼容 sslip.io 和 nip.io 的 dns
服务,这俩东西还是很有用的,但是一方面申请 ssl
证书比较局限,二来也是自己比较感兴趣可以学习学习,就手撕了一个实现
-
无非就是根据域名信息去解出来
IPv4/IPv6
的地址并返回 -
有个坑,双栈一些场景会优先走
IPv6(AAAA)
但是可能地址只能解出来IPv4
比如127-0-0-1.xxx.yyy
,这样就需要返回SOA
记录,那么客户端就会走IPv4(A)
记录 -
CAA
记录很重要,因为这是申请证书的时候一些CA
回去验证的,代码里我就写死了几个
-
找个公网服务器搭建起来这玩意(或者找别人/朋友搭好的,因为需要得到授权信息),
npm install && node dns.js
,输出的选项里的东西都是可以自己改的(比如--dnsAddress '127.0.0.1'
就能改监听的地址),反正记住你的auth
和token
两个选项后面要用,这里假定服务器为dns.yourdomain.com
,这个就是你自己搭建的dns
服务器啦以后 -
这步才是正式开始,比如你有个域名(子域名也行,反正都行,用做这个就不能干别的了)
wild.yourdomain.com
,更改wild.yourdomain.com
的ns
记录到dns.yourdomain.com
-
现在就可以用诸如类似
127-0-0-1.wild.yourdomain.com
这样用了,如果你仅仅是想到这步那就可以结束了,如果想申请个证书请往下看 -
把代码库里的
dosk_dns.sh
扔到你的acme.sh
安装目录里(~/.acme.sh/dosk_dns.sh
),然后像其他dns
一样配置几个环境变量:
# 配置你的 DNS 服务器地址,注意结尾没有 /
export Dosk_Server='http://dns.yourdomain.com'
# 配置你的 token 和 auth
export Dosk_Auth=你的auth
export Dosk_Token=你的token
- 申请证书,加上
--dns dosk_dns
选项,其他选项你酌情自己更改:
acme.sh --issue --dns dosk_dns -d wild.yourdomain.com -d *.wild.yourdomain.com
- 没了,结束了
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK