管理网络基础架构服务
管理网络基础设施服务的指南
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
流程
登录到 Jira 网站。
如果您还没有帐户,请创建一个。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 设置和配置 BIND DNS 服务器 复制链接链接已复制到粘贴板!
要管理域名系统(DNS)服务,请配置 BIND DNS 服务器。BIND 完全符合互联网工程任务组(IETF) DNS 标准和草案标准。BIND 充当本地网络的缓存服务器,也可以作为次要服务器,以确保区域的高可用性。
1.1. 将 BIND 配置为缓存 DNS 服务器 复制链接链接已复制到粘贴板!
要从其缓存中解析和缓存成功且失败的查找并回答对相同记录的请求,请将 BIND 配置为缓存 DNS 服务器。这可充当区域的权威 DNS 服务器,并提高 DNS 查找速度。
先决条件
- 您有管理特权。
- 服务器的 IP 地址是静态的。
流程
安装
bind和bind-utils软件包:# dnf install bind bind-utils如果要在 change-root 环境中运行 BIND,请安装
bind-chroot软件包:# dnf install bind-chroot请注意,在 SELinux 处于
enforcing模式(默认设置)的主机上运行 BIND 更为安全。编辑
/etc/named.conf文件,并在options语句中进行以下更改:更新
listen-on和listen-on-v6语句,以指定 BIND 应该侦听的 IPv4 和 IPv6 接口:listen-on port 53 { 127.0.0.1; 192.0.2.1; }; listen-on-v6 port 53 { ::1; 2001:db8:1::1; };更新
allow-query语句,以配置哪些 IP 地址和范围客户端可以查询此 DNS 服务器:allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; };添加
allow-recursion语句,以定义 BIND 接受递归查询的 IP 地址和范围:allow-recursion { localhost; 192.0.2.0/24; 2001:db8:1::/64; };警告不要在服务器的公共 IP 地址中递归。否则,服务器可能会成为大规模 DNS 扩大攻击的一部分。
默认情况下,BIND 通过将从根服务器递归查询到权威 DNS 服务器来解析查询。但是,您可以将 BIND 配置为将查询转发到其他 DNS 服务器,如您的供应商之一。在这种情况下,添加一个带有 BIND 应该转发查询的 DNS 服务器的 IP 地址列表的
forwarders语句:forwarders { 198.51.100.1; 203.0.113.5; };作为回退行为,如果转发器服务器没有响应,BIND 会以递归方式解析查询。要禁用此行为,请添加
forward only;语句。
验证
/etc/named.conf文件的语法:# named-checkconf如果命令没有显示输出,则语法为正确的。
更新
firewalld规则,以允许传入的 DNS 流量:# firewall-cmd --permanent --add-service=dns # firewall-cmd --reload启动并启用 BIND:
# systemctl enable --now named如果要在 change-root 环境中运行 BIND,请使用
systemctl enable --now named-chroot命令启用并启动该服务。
验证
使用新设置 DNS 服务器解析域:
# dig @localhost www.example.org... __www.example.org.__ __86400__ IN A __198.51.100.34__ ;; Query time: __917 msec__ ...本例假定 BIND 在同一主机上运行并响应
localhost接口上的查询。在第一次查询记录后,BIND 会将条目添加到其缓存中。
从最后一步中重复查询:
# dig @localhost www.example.org__www.example.org.__ __85332__ IN A __198.51.100.34__ ;; Query time: __1 msec__ ...由于缓存的条目,进一步对相同记录的请求会更快,直到条目过期为止。
详情请查看您系统上的
named.conf (5)手册页和/usr/share/doc/bind/sample/etc/named.conf文件。
1.2. 在 BIND DNS 服务器中配置日志记录 复制链接链接已复制到粘贴板!
要写入带有定义的严重性级别为单独的文件的不同事件,请在 BIND DNS 服务器上配置日志记录。在服务器上,BIND 软件包将 /etc/named.conf 文件配置为使用 default_debug 频道,它会在 debug 级别不是零到 /var/named/data/named.run 文件时记录条目。
先决条件
- 您已将 BIND 配置为缓存名称服务器。
-
您已启动
named或named-chroot服务。
流程
编辑
/etc/named.conf文件,并在logging语句中添加category和channel短语,例如:logging { ... category notify { zone_transfer_log; }; category xfer-in { zone_transfer_log; }; category xfer-out { zone_transfer_log; }; channel zone_transfer_log { file "/var/named/log/transfer.log" versions 10 size 50m; print-time yes; print-category yes; print-severity yes; severity info; }; ... };在本示例配置中
-
BIND 将与区域传送相关的消息记录到
/var/named/log/transfer.log。 - BIND 创建最多 10 个日志文件版本,并在它们达到 50 MB 时轮转它们。
-
category定义了 BIND 向哪些频道发送类别信息。 -
channel定义了日志消息的目的地,包括版本数量、最大文件大小以及 BIND 应记录到频道的严重性等级。其他设置,如启用事件的时间戳、类别和严重性,但可用于调试目的。
-
BIND 将与区域传送相关的消息记录到
如果不存在,请创建日志目录,并为该目录上的指定用户授予写入权限:
# mkdir /var/named/log/ # chown named:named /var/named/log/ # chmod 700 /var/named/log/验证
/etc/named.conf文件的语法:# named-checkconf如果命令没有显示输出,则语法为正确的。
重启 BIND:
# systemctl restart named如果在 change-root 环境中运行 BIND,请使用
systemctl restart named-chroot命令来重启该服务。
验证
显示日志文件的内容:
# cat /var/named/log/transfer.log... __06-Jul-2022 15:08:51.261 xfer-out: info: client @0x7fecbc0b0700 192.0.2.2#36121/key example-transfer-key (example.com): transfer of 'example.com/IN': AXFR started: TSIG example-transfer-key (serial 2022070603)__ __06-Jul-2022 15:08:51.261 xfer-out: info: client @0x7fecbc0b0700 192.0.2.2#36121/key example-transfer-key (example.com): transfer of 'example.com/IN': AXFR ended__详情请查看您系统上的
named.conf (5)手册页。
1.3. 编写 BIND 访问控制列表 复制链接链接已复制到粘贴板!
要防止未经授权的访问和攻击,如拒绝服务(DoS),您可以使用访问控制列表(ACL)语句来控制对 BIND 的某些功能的访问。ACL 语句是 IP 地址和范围的列表。
BIND 仅在 ACL 中使用第一个匹配条目。例如,如果您定义了 ACL { 192.0.2/24; !192.0.2.1; } 和 IP 地址为 192.0.2.1 的主机,则 BIND 也会授予访问权限,即使第二个条目排除了这个地址。
每个 ACL 都有一个别名,您可以在几个语句中使用,如 allow-query,它指的是指定的 IP 地址和范围。BIND 有以下内置 ACL 语句:
-
none:不匹配主机。 -
any: 匹配所有主机。 -
localhost:匹配环回地址127.0.0.1和::1,以及运行 BIND 的服务器上所有接口的 IP 地址。 -
localnets:匹配环回地址127.0.0.1和::1,运行 BIND 的服务器都直接连接到的所有子网。
先决条件
- 您已将 BIND 配置为缓存名称服务器。
-
named或named-chroot服务正在运行。
流程
编辑
/etc/named.conf文件并进行以下更改:将
acl语句添加到文件中。例如,要为127.0.0.1、192.0.2.0/24和2001:db8:1::/64创建名为internal-networks的 ACL,请输入:acl internal-networks { 127.0.0.1; 192.0.2.0/24; 2001:db8:1::/64; }; acl dmz-networks { 198.51.100.0/24; 2001:db8:2::/64; };在支持它们的语句中使用 ACL 的别名,例如:
allow-query { internal-networks; dmz-networks; }; allow-recursion { internal-networks; };
验证
/etc/named.conf文件的语法:# named-checkconf如果命令没有显示输出,则语法为正确的。
重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。
验证
执行操作,以触发使用配置的 ACL 的功能。例如,ACL 只允许来自定义的 IP 地址的递归查询。在这种情况下,在没有在 ACL 定义的主机上输入以下命令,尝试解析外部域:
# dig +short @192.0.2.1 www.example.com如果命令没有返回输出,则拒绝 BIND 的访问,并且 ACL 可以正常工作。
在客户端上显示输出,使用不带
+short选项的最后一个命令:# dig @192.0.2.1 www.example.com... ;; WARNING: recursion requested but not available ...
1.4. 使用 dnstap记录 DNS 查询 复制链接链接已复制到粘贴板!
要分析域名系统(DNS)流量模式,请监控 DNS 服务器性能并排除相关问题,请使用 dnstap 接口记录 DNS 详情。要监控和记录收集网站和 IP 地址详情的传入名称查询,dns tap 记录由 named 服务发送的消息。
先决条件
- 您有管理特权。
-
已安装
bind软件包。
如果您已经安装了 BIND 版本并运行,请添加新版本的 BIND 会覆盖现有版本。
流程
在
/etc/named.conf文件的options块中启用dnstap和 target 文件:options { # ... dnstap { all; }; # Configure filter dnstap-output file "/var/named/data/dnstap.bin" versions 2; # ... }; # end of options将
dnstap过滤器添加到/etc/named.conf文件中的dnstap块,以指定您要日志的 DNS 流量类型。您可以使用以下过滤器:-
auth:权威区域响应或回答。 -
客户端:内部客户端查询或回答。 -
forwarder: 转发查询或来自它的响应。 -
解析器:迭代解析查询或响应。 -
更新:动态区域更新请求。 -
All:来自上述选项中的任何一个。 或queryresponse:如果您没有指定查询或响应关键字,dnstap记录。注意dnstap过滤器有几个以分号(;)分开的定义,语法如下:dnstap{(all | auth | client | forwarder | resolver | update)[(query | response)]; … };
-
通过添加额外的参数来更改
dnstap-output选项,以自定义记录的数据包中dnstap工具的行为:-
size(无限 | <size>):当其大小达到指定限制时,启用对dnstap文件的自动滚动。 -
版本(无限 | <integer>):指定要保留自动滚动的文件数量。 后缀(递增 | 时间戳):选择推出文件的命名约定。默认情况下,从.0开始递增。但是,您可以通过设置时间戳值来使用 UNIX时间戳。以下示例仅请求
auth响应、客户端查询以及动态更新的查询和响应:Example: dnstap {auth response; client query; update;};
-
要应用您的更改,请重启
named服务:# systemctl restart named.service为活跃日志配置定期推出部署:
# sudoedit /etc/cron.daily/dnstap#!/bin/sh rndc dnstap -roll 3 mv /var/named/data/dnstap.bin.1 /var/log/named/dnstap/dnstap-$(date -I).bin # use dnstap-read to analyze saved logs sudo chmod a+x /etc/cron.daily/dnstap-
Cron调度程序只在一天运行一次用户编辑的脚本的内容。 -
值为
3的roll选项指定dnstap最多可以创建三个备份日志文件。 -
值
3覆盖dnstap-output变量的version参数。这个值将备份日志文件的数量限制为 3。此外,此选项会将二进制日志文件移到另一个目录中,并将它重命名为。它永远不会达到.2后缀,即使三个备份日志文件已存在。 - 如果根据大小限制自动滚动二进制日志,您可以跳过这一步。
-
使用
dnstap-read工具以人类可读的格式读取和打印输出日志,如YAML文件:# dnstap-read -p /var/named/data/dnstap.bin
第 2 章 在 BIND DNS 服务器中配置区 复制链接链接已复制到粘贴板!
要管理 example.com 域的域名解析(DNS),请在 DNS BIND 服务器上配置区。DNS 区域是包含域空间中特定子树的资源记录的数据库。因此,客户端可以将 www.example.com 解析为区中配置的 IP 地址。
2.1. 区域文件中的授权记录开始 复制链接链接已复制到粘贴板!
要管理多个对区域和 DNS 解析器的 DNS 服务器,您可以使用权威启动(SOA)记录。此记录在 DNS 区域中至关重要。
BIND 中的 SOA 记录具有以下语法:
name class type mname rname serial refresh retry expire minimum
为了提高可读性,您需要将区域文件中的记录分成几行,其中包含以分号(;)开头的注释。请注意,如果您分割 SOA 记录,圆括号将记录保留在一起:
@ IN SOA ns1.example.com. hostmaster.example.com. (
2022070601 ; serial number
1d ; refresh period
3h ; retry period
3d ; expire time
3h ) ; minimum TTL
请注意完全限定域名(FQDN)末尾的结尾点。FQDN 由多个域标签组成,它们用点分开。因为 DNS root 有一个空标签,所以 FQDN 以点结尾。因此,BIND 在名称中附加区域名称,而无需尾随点。
没有尾部点的主机名,例如 ns1.example.com 扩展至 ns1.example.com.example.com,这不是主名称服务器的正确地址。
以下是 SOA 记录中的字段:
-
name:区域的名称,即所谓的源(origin)。如果将此字段设置为@,BIND 会将其扩展为/etc/named.conf中定义的区域名称。 -
class:在 SOA 记录中,必须将此字段始终设置为 Internet (IN)。 -
type:在 SOA 记录中,必须将此字段始终设置为SOA。 -
mname(主名称):此区域的主域名服务器的主机名。 -
rname(负责名称): 负责此区域的电子邮件地址。请注意,格式不同。您必须将 at 符号 (@) 替换为点 (.)。 serial:此区域文件的版本号。次要域名服务器仅在主服务器上的序列号较高时更新其区域副本。格式可以是任意数字值。通常的格式是 <
year><month><day><two_digit_number>。使用这种格式,在理论上可以每天修改区域文件上百次。-
刷新:次要服务器在检查主服务器时应等待的时间(如果区更新成功)。 -
重试:如果区更新失败,次要服务器尝试查询主服务器的时间长度。 -
过期:如果所有早期尝试失败,次要服务器停止查询主服务器的时间长度。 -
minimum:RFC 2308 将此字段的含义改为负缓存时间。兼容解析器使用它来决定缓存NXDOMAIN名称错误的时间。
refresh, retry, expire, 和 minimum 项中的值定义了一个时间(以秒为单位)。但是,为了提高可读性,请使用时间后缀,如 m 表示分钟、h 表示小时,以及 d 表示天。例如,3h 代表 3 小时。
2.2. 在 BIND 主服务器上设置转发区 复制链接链接已复制到粘贴板!
要启用将域名映射到 IP 地址和其他信息,请在 BIND 主服务器上设置转发区域。例如,如果您负责 example.com 域,您可以在 BIND 中设置转发区来解析名称,如 www.example.com。
先决条件
-
您已在服务器上安装
bind软件包。 - 您已将服务器配置为作为缓存名称服务器运行。
-
named或named-chroot服务正在运行。
流程
在
/etc/named.conf文件中添加区定义:zone "example.com" { type master; file "example.com.zone"; allow-query { any; }; allow-transfer { none; }; };这些设置定义:
-
此服务器是
example.com区域的主服务器(类型为 master)。 -
/var/named/example.com.zone文件是区域文件。如果您设置了相对路径,如本例中所示,这个路径相对于您在options语句中的目录中创建的directory相对。 - 任何主机都可以查询此区域。但是,您可以指定 IP 范围或 BIND 访问控制列表(ACL)别名来限制访问。
- 没有主机可以传输区域。仅在设置次要服务器并且仅为次要服务器的 IP 地址时才允许区域传送。
-
此服务器是
验证
/etc/named.conf文件的语法:# named-checkconf如果命令没有显示输出,则语法为正确的。
使用以下内容创建
/var/named/example.com.zone文件:$TTL 8h @ IN SOA ns1.example.com. hostmaster.example.com. ( 2022070601 ; serial number 1d ; refresh period 3h ; retry period 3d ; expire time 3h ) ; minimum TTL IN NS ns1.example.com. IN MX 10 mail.example.com. www IN A 192.0.2.30 www IN AAAA 2001:db8:1::30 ns1 IN A 192.0.2.1 ns1 IN AAAA 2001:db8:1::1 mail IN A 192.0.2.20 mail IN AAAA 2001:db8:1::20这个区域文件:
-
将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用
h指定小时),BIND 会将该值解析为秒。 - 具有所需的授权起始(SOA)资源记录,以及有关该区域的详细信息。
-
将
ns1.example.com设置为此区域的权威 DNS 服务器。要正常工作,区域需要至少一个域名服务器 (NS) 记录。但是,若要与 RFC 1912 兼容,您需要至少有两个域名服务器。 -
将
mail.example.com设置为example.com域的邮件交换器 (MX)。主机名前面的数字值是记录的优先级。较低值的条目具有更高的优先级。 -
设置
www.example.com的 IPv4 和 IPv6 地址、mail.example.com和ns1.example.com。
-
将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用
在区域文件上设置安全权限,仅允许
named组读取它:# chown root:named /var/named/example.com.zone # chmod 640 /var/named/example.com.zone验证
/var/named/example.com.zone文件的语法:# named-checkzone example.com /var/named/example.com.zone zone example.com/IN: loaded serial 2022070601 OK重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。
验证
从
example.com区域查询不同的记录,并验证输出是否与您在区域文件中配置的记录匹配:# dig +short @localhost AAAA www.example.com2001:db8:1::30# dig +short @localhost NS example.comns1.example.com# dig +short @localhost A ns1.example.com192.0.2.1本例假定 BIND 在同一主机上运行并响应
localhost接口上的查询。
2.3. 在 BIND 主服务器中设置反向区 复制链接链接已复制到粘贴板!
要将 IP 地址映射到名称,您可以在 BIND 主服务器中设置反向区。例如,如果您有 192.0.2.0/24 IP 范围,您可以在 BIND 中设置反向区,以将 IP 地址从这个范围解析为主机名。
如果您为特定网络为 类 IP 地址创建反向区域,请将该区域命名为。例如,对于 C network 192.0.2.0/24,区域的名称是 2.0.192.in-addr.arpa。如果要为不同的网络大小创建反向区域,如 192.0.2.0/28,区域的名称为 28-2.0.192.in-addr.arpa。
先决条件
- 您已将 BIND 配置为缓存名称服务器。
-
named或named-chroot服务正在运行。 - 您有管理特权。
流程
在
/etc/named.conf文件中添加区定义:zone "2.0.192.in-addr.arpa" { type master; file "2.0.192.in-addr.arpa.zone"; allow-query { any; }; allow-transfer { none; }; };这些设置定义:
-
此服务器是
2.0.192.in-addr.arpa反向区域的主服务器(类型 master)。 -
/var/named/2.0.192.in-addr.arpa.zone文件是区域文件。如果您设置了相对路径,如本例中所示,这个路径相对于您在options语句中的目录中创建的directory相对。 - 任何主机都可以查询此区域。但是,您可以指定 IP 范围或 BIND 访问控制列表(ACL)别名来限制访问。
- 没有主机可以传输区域。仅在设置次要服务器并且仅为次要服务器的 IP 地址时才允许区域传送。
-
此服务器是
验证
/etc/named.conf文件的语法:# named-checkconf如果命令没有显示输出,则语法为正确的。
使用以下内容创建
/var/named/2.0.192.in-addr.arpa.zone文件:$TTL 8h @ IN SOA ns1.example.com. hostmaster.example.com. ( 2022070601 ; serial number 1d ; refresh period 3h ; retry period 3d ; expire time 3h ) ; minimum TTL IN NS ns1.example.com. 1 IN PTR ns1.example.com. 30 IN PTR www.example.com.这个区域文件:
-
将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用
h指定小时),BIND 会将该值解析为秒。 - 具有所需的授权起始(SOA)资源记录,以及有关该区域的详细信息。
-
将
ns1.example.com设置为此反向区域的权威 DNS 服务器。要正常工作,区域需要至少一个域名服务器 (NS) 记录。但是,若要与 RFC 1912 兼容,您需要至少有两个域名服务器。 -
设置
192.0.2.1和192.0.2.30地址的指针(PTR)记录。
-
将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用
在区域文件上设置安全权限,仅允许
named组读取它:# chown root:named /var/named/2.0.192.in-addr.arpa.zone # chmod 640 /var/named/2.0.192.in-addr.arpa.zone验证
/var/named/2.0.192.in-addr.arpa.zone文件的语法:# named-checkzone 2.0.192.in-addr.arpa /var/named/2.0.192.in-addr.arpa.zonezone __2.0.192.in-addr.arpa/IN__: loaded serial __2022070601__ OK重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。
验证
从反向区查询不同的记录,并验证输出是否与您在区域文件中配置的记录匹配:
# dig +short @localhost -x 192.0.2.1ns1.example.com# dig +short @localhost -x 192.0.2.30www.example.com本例假定 BIND 在同一主机上运行并响应
localhost接口上的查询。
2.4. 更新 BIND 区文件 复制链接链接已复制到粘贴板!
要更新对某个区域的权威多个 DNS 服务器,请仅在主服务器中更新区域文件。例如,如果您更改了服务器的 IP 地址,则需要更新区域文件。存储区域副本的其他 DNS 服务器通过区传输接收更新。
先决条件
- 您已配置了区。
-
您已启动
named或named-chroot服务。 - 您有管理特权。
流程
可选:识别
/etc/named.conf文件中的区文件的路径:options { ... directory "/var/named"; } zone "example.com" { ... file "example.com.zone"; };您可以在区域定义的
file指令中找到到区域文件的路径。相对路径相对于options语句中的directory设置的相对路径。编辑区域文件:
- 进行必要的更改。
在 SOA 记录中递增序列号。
重要如果序列号等于或小于前一个值,则次要服务器不会更新其区域的副本。
验证区文件的语法:
# named-checkzone example.com /var/named/example.com.zonezone __example.com/IN__: loaded serial __2022062802__ OK重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。
验证
查询您添加、修改或删除的记录,例如:
# dig +short @localhost A ns2.example.com192.0.2.2本例假定 BIND 在同一主机上运行并响应
localhost接口上的查询。
2.5. 使用自动密钥生成和区维护功能进行 DNSSEC 区域签名 复制链接链接已复制到粘贴板!
为确保客户端的区域信息的真实性,您可以使用域名系统安全扩展(DNSSEC)为区域签名。签名的区域包含额外的资源记录。
要启用外部 DNS 服务器以验证区的真实性,请将区域的公钥添加到父区。请联系您的域供应商或 registry 以了解更多详细信息。
为区启用 DNSSEC 策略功能后,BIND 会自动执行操作。它包括创建密钥、签名区域和维护区域,包括重新签名并定期替换密钥。在 BIND 中,您可以使用内置的 默认 DNSSEC 策略,该策略使用单一 ECDSAP256SHA 密钥签名。但是,创建自己的策略来使用自定义密钥、算法和计时。
先决条件
-
您已在服务器上安装
bind软件包。 - 您已配置了要启用 DNSSEC 的区域。
-
named或named-chroot服务正在运行。 - 您已将服务器配置为同步时间与时间服务器。在启用 DNSSEC 验证前,始终检查正确的系统时间。
流程
在
/etc/named.conf文件中添加dnssec-policy default;和inline-signing yes;,以便为区启用 DNSSEC :zone "example.com" { ... dnssec-policy default; inline-signing yes; };重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。BIND 将公钥存储在
/var/named/K<zone_name>.+<algorithm>+<key_ID>.key文件中。使用此文件显示区的公钥,格式为父区所需的格式:DS 记录格式:
# dnssec-dsfromkey /var/named/Kexample.com.+013+61141.keyexample.com. IN DS 61141 13 2 3E184188CF6D2521EDFDC3F07CFEE8D0195AACBD85E68BAE0620F638B4B1B027DNSKEY 格式:
# grep DNSKEY /var/named/Kexample.com.+013+61141.keyexample.com. 3600 IN DNSKEY 257 3 13 sjzT3jNEp120aSO4mPEHHSkReHUf7AABNnT8hNRTzD5cKMQSjDJin2I3 5CaKVcWO1pm+HltxUEt+X9dfp8OZkg==
- 请求将区域的公钥添加到父区。联系您的域供应商或 registry 以了解更多有关如何执行此操作的详细信息。
验证
从启用了 DNSSEC 签名的区域查询您自己的 DNS 服务器:
# dig +dnssec +short @localhost A www.example.com192.0.2.30 A 13 3 28800 20220718081258 20220705120353 61141 example.com. e7Cfh6GuOBMAWsgsHSVTPh+JJSOI/Y6zctzIuqIU1JqEgOOAfL/Qz474 M0sgi54m1Kmnr2ANBKJN9uvOs5eXYw==本例假定 BIND 在同一主机上运行并响应
localhost接口上的查询。在服务器将公钥添加到父区并将其传播到其他服务器后,验证服务器是否将查询上的身份验证数据(
ad)标记设置为已签名区:# dig @localhost example.com +dnssec... ;; flags: qr rd ra **ad**; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ...
2.6. 在 BIND DNS 服务器中配置区传输 复制链接链接已复制到粘贴板!
要确保所有具有区副本的 DNS 服务器具有最新的数据,请在 BIND DNS 服务器中配置区域传送。
先决条件
- 您有管理特权。
- 在未来的主服务器中,已配置要设置区域传送的区域。
- 在未来的次要服务器中,BIND 已配置为缓存名称服务器。
-
在两个服务器上,
named或named-chroot服务正在运行。
流程
在现有主服务器中:
生成共享密钥并将其附加到
/etc/named.conf文件中:# tsig-keygen example-transfer-key | tee -a /etc/named.confkey "__example-transfer-key__" { algorithm hmac-sha256; secret "__q7ANbnyliDMuvWgnKOxMLi313JGcTZB5ydMW5CyUGXQ=__"; };输出附加到
/etc/named.conf文件。您稍后会在次要服务器上需要此输出。
在
allow-transfer语句中,在/etc/named.conf文件中配置区,以要求密钥进行传输:zone "example.com" { ... allow-transfer { key example-transfer-key; }; };定义服务器必须具有
example-transfer-key语句中指定的密钥来传输区域。但是,您可以在allow-transfer语句中使用 BIND 访问控制列表(ACL)别名。配置区以显示二级服务器 IP 地址:
zone "example.com" { ... also-notify { 192.0.2.2; 2001:db8:1::2; }; };默认情况下,在更新区后,BIND 会通知在这个区中具有名称服务器(
NS)记录的所有名称服务器。如果您不计划将次要服务器的NS记录添加到区,您可以配置 BIND 通知这个服务器。为此,请将这个次要服务器的 IP 地址添加also-notify声明到区:验证
/etc/named.conf文件的语法:# named-checkconf如果命令没有显示输出,则语法为正确的。
重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。
在未来的次要服务器中:
将共享密钥块添加到
/etc/named.conf(与主服务器相同):key "example-transfer-key" { algorithm hmac-sha256; secret "q7ANbnyliDMuvWgnKOxMLi313JGcTZB5ydMW5CyUGXQ="; };在
/etc/named.conf文件中添加 second zone 定义:zone "example.com" { type slave; file "slaves/example.com.zone"; allow-query { any; }; allow-transfer { none; }; masters { 192.0.2.1 key example-transfer-key; 2001:db8:1::1 key example-transfer-key; }; };-
此服务器是
example.com区域的次要服务器 (type slave)。 -
/var/named/slaves/example.com.zone文件是区域文件。如果您设置了相对路径,如本例中所示,这个路径相对于您在options语句中的目录中创建的directory相对。要隔离此服务器从属的区域文件,您可以将它们存储在/var/named/slaves/目录中。 - 任何主机都可以查询此区域。但是,您可以指定 IP 范围或 ACL 别名来限制访问。
- 没有主机可以从该服务器传输区域。
-
此区域的主服务器的 IP 地址是
192.0.2.1和2001:db8:1::2。但是,您可以指定 ACL 别名。此次要服务器将使用名为example-transfer-key的键向主服务器进行身份验证。
-
此服务器是
验证
/etc/named.conf文件的语法:# named-checkconf重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。
-
可选: 将新次要服务器的
NS记录添加到主服务器上的区域文件中。
验证
在次要服务器中:
显示
named服务的systemd日志条目:# journalctl -u named... Jul 06 15:08:51 ns2.example.com named[2024]: zone example.com/IN: Transfer started. Jul 06 15:08:51 ns2.example.com named[2024]: transfer of 'example.com/IN' from 192.0.2.1#53: connected using 192.0.2.2#45803 Jul 06 15:08:51 ns2.example.com named[2024]: zone example.com/IN: transferred serial 2022070101 Jul 06 15:08:51 ns2.example.com named[2024]: transfer of 'example.com/IN' from 192.0.2.1#53: Transfer status: success Jul 06 15:08:51 ns2.example.com named[2024]: transfer of 'example.com/IN' from 192.0.2.1#53: Transfer completed: 1 messages, 29 records, 2002 bytes, 0.003 secs (667333 bytes/sec)如果在 change-root 环境中运行 BIND,请使用
journalctl -u named-chroot命令显示日志条目。验证 BIND 创建了区域文件:
# ls -l /var/named/slaves/total 4 -rw-r--r--. 1 named named 2736 Jul 6 15:08 example.com.zone请注意,默认情况下,次要服务器以二进制原始格式存储区域文件。
从次要服务器查询传输的区的记录:
# dig +short @192.0.2.2 AAAA www.example.com2001:db8:1::30本例假定您在此流程中设置的次要服务器侦听 IP 地址
192.0.2.2。
2.7. 在 BIND 中配置响应策略区以覆盖 DNS 记录 复制链接链接已复制到粘贴板!
要通过使用 DNS 阻塞和过滤来重写 DNS 响应来阻止对某些域或主机的访问,请在 BIND 中配置响应策略区域(RPZ)。您可以为受阻条目配置不同的操作,如返回 NXDOMAIN 错误或不响应查询。
如果您有多个 DNS 服务器,请在主服务器上配置 RPZ,稍后配置区域传送以在次要服务器上提供 RPZ。
先决条件
- 您已将 BIND 配置为缓存名称服务器。
-
named或named-chroot服务正在运行。 - 您有管理特权。
流程
编辑
/etc/named.conf文件,将response-policy定义添加到options语句中:options { ... response-policy { zone "rpz.local"; }; ... }您可以在
response-policy的zone语句中为 RPZ 设置自定义名称。但是,在下一步中,您必须在区定义中使用相同的名称。为您在最后一步中设置的 RPZ 添加
区定义:zone "rpz.local" { type master; file "rpz.local"; allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; }; allow-transfer { none; }; };-
此服务器是名为
rpz.local的 RPZ 的主服务器 (type master)。 -
/var/named/rpz.local文件是区域文件。在本例中,如果您设置了相对路径,此路径相对于您在options语句中的directory中设置的目录。 -
allow-query中定义的任何主机都可以查询此 RPZ。但是,指定 IP 范围或 BIND 访问控制列表(ACL)别名来限制访问。 - 没有主机可以传输区域。仅在设置次要服务器并且仅为次要服务器的 IP 地址时才允许区域传送。
-
此服务器是名为
验证
/etc/named.conf文件的语法:# named-checkconf如果命令没有显示输出,则语法为正确的。
使用以下内容创建
/var/named/rpz.local文件:$TTL 10m @ IN SOA ns1.example.com. hostmaster.example.com. ( 2022070601 ; serial number 1h ; refresh period 1m ; retry period 3d ; expire time 1m ) ; minimum TTL IN NS ns1.example.com. example.org IN CNAME . pass:[].example.org IN CNAME .example.net IN CNAME rpz-drop.pass:[].example.net IN CNAME rpz-drop.这个区域文件:
-
将资源记录的默认生存时间 (TTL) 值设置为 10 分钟。如果没有时间后缀(例如没有使用
h指定小时),BIND 会将该值解析为秒。 - 具有所需的 SOA 资源记录,以及有关该区域的详细信息。
-
将
ns1.example.com设置为此区域的权威 DNS 服务器。要正常工作,区域需要至少一个域名服务器 (NS) 记录。但是,若要与 RFC 1912 兼容,您需要至少有两个域名服务器。 -
将查询的
NXDOMAIN错误返回给该域中的example.org和主机。 -
将查询丢弃至此域中的
example.net和主机。
-
将资源记录的默认生存时间 (TTL) 值设置为 10 分钟。如果没有时间后缀(例如没有使用
验证
/var/named/rpz.local文件的语法:# named-checkzone rpz.local /var/named/rpz.localzone __rpz.local/IN__: loaded serial __2022070601__ OK重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。
验证
尝试解析将 RPZ 配置为返回
NXDOMAIN错误的example.org域中的主机:# dig @localhost www.example.org... ;; ->>HEADER<<- opcode: QUERY, status: **NXDOMAIN**, id: 30286 ...本例假定 BIND 在同一主机上运行并响应
localhost接口上的查询。尝试解析 RPZ 配置为丢弃查询的
example.net域中的主机:# dig @localhost www.example.net... ;; connection timed out; no servers could be reached ...
第 3 章 设置 unbound DNS 服务器 复制链接链接已复制到粘贴板!
要验证、解析和缓存 DNS 查询,请配置 unbound DNS 服务。此外,unbound 增强了安全性,并且默认启用域名系统安全扩展(DNSSEC)。
3.1. 将 Unbound 配置为缓存 DNS 服务器 复制链接链接已复制到粘贴板!
要解析和缓存成功且失败的查找,并从其缓存中回答对相同记录的请求,请配置 unbound DNS 服务。
先决条件
- 您有管理特权。
流程
安装
unbound软件包:# dnf install unbound编辑
/etc/unbound/unbound.conf文件,并在server子句中进行以下更改:添加
interface参数来配置unbound服务侦听查询的 IP 地址,例如:interface: 127.0.0.1 interface: 192.0.2.1 interface: 2001:db8:1::1使用这些设置时,
unbound仅侦听指定的 IPv4 和 IPv6 地址。将接口限制到特定接口,可防止客户端从未经授权的网络(如互联网)向这个 DNS 服务器发送查询。
添加
access-control参数,以配置客户端可以从哪些子网查询 DNS 服务,例如:access-control: 127.0.0.0/8 allow access-control: 192.0.2.0/24 allow access-control: 2001:db8:1::/64 allow
创建用于远程管理
unbound服务的私钥和证书:# systemctl restart unbound-keygen注意如果您跳过这一步,在下一步中验证配置将会报告缺少的文件。如果文件丢失,
unbound服务自动创建这些文件。验证配置文件:
# unbound-checkconfunbound-checkconf: no errors in /etc/unbound/unbound.conf更新 firewalld 规则,以允许传入的 DNS 流量:
# firewall-cmd --permanent --add-service=dns # firewall-cmd --reload启用并启动
unbound服务:# systemctl enable --now unbound
验证
查询在
localhost接口上侦听的unboundDNS 服务器以解析域:# dig @localhost www.example.com... __www.example.com.__ __86400__ IN A __198.51.100.34__ ;; Query time: __330 msec__ ...在第一次查询记录后,
unbound会将条目添加到其缓存中。重复最后一个查询:
# dig @localhost www.example.com... __www.example.com.__ __85332__ IN A __198.51.100.34__ ;; Query time: __1 msec__ ...由于对条目进行了缓存,进一步对相同记录的请求会非常快,直到条目过期为止。
详情请查看您系统上的
unbound.conf (5)手册页。
第 4 章 提供 DHCP 服务 复制链接链接已复制到粘贴板!
要自动为客户端设备分配 IP 地址和其他网络设置,请使用动态主机配置协议(DHCP)。您可以设置 Kea 在网络中分配 DHCP 服务器。
4.1. 静态和动态 IP 地址之间的区别 复制链接链接已复制到粘贴板!
要管理设备如何接收其唯一网络地址,您可以在两种方法之间进行选择:静态和动态 IP 寻址。
- 静态 IP 地址
当您为某个设备分配静态 IP 地址时,该地址不会随时间变化,除非您手动更改该地址。如果要使用静态 IP 地址:
- 确保 DNS 等服务器的网络地址一致性和身份验证服务器。
- 使用独立于其他网络基础架构的带外管理设备。
- 动态 IP 地址
当您将设备配置为使用动态 IP 地址时,该地址会随时更改。因此,动态地址通常用于偶尔连接到网络的设备,因为重启主机后 IP 地址可能会不同。
动态 IP 地址更为灵活,更容易设置和管理。DHCP 是动态为主机分配网络配置的传统方法。
没有严格的规则来定义何时使用静态或动态 IP 地址。它取决于您的需求、首选项和网络环境。
4.2. DHCP 的阶段 复制链接链接已复制到粘贴板!
DHCP 分为四个阶段:发现、提供、请求、确认,也称为 DORA 进程。DHCP 使用这个过程为客户端分配 IP 地址。
- Discovery(发现)
- DHCP 客户端发送一条信息来发现网络中 DHCP 服务器。客户端在网络和数据链路层广播此消息。
- Offer(提供)
- DHCP 服务器接收客户端的消息,并为客户端提供 IP 地址。服务器在数据链路层中单播此消息,并在网络层广播此消息。
- Request(请求)
- DHCP 客户端从 DHCP 服务器请求提供的 IP 地址。客户端在数据链路层中单播此消息,并在网络层广播该消息。
- Acknowledgment(承认)
- DHCP 服务器向客户端发送确认。服务器在数据链路层中单播此消息,并在网络层广播此消息。此确认是 DHCP DORA 进程中的最终消息。
4.3. 将 Kea 用于 DHCPv4 和 DHCPv6 概述 复制链接链接已复制到粘贴板!
要独立管理 DHCPv4 和 DHCPv6 服务,请使用 Kea。Kea 是一个具有模块化设计的开源 DHCP 服务器。每个协议都有自己的配置文件来运行 DHCPv4 服务器、DHCPv6 服务器或两者来满足网络要求。
对于每个协议,Kea 使用单独的配置文件和服务:
- DHCPv4
-
配置文件:
/etc/kea/kea-dhcp4.conf -
systemd 服务名称:
kea-dhcp4
-
配置文件:
- DHCPv6
-
配置文件:
/etc/kea/kea-dhcp6.conf -
systemd 服务名称:
kea-dhcp6
-
配置文件:
4.4. Kea lease 数据库概述 复制链接链接已复制到粘贴板!
DHCP 租期是 Kea 为客户端分配网络地址的周期。租期数据库包含有关分配的租期的信息,如分配给介质访问控制(MAC)地址的 IP 地址或租期过期时的时间戳。
租期数据库中的所有时间戳都位于 Coordinated Universal Time (UTC)中。
Kea 支持以下租期后端:
memfile(默认)存储在磁盘上的文本文件。默认情况下,Kea 将 DHCP 租期存储在以下文件中:
-
对于 DHCPv4:
/var/lib/kea/kea-leases4.csv 对于 DHCPv6:
/var/lib/kea/kea-leases6.csv警告手动更新文件可能会导致不一致和文件损坏。出于性能的原因,Kea 在内存中存储租期数据,且不会在运行时监控租期文件。在下次 Kea 更新文件时,可以覆盖手动编辑。
-
对于 DHCPv4:
mysql- MySQL 数据库后端。
pgsql- PostgreSQL 数据库后端。
Kea 在以下情况中更新租期数据库:
- 租期更新
- 在正常关闭时
- 在定期租期文件清理(LFC)过程中
- 对于 API 请求
4.5. 设置 Kea DHCP 服务器 复制链接链接已复制到粘贴板!
为了避免手动 DHCP 配置而导致错误,请使用 Kea DHCP 服务器自动将 IP 地址和其他网络设置分配给客户端设备。
先决条件
-
已安装
kea软件包。 - 您有管理特权。
步骤
如果要配置 IPv4 网络:
编辑
/etc/kea/kea-dhcp4.conf文件,并使用以下配置:{ "Dhcp4": { // Global settings that apply to all subnets unless overridden. "valid-lifetime": 86400, "option-data": [ { "name": "domain-name", "data": "example.com" }, { "name": "domain-name-servers", "data": "192.0.2.53" } ], "interfaces-config": { "interfaces": [ "enp1s0" ] }, "subnet4": [ // A definition of a subnet that is directly connected to the server { "id": 1, "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.20 - 192.0.2.100" }, { "pool": "192.0.2.150 - 192.0.2.200" } ], "option-data": [ { "name": "routers", "data": "192.0.2.1" } ], }, // A definition of a remote subnet served through a DHCP relay { "id": 2, "subnet": "198.51.100.0/24", "pools": [ { "pool": "198.51.100.20 - 198.51.100.100" } ], // Allowed DHCP relay agents "relay": { "ip-addresses": [ "198.51.100.5" ] }, "option-data": [ { "name": "routers", "data": "198.51.100.1" }, { "name": "domain-name-servers", "data": "198.51.100.53" } ] } ] } }这个示例将 Kea 配置为提供两个子网:一个直接连接到服务器,一个远程配置为使用 DHCP 转发代理。
interfaces- 定义 Kea 侦听 DHCP 请求的网络接口。如果子网没有直接连接到服务器,请列出接口,使子网能够通过这些接口访问。
id- 如果定义了多个子网,请为子网定义唯一的整数。
子网- 以无类别域间路由(CIDR)格式定义子网。
池- 定义 IP 地址范围,以便 Kea 可以为客户端分配地址。
option-data- 定义发送到客户端的 DHCP 选项,如默认网关和 DNS 服务器。按子网选项设置覆盖全局设置。
relay- 定义 DHCP 转发代理的 IP 地址。虽然此设置对于远程子网是可选的,但它提高了将转发请求限制为可信代理的安全性。不要将此参数用于直接连接的子网。
验证配置文件的语法:
# kea-dhcp4 -t /etc/kea/kea-dhcp4.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。更新
firewalld规则,以允许传入的 DHCPv4 流量:# firewall-cmd --permanent --add-service=dhcp # firewall-cmd --reload启用并启动服务:
# systemctl enable --now kea-dhcp4
如果要配置 IPv6 网络:
编辑
/etc/kea/kea-dhcp6.conf文件,并使用以下配置:{ "Dhcp6": { // Global settings that apply to all subnets unless overridden. "valid-lifetime": 86400, "option-data": [ { "name": "domain-name", "data": "example.com" }, { "name": "dns-servers", "data": "2001:db8:0:1::53" } ], "interfaces-config": { "interfaces": [ "enp1s0" ] }, "subnet6": [ // A definition of a subnet that is directly connected to the server { "id": 1, "subnet": "2001:db8:0:1::/64", "pools": [ { "pool": "2001:db8:0:1::1000 - 2001:db8:0:1::2000" }, { "pool": "2001:db8:0:1::4000 - 2001:db8:0:1::5000" } ], }, // A definition of a remote subnet served through a DHCP relay { "id": 2, "subnet": "2001:db8:0:2::/64", "pools": [ { "pool": "2001:db8:0:2::1000 - 2001:db8:0:2::2000" } ], // Allowed DHCP relay agents "relay": { "ip-addresses": [ "2001:db8:0:2::5" ] }, "option-data": [ { "name": "dns-servers", "data": "2001:db8:0:1::53" } ] } ] } }这个示例将 Kea 配置为提供两个子网:一个直接连接到服务器,一个远程配置为使用 DHCP 转发代理。
验证配置文件的语法:
# kea-dhcp6 -t /etc/kea/kea-dhcp6.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。更新
firewalld规则,以允许传入的 DHCPv6 流量:# firewall-cmd --permanent --add-service=dhcpv6 # firewall-cmd --reload启用并启动服务:
# systemctl enable --now kea-dhcp6
验证
-
在客户端上配置使用 DHCP 的网络连接。详情请参阅 使用
nmcli配置以太网连接。 - 将客户端连接到网络。
检查客户端是否从 DHCP 服务器收到 IP 地址:
# ip address show <interface>2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:17:b8:b6 brd ff:ff:ff:ff:ff:ff inet 192.0.2.20/24 brd 192.0.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever inet6 2001:db8:1::1000/64 scope global noprefixroute valid_lft forever preferred_lft forever
故障排除
检查 Kea 正在侦听的 IPv4 和 IPv6 地址:
# ss -lunp | grep -E ':(67|547)'如果 Kea 没有侦听您配置的所有接口,请检查 Kea 配置文件中的
interfaces-config设置。
后续步骤
4.6. 在 Kea 中配置 日志记录器 复制链接链接已复制到粘贴板!
要根据优先级(如严重性级别)自定义日志设置,请在 Kea 中配置 日志记录器。默认情况下,如果 rsyslogd 服务在运行,Kea 将日志消息写入 systemd 日志和 /var/log/messages 文件。
先决条件
-
您已在服务器上安装了
kea软件包。 -
您已启动
kea-dhcp4和kea-dhcp6服务。 - 您有管理特权。
步骤
要配置 IPv4 网络,请编辑
/etc/kea/kea-dhcp4.conf文件:将
loggers配置添加到Dhcp4参数:{ "Dhcp4": { ..., "loggers":[ { "name":"kea-dhcp4", "output-options":[ { "output":"kea-dhcp4.log", "maxsize":104857600, "maxver":5 } ], "severity":"INFO", } ], ...示例中指定的设置有:
name-
定义
日志记录器设置应用到的二进制名称。 output-
在
/var/lib/kea/目录中设置日志文件名称。 maxsize-
在 Kea 轮转日志文件前设置日志文件的最大大小。默认值为
10240000字节。 maxver-
设置 Kea 将保留的最大轮转版本数量。请注意,
maxsize值小于204800字节会禁用轮转。 严重性-
指定记录的消息类别。您可以设置以下值之一:
NONE、FATAL、ERROR、WARN、INFO和DEBUG。Kea 仅记录配置的严重性及更高等级的信息。
验证配置文件的语法:
# kea-dhcp4 -t /etc/kea/kea-dhcp4.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。重启
kea-dhcp4服务:# systemctl restart kea-dhcp4
要配置 IPv6 网络,请编辑
/etc/kea/kea-dhcp6.conf文件:将
loggers配置添加到Dhcp6参数:{ "Dhcp6": { ..., "loggers":[ { "name":"kea-dhcp6", "output-options":[ { "output":"kea-dhcp6.log", "maxsize":104857600, "maxver":5 } ], "severity":"INFO", } ], ...验证配置文件的语法:
# kea-dhcp6 -t /etc/kea/kea-dhcp6.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。重启
kea-dhcp6服务:# systemctl restart kea-dhcp6
验证
- 监控日志文件,以检查它是否显示预期严重性的消息。
4.7. 使用 DHCP 为主机分配静态地址 复制链接链接已复制到粘贴板!
要为介质访问控制(MAC)地址、DHCP 唯一标识符(DUID)或其他标识符分配固定 IP 地址,请在 Kea 的子网定义中使用保留。例如:使用这个方法总是为服务器或者网络设备分配相同的 IP 地址。
先决条件
-
您已配置了
kea-dhcp4和kea-dhcp6服务。 - 您有管理特权。
步骤
如果要配置 IPv4 网络:
编辑
/etc/kea/kea-dhcp4.conf文件,并在subnet4参数中添加保留:{ "Dhcp4": { "subnet4": [ { "subnet": "192.0.2.0/24", ..., "reservations": [ { "hw-address": "52:54:00:72:2f:6e", "ip-address": "192.0.2.130" } ], ...这个示例将 Kea 配置为始终将
192.0.2.130IP 地址分配给 MAC 地址为52:54:00:72:2f:6e的主机。如需了解更多示例,请参阅
kea-doc软件包提供的/usr/share/doc/kea/examples/kea4/reservations.json文件。验证配置文件的语法:
# kea-dhcp4 -t /etc/kea/kea-dhcp4.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。重启
kea-dhcp4服务:# systemctl restart kea-dhcp4
如果要配置 IPv6 网络:
编辑
/etc/kea/kea-dhcp6.conf文件,并在subnet6参数中添加保留:{ "Dhcp6": { "subnet6": [ { "subnet": "2001:db8:0:1::/64", ..., "reservations": [ { "hw-address": "52:54:00:72:2f:6e", "ip-address": "2001:db8:0:1::99" } ]; ...这个示例将 Kea 配置为始终将
2001:db8:0:1::99IP 地址分配给 MAC 地址为52:54:00:72:2f:6e的主机。如需了解更多示例,请参阅
kea-doc软件包提供的/usr/share/doc/kea/examples/kea6/reservations.json文件。验证配置文件的语法:
# kea-dhcp6 -t /etc/kea/kea-dhcp6.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。重启
kea-dhcp6服务:# systemctl restart kea-dhcp6
4.8. 在 Kea 中分类客户端 复制链接链接已复制到粘贴板!
要根据特定条件对客户端进行分组,并允许精细控制网络配置,请使用 Kea 客户端类。您可以应用特殊的处理规则,或者为客户端分配不同的 DHCP 选项。
您可以创建一个客户端类,将 IP 上的 Voice over IP (VoIP)设备分配给特定的 IP 池。这是为了确保 VoIP 电话获得与网络上的其它设备不同的 IP 地址。例如,在 IPv4 网络中,您可以使用 子字符串 表达式来测试其介质访问控制(MAC)地址的前 3 octets。在 MAC 地址不是可靠的指示符的 IPv6 网络中,您可以测试 DHCPv6 供应商类选项的子字符串。
先决条件
-
您已配置了
kea-dhcp4和kea-dhcp6服务,并处于活动状态。 - 您有管理特权。
步骤
要配置 IPv4 网络,请编辑
/etc/kea/kea-dhcp4.conf文件将客户端类添加到
Dhcp4参数中:{ "Dhcp4": { ... "client-classes": [ { "name": "VoIP-Phones", "test": "substring(pkt4.mac, 0, 3) == 0x525400" }, { "name": "Others", "test": "not member('VoIP-Phones')" } ], ...在本例中,以
52:54:00开头的 MAC 地址的设备与VoIP-Phones客户端类匹配。Others客户端类包含与规则不匹配的设备。为
池定义分配客户端类:{ "Dhcp4": { "subnet4": [ { "subnet": "192.0.2.0/24", "pools": [ { "pool": "192.0.2.20 - 192.0.2.100", "client-class": "Others" }, { "pool": "192.0.2.150 - 192.0.2.200", "client-class": "VoIP-Phones" } ], ...根据主机匹配的客户端类,Kea 从对应的池中分配 IP 地址。
验证配置文件的语法:
# kea-dhcp4 -t /etc/kea/kea-dhcp4.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。重启
kea-dhcp4服务:# systemctl restart kea-dhcp4
要配置 IPv6 网络,请编辑
/etc/kea/kea-dhcp6.conf文件:将客户端类添加到
Dhcp6参数中:{ "Dhcp6": { ... "client-classes": [ { "name": "VoIP-Phones", "test": "option[16].exists and (substring(option[16].hex, 0, 8) == '00000009')", }, { "name": "Others", "test": "not member('VoIP-Phones')" } ], ...在本例中,发送 DHCPv6 供应商类选项(选项 16)的设备,十六进制值以
00000009开头,与VoIP-Phones客户端类匹配。Others客户端类包含与规则不匹配的设备。为
池定义分配客户端类:{ "Dhcp6": { "subnet6": [ { "subnet": "2001:db8:0:1::/64", "pools": [ { "pool": "2001:db8:0:1::1000 - 2001:db8:0:1::2000", "client-class": "Others" }, { "pool": "2001:db8:0:1::4000 - 2001:db8:0:1::5000", "client-class": "VoIP-Phones" } ], ...根据主机匹配的客户端类,Kea 从对应的池中分配 IP。
验证配置文件的语法:
# kea-dhcp6 -t /etc/kea/kea-dhcp6.conf如果命令返回
Syntax 检查失败,请修复报告中显示的错误。重启
kea-dhcp6服务:# systemctl restart kea-dhcp6
验证
- 连接与客户端类中规则匹配的客户端,并验证 Kea 从关联的池中分配了一个 IP 地址。
4.9. DHCPv6 与 radvd的比较 复制链接链接已复制到粘贴板!
要在需要默认网关设置的子网中使用 DHCPv6,请配置额外的路由器广告服务,如路由器公告守护进程(radvd)。
在 IPv6 网络中,只有路由器广告消息包含有关 IPv6 默认网关的信息。radvd 服务使用路由器广告数据包中的标志来声明 DHCPv6 服务器的可用性。
下表比较了 DHCPv6 和 radvd 的功能:
| 功能 | DHCPv6 | radvd |
|---|---|---|
| 提供有关默认网关的信息 | 否 | 是 |
| 保证随机地址以保护隐私 | 是 | 否 |
| 发送更多网络配置选项 | 是 | 否 |
| 将 MAC 地址映射到 IPv6 地址 | 是 | 否 |
4.10. 为 IPv6 路由器配置 radvd 服务 复制链接链接已复制到粘贴板!
要管理路由器广告消息,请配置路由器广告守护进程(radvd)服务。此服务为 IPv6 无状态自动配置发送路由器广告消息。您可以根据这些广告配置地址、设置、路由和选择默认路由器。
您只能在 radvd 服务中设置 /64 前缀。要使用其他前缀,请使用 DHCPv6。
先决条件
- 您有管理特权。
步骤
安装
radvd软件包:# dnf install radvd编辑
/etc/radvd.conf文件,以使用以下参数配置radvd:interface enp1s0 { AdvSendAdvert on; AdvManagedFlag on; AdvOtherConfigFlag on; prefix 2001:db8:0:1::/64 { }; };-
在
enp1s0接口上为2001:db8:0:1::/64子网发送路由器公告消息。 -
AdvManagedFlag on标志定义客户端应该从 DHCP 服务器接收 IP 地址。 -
AdvOtherConfigFlag标志定义客户端也应该从 DHCP 服务器接收非地址信息。
-
在
启用
radvd以在系统引导时自动启动:# systemctl enable --now radvd详情请查看系统中的
radvd.conf (5)手册页和/usr/share/doc/radvd/radvd.conf.example文件。
验证
显示路由器广告软件包的内容以及
radvd发送的配置的值:# radvdump