所以,这里有一个有趣的用例。我正在开发一个 LetsEncrypt 项目,其中一个自托管名称服务器将(通过 CNAME)响应 ACME 挑战的 DNS 请求。这里的目的是创建一个包含官方 Certbot、alpine+bind 的 docker 容器,并使接受 DNS 挑战变得轻松快捷。
我对 bind 的不熟悉被证明是一个问题。以下是我在根 DNS 服务器(nsone)上完全正常运行的内容:
- ns1.nsone.com/ns2/ns3/ns4 的域
example.com
DNS 服务器(例如) acme-challenge.example.com
有一个 NS 记录acme-dns.example.com
(这会重定向任何查找请求)_acme-challenge.example.com
是指向的 CNAME_acme-challenge.acme-dns.example.com
(因此当 LetsEncrypt 查找通配符证书的 _acme-challenge TXT 记录时,他们会从自托管 DNS 服务器收到响应acme-dns.example.com
这一切都很棒,使用 Python 的 dnslib 进行的测试表明它正在运行。但是,我的问题是 BIND 设置。
我在用着https://github.com/resyst-it/docker-bind9,这只是高山结构的基本绑定。以下是我的配置:
命名配置文件
options {
directory "/var/bind";
listen-on { 127.0.0.1; };
listen-on-v6 { none; };
allow-transfer {
none;
};
pid-file "/var/run/named/named.pid";
allow-recursion { none; };
recursion no;
};
zone "acme-challenge.example.com" IN {
type master;
file "/zonefile.txt";
};
区域文件
; acme-challenge.example.com
$TTL 60
acme-challenge.example.com. IN SOA a.root-servers.net. [email protected]. (
2018040201 ; Serial
3H ; refresh after 3 hours
1H ; retry after 1 hour
1W ; expire after 1 week
60) ; minimum TTL of 1 day
; Name Server
IN NS acme-dns.example.com.
acme-challenge.example.com. IN A 1.1.1.1
_acme-challenge IN TXT testA
_acme-challenge IN TXT testB
; EOF
我实际上只需要一组配置文件,它将返回一条记录,任何记录,即 TXT 并以两个答案响应。
有人可以帮忙吗?