原来的
我在运行 Ubuntu 服务器的家用路由器上设置了复杂的 DNS。我的目标是能够
- 查询我本地 ISP 的 DNS,获取我关心的地理位置敏感查询
dnscrypt-proxy
对于大多数查询。对于某些域名(我知道的几个),很多我不知道的域名,以及除特定域名之外的域名,我的 ISP 会用虚假地址毒害查询,使流量变成黑洞。我希望这是默认的 DNS 查询服务器- 尽量减少互联网 DNS 查询。我的互联网连接不稳定,在一天中的某些时间,我在国外进行 DNS 查询成功的几率只有 50/50
- 拥有我自己的内部域,主要用于反向查找。
为了实现这些目标,我必须实施的解决方案是,
unbound
作为我的 LAN 的主 DNS 服务器,用于缓存查找、积极保留该缓存,并在缓存未命中时将地址转发到相关的 DNS 服务器dnscrypt-proxy
在未绑定127.0.2.1:53
的forward-addr
"."
bind
192.168.1.1:40
仅对我的本地域具有权威性isc-dhcp-server
用于分配 IP 地址并插入正向和反向查找。
我已经实现了大部分目标。所以不愿意做出重大改变除了用于对我的 LAN 上的非静态主机进行正向/反向查找。
我怀疑是isc-dhcp-server
正在向 发送 DDNS 更新,unbound
但不知道该如何处理。即使我希望客户端的 DNS 服务器是,我该如何请求isc-dhcp-server
将其发送到,或者启用以了解如何将 DDNS 更新转发到?192.168.1.1:40
bind
192.168.1.1:53
unbound
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
,它允许我为 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.
。删除该文件后,问题便解决了。
最终设置
dnscrypt-proxy
正在收听127.0.2.1
。bind
正在收听127.0.0.1
。unbound
监听192.168.1.1
,转发mydomain.ddns.net
到bind
使用stub-zone
问题中的语句,默认转发到dnscrypt-proxy
。isc-server-dhcp
bind
使用ddns*
选项进行更新dhcpd.conf