isc-dhcp-server + BIND9 + Unbound + dnscrypt 和 DDNS 不起作用

isc-dhcp-server + BIND9 + Unbound + dnscrypt 和 DDNS 不起作用

原来的

我在运行 Ubuntu 服务器的家用路由器上设置了复杂的 DNS。我的目标是能够

  1. 查询我本地 ISP 的 DNS,获取我关心的地理位置敏感查询
  2. dnscrypt-proxy对于大多数查询。对于某些域名(我知道的几个),很多我不知道的域名,以及除特定域名之外的域名,我的 ISP 会用虚假地址毒害查询,使流量变成黑洞。我希望这是默认的 DNS 查询服务器
  3. 尽量减少互联网 DNS 查询。我的互联网连接不稳定,在一天中的某些时间,我在国外进行 DNS 查询成功的几率只有 50/50
  4. 拥有我自己的内部域,主要用于反向查找。

为了实现这些目标,我必须实施的解决方案是,

  1. unbound作为我的 LAN 的主 DNS 服务器,用于缓存查找、积极保留该缓存,并在缓存未命中时将地址转发到相关的 DNS 服务器
  2. dnscrypt-proxy在未绑定127.0.2.1:53forward-addr"."
  3. bind192.168.1.1:40仅对我的本地域具有权威性
  4. isc-dhcp-server用于分配 IP 地址并插入正向和反向查找。

我已经实现了大部分目标。所以不愿意做出重大改变除了用于对我的 LAN 上的非静态主机进行正向/反向查找。

我怀疑是isc-dhcp-server正在向 发送 DDNS 更新,unbound但不知道该如何处理。即使我希望客户端的 DNS 服务器是,我该如何请求isc-dhcp-server将其发送到,或者启用以了解如何将 DDNS 更新转发到?192.168.1.1:40bind192.168.1.1:53unboundunboundbind

错误消息示例

Sep 29 08:01:10 ubuntu dhcpd[7057]: DHCPREQUEST for 192.168.1.101 from 28:18:78:7c:d5:a1 (Xbox-SystemOS) via enp2s0
Sep 29 08:01:10 ubuntu dhcpd[7057]: DHCPACK on 192.168.1.101 to 28:18:78:7c:d5:a1 (Xbox-SystemOS) via enp2s0
Sep 29 08:01:22 ubuntu dhcpd[7057]: Unable to add forward map from Xbox-SystemOS.mydomain.ddns.net. to 192.168.1.101: timed out

相关行dhcpd.conf

ddns-updates on;
ddns-update-style interim;
key rndc-key { algorithm hmac-md5; secret MIND_YOUR_BUSINESS; }

subnet ...... {
    ....
    option domain-name-servers 192.168.1.1;
    ...
    ddns-domainname "mydomain.ddns.net.";
    ddns-rev-domainname "in-addr.arpa.";
}

相关内容来自/etc/bind/named.conf.local

zone "mydomain.ddns.net" {
        type master;
        file "/etc/bind/zones/db.mydomain.ddns.net"; # Zone file path
       allow-update { key rndc-key; };               # allow for dynamic updates
};

zone "168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/zones/db.192.168";           # 192.168.0.0/16 subnet
        allow-update { key rndc-key; };              # allow for dynamic updates
};

更新 1

经过一番研究,dhcpd.conf我得出结论,我无法在其中指定绑定服务器的端口号。但是有一个名为的神奇选项ddns-local-address4,它允许我为 DDNS 指定与 不同的服务器 IP 地址domain-name-server option

我将 bind 改为 listen to 127.0.0.1,这基本上可以正常工作(至少 bind 现在正在接收更新)。但是它在权限方面遇到了问题。

Sep 29 19:21:40 ubuntu named[31415]: client 127.0.0.1#2824/key rndc-key: signer "rndc-key" approved
Sep 29 19:21:40 ubuntu named[31415]: client 127.0.0.1#2824/key rndc-key: updating zone 'mydomain.ddns.net/IN': adding an RR at 'iPhone.mydomain.ddns.net' A 192.168.1.104
Sep 29 19:21:40 ubuntu named[31415]: client 127.0.0.1#2824/key rndc-key: updating zone 'mydomain.ddns.net/IN': adding an RR at 'iPhone.mydomain.ddns.net' TXT "316a52934f2adcaf4c95004e870a4c0f70"
Sep 29 19:21:40 ubuntu named[31415]: /etc/bind/zones/db.mydomain.ddns.net.jnl: open: permission denied
Sep 29 19:21:40 ubuntu named[31415]: client 127.0.0.1#2824/key rndc-key: updating zone 'mydomain.ddns.net/IN': error: journal open failed: unexpected error
Sep 29 19:21:40 ubuntu kernel: [212079.779512] audit: type=1400 audit(1475148100.710:25): apparmor="DENIED" operation="open" profile="/usr/sbin/named" name="/etc/bind/zones/db.mydomain.ddns.net.jnl" pid=31419 comm="named" requested_mask="w" denied_mask="w" fsuid=110 ouid=0

我尽了最大努力,试图授予 bind 足够的权限来更新该文件,但还是不行。这是怎么回事?

ps aux | grep named
bind     31415  0.0  0.2 429564 19572 ?        Ssl  19:10   0:00 /usr/sbin/named -f -u bind

ls -la /etc/bind/zones
total 16
drwxrwsr-x 2 root bind 4096 Sep 29 19:21 .
drwxr-sr-x 3 root bind 4096 Sep 29 19:07 ..
-rw-r--r-- 1 root bind  340 Sep 28 08:01 db.192.168
-rw-r--r-- 1 root bind  514 Sep 27 07:40 db.mydomain.ddns.net
-rw-rw-r-- 1 bind bind    0 Sep 29 19:21 db.mydomain.ddns.net.jnl

更新 2

我修改了我的 apparmor 配置文件,并且不再收到权限错误。

当我bind直接在 127.0.0.1 上查询时,一切正常。

但是,当我通过 查询它时ubuntu,它并没有正确地将查找转发到bind

我现在做错了什么?

unbound.conf

    local-zone: "1.168.192.in-addr.arpa." nodefault
    local-zone:   "168.192.in-addr.arpa." nodefault

    stub-zone:
            name:   "168.192.inaddr.arpa."
            stub-addr: 127.0.0.1

    stub-zone:
            name: "1.168.192.inaddr.arpa."
            stub-addr: 127.0.0.1

    stub-zone:
            name: "mydomain.ddns.net."
            stub-addr: 127.0.0.1

答案1

中有一个附加文件,/etc/unbound/unbound.d/它干扰了 的解析mydomain.ddns.net.。删除该文件后,问题便解决了。

最终设置

  1. dnscrypt-proxy正在收听127.0.2.1
  2. bind正在收听127.0.0.1
  3. unbound监听192.168.1.1,转发mydomain.ddns.netbind使用stub-zone问题中的语句,默认转发到dnscrypt-proxy
  4. isc-server-dhcpbind使用ddns*选项进行更新dhcpd.conf

相关内容