我一直在关注 DNS-SD 的官方文档设置 Bonjour 名称服务器。即广域 DNS 服务器。这些说明似乎相当陈旧,因为其中提到的一些内容已不复存在(例如dnsextd
在 macOS 上,它似乎已并入bind9任何状况之下)。
我实际上是在 Linux 安装(Raspbian)上设置这个 DNS 服务器,根据该页面的说法,这应该是可行的。
您还可以使用 Linux、Solaris 或任何其他可以运行 BIND 名称服务器的 Unix 风格的操作系统。
以下是我在服务器系统上的相关配置文件。
/etc/bind/named.conf.options
options {
directory "/var/cache/bind";
forwarders {
192.168.0.1;
fdd4:12f8:9ad3:0:8272:15ff:fe97:6678;
};
dnssec-lookaside auto;
listen-on-v6 { any; };
}
/etc/bind/named.conf.local
zone "lan." IN {
type master;
file "lan.zone";
};
zone "bonjour.lan." IN {
type master;
file "bonjour.lan.zone";
allow-update { any; };
};
/var/cache/bind/lan.zone
@ IN SOA rpi.lan. hostmaster.lan. (
1 ; serial
8H ; refresh
4H ; retry
4W ; expire
1D ; minimum
)
@ IN NS rpi.lan.
@ IN MX 10 rpi.lan.
localhost IN A 127.0.0.1
router IN A 192.168.0.1
rpi IN A 192.168.0.10
/var/cache/bind/bonjour.lan.zone
@ IN SOA rpi.lan. hostmaster.lan. (
1 ; serial
3H ; refresh
1H ; retry
1W ; expire
1M ; minimum
)
@ IN NS rpi.lan.
_dns-update._udp IN SRV 0 0 53 rpi.lan.
b._dns-sd._udp IN PTR @
lb._dns-sd._udp IN PTR @
r._dns-sd._udp IN PTR @
但是,此设置无法获取通过 Bonjour 在网络上通告的任何设备。运行 即可看到这一点dig bonjour.lan
。
; <<>> DiG 9.18.12 <<>> bonjour.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41841
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: ebefdba02287f4bb7687ffc663fa9167695632eedfc0a265 (good)
;; QUESTION SECTION:
;bonjour.lan. IN A
;; AUTHORITY SECTION:
bonjour.lan. 60 IN SOA rpi.lan. hostmaster.lan. 3 10800 3600 604800 60
;; Query time: 79 msec
;; SERVER: 192.168.0.10#53(192.168.0.10) (UDP)
;; WHEN: Sat Feb 25 22:53:27 GMT 2023
;; MSG SIZE rcvd: 129
如能得到关于如何实现此功能的任何建议我将非常感激。
答案1
服务器永远不会自己“拾取”任何东西;它不应该这样做。广域 DNS-SD 的工作原理是客户使用 DNS“UPDATE”命令在服务器上明确注册自己。
仅“Bonjour”支持此功能,即 macOS 使用的特定 DNS-SD 实现(又名 mDNSResponder;有时安装在 Windows 上)。其控制面板允许指定域,甚至可选的 TSIG-HMAC 更新密钥。Linux 上的 Avahi 支持浏览广域 DNS-SD 域,但不支持更新它们。
据我所知,没有其他 DNS-SD 实现支持广域 DNS-SD;它们纯粹是 mDNS,只处理域local
。(各种支持 mDNS 的设备和嵌入式系统没有理由支持它,也有理由不支持。)