6

实现了一个简单的通配 DNS 服务

 2 years ago
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.
neoserver,ios ssh client

实现了一个简单的通配 DNS 服务

2022/08/08

code

地址在这,先放上来 infinity-server/dosk_dns

不过先说好,就是个玩具,有其他需求或 bug 自己酌情修改或者提 pr 给我

简单来说,就是一个兼容 sslip.ionip.iodns 服务,这俩东西还是很有用的,但是一方面申请 ssl 证书比较局限,二来也是自己比较感兴趣可以学习学习,就手撕了一个实现

  • 无非就是根据域名信息去解出来 IPv4/IPv6 的地址并返回

  • 有个坑,双栈一些场景会优先走 IPv6(AAAA) 但是可能地址只能解出来 IPv4 比如 127-0-0-1.xxx.yyy,这样就需要返回 SOA 记录,那么客户端就会走 IPv4(A) 记录

  • CAA 记录很重要,因为这是申请证书的时候一些 CA 回去验证的,代码里我就写死了几个

  1. 找个公网服务器搭建起来这玩意(或者找别人/朋友搭好的,因为需要得到授权信息),npm install && node dns.js,输出的选项里的东西都是可以自己改的(比如 --dnsAddress '127.0.0.1' 就能改监听的地址),反正记住你的 authtoken 两个选项后面要用,这里假定服务器为 dns.yourdomain.com,这个就是你自己搭建的 dns 服务器啦以后

  2. 这步才是正式开始,比如你有个域名(子域名也行,反正都行,用做这个就不能干别的了) wild.yourdomain.com,更改 wild.yourdomain.comns 记录到 dns.yourdomain.com

  3. 现在就可以用诸如类似 127-0-0-1.wild.yourdomain.com 这样用了,如果你仅仅是想到这步那就可以结束了,如果想申请个证书请往下看

  4. 把代码库里的 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
  1. 申请证书,加上 --dns dosk_dns 选项,其他选项你酌情自己更改:
acme.sh --issue --dns dosk_dns -d wild.yourdomain.com -d *.wild.yourdomain.com
  1. 没了,结束了

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK