web-dev-qa-db-ja.com

isc-dhcp-server + BIND9 + Unbound + dnscrypt&DDNSが機能しない

オリジナル

Ubuntuサーバーを実行しているホームルーターに複雑なDNSセットアップがあります。私の目的は、次のことができるようにすることです。

  1. ローカルISPのDNSにクエリを実行して、気になる地理的位置に依存するルックアップを探します
  2. ルックアップの大部分は_dnscrypt-proxy_。特定のドメイン(私が知っているいくつか)、私が知らない多くのドメイン、および特定のドメイン以外の場合、私のISPは、ブラックホールトラフィックへの誤ったアドレスでルックアップをポイズニングします。これをデフォルトのDNSルックアップサーバーにしたいと思います
  3. インターネットDNSルックアップを最小限に抑えます。私のインターネット接続は信頼できず、日中の特定の時間に、国外でのDNSルックアップが成功する可能性が50/50と低くなっています。
  4. 主に逆引き参照が機能するように、独自の内部ドメインを用意します。

これらの目的を達成するために私が実装しなければならなかった解決策は、

  1. ルックアップをキャッシュし、そのキャッシュを積極的に保持し、キャッシュミスのためにアドレスを関連するDNSサーバーに転送するためのLANのプライマリDNSサーバーとしてのunbound
  2. _dnscrypt-proxy_ on _127.0.2.1:53_ on _forward-addr_ for _"."_ in unbound
  3. _192.168.1.1:40_のbindは私のローカルドメインに対してのみ権限があります
  4. _isc-dhcp-server_ IPアドレスを配布し、順方向および逆方向のルックアップを挿入します。

私は自分の目的の大部分をなんとか達成することができました。だから、私のLAN上の非静的ホストの順方向/逆方向のルックアップがあることを除いて例外を大幅に変更することをためらっています。

私の疑いは、_isc-dhcp-server_がDDNS更新をunboundに送信していて、それをどうするかわからないということです。クライアントのDNSサーバーを_isc-dhcp-server_、bindにするか、unboundを有効にしてDDNS更新を転送する方法を知っていても、_192.168.1.1:40_に_192.168.1.1:53_、unboundに送信するように依頼するにはどうすればよいですかbind

エラーメッセージの例

_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_という名前の魔法のオプションがあります。これにより、_domain-name-server option_とは異なるサーバーIPアドレスをDDNSに指定できます。

_127.0.0.1_をリッスンするようにバインドを変更しましたが、これはほぼ機能します(少なくともバインドは現在更新を受信して​​います)。ただし、権限が低下しています。

_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
_

ただし、バインドにそのファイルを更新するための十分なアクセス許可を与えるための最善の試みは機能していません。何が得られますか?

_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プロファイルを変更しましたが、権限エラーが発生しなくなりました。

127.0.0.1で直接bindにクエリを実行すると、すべてが機能します。

ただし、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
_
3
M Afifi

/etc/unbound/unbound.d/に、mydomain.ddns.net.の解決を妨げる追加のファイルがありました。ファイルが削除されると、これで問題が解決しました。

最終的なセットアップ

  1. dnscrypt-proxy127.0.2.1をリッスンしています。
  2. bind127.0.0.1をリッスンしています。
  3. unbound192.168.1.1をリッスンし、質問のmydomain.ddns.netステートメントを使用してstub-zonebindに転送し、デフォルトでdnscrypt-proxyに転送します。
  4. isc-server-dhcpddns*dhcpd.confオプションを使用してbindを更新します
0
M Afifi