BIND:使用 TXT 记录为子域名设置名称服务器

BIND:使用 TXT 记录为子域名设置名称服务器

所以,这里有一个有趣的用例。我正在开发一个 LetsEncrypt 项目,其中一个自托管名称服务器将(通过 CNAME)响应 ACME 挑战的 DNS 请求。这里的目的是创建一个包含官方 Certbot、alpine+bind 的 docker 容器,并使接受 DNS 挑战变得轻松快捷。

我对 bind 的不熟悉被证明是一个问题。以下是我在根 DNS 服务器(nsone)上完全正常运行的内容:

  • ns1.nsone.com/ns2/ns3/ns4 的域example.comDNS 服务器(例如)
  • 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 并以两个答案响应。

有人可以帮忙吗?

相关内容