我想建立一个小型网络,其中中央 DHCP 服务器将 IPv4 地址出租给客户端。客户端已经设置了主机名,并应将其通告给中央 DNS 服务器,这样服务器和所有客户端都可以使用该主机名找到彼此。DNS 服务器将解析域“my.domain”的 LAN 地址,并指向所有其他域(互联网)的外部 DNS 服务器。
在我当前的设置中,我有两个盒子:10.0.100.1
是服务器(Ubuntu 22.04),其中托管 DHCP 和 DNS。10.0.100.2
配置为客户端(Fedora 35)(DHCP 在我的测试阶段发送这个固定 IP)。
这是客户端(10.0.100.2
)配置:
$ cat /etc/hostname
clienthost
$ cat /etc/systemd/network/20-wired.network
[Match]
Name=enp0s31f6
[Network]
LinkLocalAddressing=ipv4
DHCP=ipv4
SendHostname=true
[DHCPv4]
UseDomains=true
$ resolvectl
Global
Protocols: LLMNR=resolve -mDNS -DNSoverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (enp0s31f6)
Current Scopes: DNS LLMNR/IPv4
Protocols: +DefaultRoute +LLMNR -mDNS -DNSoverTLS DNSSEC=no/unsupported
Current DNS Server: 10.0.100.1
DNS Servers: 10.0.100.1
DNS Domain: my.domain
IP10.0.100.2
已正确分配。客户端可以使用其 IP、主机名或 FQDN ping 服务器 ( 10.0.100.1
)。我还可以在 tcpdump 中看到主机名已发送到 DHCP 服务器(选项 81 客户端 FQDN)。到目前为止一切顺利。
一旦初始设置开始工作,DHCP 服务器配置就应该更改,以便分配一定范围内的 IP。因此,将来我不会为客户端分配固定的 IP 地址。我将跳过此处显示 rndc 密钥文件。它们是相同的,并放置在配置的位置。服务器配置如下:
$ cat /etc/hostname
serverhost
$ cat /etc/systemd/network/20-wired.network
[Match]
Name=enp0s31f6
[Network]
LinkLocalAddressing=ipv4
Address=10.0.100.1/16
Gateway=10.0.1.1
DNS=10.0.100.1
[DHCPv4]
UseDomains=my.domain
$ cat /etc/default/isc-dhcp-server
INTERFACESv4="enp0s31f6"
$ cat /etc/dhcp/dhcpd.conf
include "/etc/dhcp/ddns-keys/my-domain.key";
default-lease-time 7200;
max-lease-time 28800;
ddns-updates on;
ddns-update-style standard;
ddns-domainname "my.domain.";
allow-unknown-clients;
authoritative;
zone my.domain. {
primary 10.0.100.1;
key ddns-mydomain;
}
zone 10.0.in-addr.arpa. {
primary 10.0.100.1;
key ddns-mydomain;
}
# only serve the single client box specifically during test phase
subnet 10.0.0.0 netmask 255.255.0.0 {}
host testhost {
hardware ethernet 00:00:00:00:00:00;
fixed-address 10.0.100.2;
option subnet-mask 255.255.0.0;
option routers 10.0.1.1;
option domain-name-servers 10.0.100.1;
option domain-name "my.domain";
filename "pxelinux.0";
}
$ cat /etc/bind/named.conf
include "/etc/bind/keys/my.domain.key";
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
$ cat /etc/bind/named.conf.options
acl "internal" {
127.0.0.1;
10.0.0.0/16;
};
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { internal; };
listen-on { 10.0.100.1; };
allow-transfer { none; };
allow-query { internal; };
allow-query-cache { internal; };
forwarders {
1.1.1.1;
};
listen-on-v6 { any; };
};
$ cat /etc/bind/named.conf.local
zone "my.domain" {
type master;
file "/etc/bind/zones/db.my.domain";
update-policy { grant ddns-mydomain name my.domain ANY; };
allow-transfer { none; };
};
zone "0.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.0.10";
update-policy { grant ddns-mydomain name my.domain ANY; };
allow-transfer { none; };
};
$ cat /etc/bind/zones/db.my.domain
$TTL 86400
@ IN SOA serverhost.my.domain. admin.my.domain. (
3 ; Serial
28800 ; Refresh
3600 ; Retry
28800 ; Expire
43200 ) ; Negative Cache TTL
;
; name servers - NS records
IN NS serverhost.my.domain.
; A records
serverhost.my.domain. IN A 10.0.100.1
$ cat /etc/bind/zones/db.10.0
$TTL 86400
@ IN SOA serverhost.my.domain. admin.my.domain. (
3 ; Serial
28800 ; Refresh
3600 ; Retry
28800 ; Expire
43200 ) ; Negative Cache TTL
;
; name servers - NS records
IN NS serverhost.my.domain.
; PTR records
100.1 IN PTR serverhost.my.domain. ; 10.0.100.1
我认为这些应该是所有相关配置。如果您还需要其他配置,请告诉我。
这里的问题是,10.0.100.1 (serverhost)
我只能clienthost
通过其 IP 进行ping 10.0.100.2
,而无法通过其主机名或 FQDN 进行 ping。不幸的是,我不知道从哪里开始调试以查看客户端主机名是否已发送到 DNS 服务器并注册。
可能还有一条不相关的附注:运行命令dhcp-list-lease
会server-host
返回一个空列表。日志显示了 DHCPACK,10.0.100.2
但它从未出现在此特定输出中(这本来很有趣,因为有一个“主机名”列)。
编辑:看来密钥可能还是很重要的。最初,我使用 手动创建了一个密钥rndc-confgen -a -b 512
,然后将该文件复制到/etc/dhcp/rndc-keys/
。目前,我使用 生成了一个新密钥,ddns-confgen -a -b 512
并将该密钥放在 和/etc/bind/keys/my.domain.key
中/etc/dhcp/ddns-keys/my.domain.key
(并更新了相应配置文件中的包含语句)。我仍然有 rndc 密钥,/etc/bind/rndc.key
正如日志所示,bind9 也会拾取该密钥。
编辑2:手动运行nsupdate
如下所示:
$ nsupdate -D -k /etc/bind/keys/my.domain.key
> update add clienthost.my.domain 7200 A 10.0.100.2
> send
[...]
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: REFUSED, id: 39064
;; flags: qr; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1
;; ZONE SECTION:
;my.domain. IN SOA
;; TSIG PSEUDOSECTION:
ddns-mydomain. 0 ANY TSIG hmac-sha256. 1652972427 300 32 4e/XXXXXXXXXXXXXXXXXXXXXXXX/bmg= 39064 NOERROR 0
在手动更新期间,日志显示
client @0x7f61d8004cb8 10.0.100.1#39791/key ddns-mydomain: updating zone 'my.domain/IN': update failed: rejected by secure update (REFUSED)