DNS(域名系统)用于将域名和主机名解析为 IP 地址。例如,IP 地址 192.168.2.100 被分配给主机名 jupiter。在设置自己的名称服务器之前,请阅读有关 DNS 的常规信息,请参阅 第 13.3 节,“名称解析”。以下配置示例引用 BIND,默认 DNS 服务器。
域名空间被划分为称为区域的区域。例如,如果您有 example.com,则您将拥有 com 域的 example 部分(或区域)。
DNS 服务器是一个维护域的名称和 IP 信息的服务器。您可以拥有主区域的主 DNS 服务器、副区域的副服务器,或者没有区域的副服务器用于缓存。
主区域包括网络中的所有主机,主 DNS 服务器存储域中所有主机的最新记录。
副区域是主区域的副本。副区域 DNS 服务器通过区域传输操作从其主服务器获取其区域数据。如果副服务器拥有有效的(未过期的)区域数据,则副区域 DNS 服务器会对该区域做出权威响应。如果副服务器无法获得区域数据的最新副本,则它将停止响应该区域。
转发器是您的 DNS 服务器应该发送其无法回答的查询的 DNS 服务器。为了在一个配置中启用不同的配置源,使用 netconfig(请参阅 man 8 netconfig)。
记录是关于名称和 IP 地址的信息。受支持的记录及其语法在 BIND 文档中描述。几个特殊记录是
NS 记录告诉名称服务器哪些机器负责给定的域名区域。
MX(邮件交换)记录描述了在 Internet 上定向邮件时要联系的机器。
SOA(授权开始)记录是区域文件中的第一个记录。当使用 DNS 在多台计算机之间同步数据时,使用 SOA 记录。
要安装 DNS 服务器,请启动 YaST 并选择 › 。选择 › ,然后选择 。确认依赖软件包的安装以完成安装过程。
或者,在命令行中使用以下命令
>sudozypper in -t pattern dhcp_dns_server
使用 YaST DNS 模块配置本地网络的 DNS 服务器。首次启动模块时,将启动一个向导,提示您做出一些关于服务器管理的决定。完成此初始设置会生成基本的服务器配置。使用专家模式处理更高级的配置任务,例如设置 ACL、日志记录、TSIG 密钥和其他选项。
向导由三个步骤或对话框组成。在对话框的适当位置,您可以输入专家配置模式。
首次启动模块时,将打开 对话框,如图 图 19.1,“DNS 服务器安装:转发器设置” 所示。 允许设置以下选项
—如果选择 ,则可以指定 ;默认情况下(选择 ),设置为 auto,但您可以在此处设置接口名称或从两个特殊策略名称 STATIC 和 STATIC_FALLBACK 中选择。
在 中,指定要使用的服务:、 或 。
有关所有这些设置的更多信息,请参阅 man 8 netconfig。
转发器是您的 DNS 服务器应该发送其无法回答的查询的 DNS 服务器。输入它们的 IP 地址并单击 。
对话框由几个部分组成,负责管理区域文件,如 第 19.6 节,“区域文件” 所述。对于新区域,在 中提供一个名称。要添加反向区域,名称必须以 .in-addr.arpa 结尾。最后,选择 (主、副或转发)。请参阅 图 19.2,“DNS 服务器安装:DNS 区域”。单击 以配置现有区域的其他设置。要删除区域,请单击 。
在最后的对话框中,您可以单击 在防火墙中打开 DNS 端口。然后决定是否在启动时启动 DNS 服务器(或 )。您还可以激活 LDAP 支持。请参阅 图 19.3,“DNS 服务器安装:完成向导”。
启动模块后,YaST 会打开一个显示几个配置选项的窗口。完成它会生成一个具有基本功能的 DNS 服务器配置
在 下,定义 DNS 服务器是否应该在启动系统时或手动启动。要立即启动 DNS 服务器,请单击 。要停止 DNS 服务器,请单击 。要保存当前设置,请选择 。您可以使用 在防火墙中打开 DNS 端口,并使用 修改防火墙设置。
通过选择 ,区域文件由 LDAP 数据库管理。写入 LDAP 数据库的区域数据的任何更改都将在 DNS 服务器重新启动或提示重新加载其配置时被 DNS 服务器获取。
如果您的本地 DNS 服务器无法回答请求,它会尝试将请求转发到 (如果已配置)。可以将转发器手动添加到 。如果转发器不是静态的,例如在拨号连接中, 会处理配置。有关 netconfig 的更多信息,请参阅 man 8 netconfig。
要设置 DNS 服务器应该记录什么以及如何记录,请选择 。在 下,指定 DNS 服务器应该将日志数据写入的位置。通过选择 使用系统范围的日志,或者通过选择 指定不同的文件。在后一种情况下,还指定一个名称、最大文件大小(以 MB 为单位)以及要存储的日志文件版本数。
在 下,提供了更多选项。启用 会导致记录 每个 查询,在这种情况下,日志文件可能会变得很大。因此,不建议在调试目的之外启用此选项。要记录 DHCP 和 DNS 服务器之间区域更新期间的数据流量,请启用 。要记录从主服务器到副服务器的区域传输期间的数据流量,请启用 。请参阅 图 19.4,“DNS 服务器:日志记录”。
使用此对话框定义 ACL(访问控制列表)以强制执行访问限制。在 下提供一个不同的名称后,在以下格式下指定 下的 IP 地址(带或不带子网掩码)
{ 192.168.1/24; }配置文件的语法要求地址以分号结尾并放在花括号中。
TSIG(事务签名)的主要目的是保护 DHCP 和 DNS 服务器之间的通信。它们在 第 19.8 节,“安全事务” 中有描述。
要生成 TSIG 密钥,请在标记为 的字段中输入一个独特的名称,并指定应将密钥存储在哪个文件 ()。使用 确认您的选择。
要使用先前创建的密钥,请将 字段留空,并在 下选择存储密钥的文件。之后,使用 确认。
要添加辅助区域,请选择 ,选择区域类型 ,写入新区域的名称,然后单击 。
在 子对话框下的 中,指定辅助服务器应从中提取数据的服务器。要限制对服务器的访问,请从列表中选择一个 ACL。
要添加主区域,请选择 ,选择区域类型 ,写入新区域的名称,然后单击 。在添加主区域时,还需要一个反向区域。例如,在添加指向子网中的主机的区域 example.com 192.168.1.0/24 时,还应添加覆盖 IP 地址范围的反向区域。按定义,这应命名为 1.168.192.in-addr.arpa。
要编辑主区域,请选择 ,从表中选择主区域,然后单击 。该对话框由几个页面组成:(首先打开的页面)、、、 和 。
基本对话框,如图 图 19.5,“DNS 服务器:区域编辑器(基本)” 所示,允许您定义动态 DNS 设置和客户端及辅助名称服务器的区域传输访问选项。要允许动态更新区域,请选择 和相应的 TSIG 密钥。必须先定义密钥,然后才能开始更新操作。要启用区域传输,请选择相应的 ACL。ACL 必须已经定义。
在 对话框中,选择是否启用区域传输。使用列出的 ACL 定义谁可以下载区域。
对话框允许您为指定的区域定义替代名称服务器。确保您的名称服务器包含在列表中。要添加记录,请在 下输入其名称,然后使用 确认。请参阅 图 19.6,“DNS 服务器:区域编辑器(NS 记录)”。
要将当前区域的邮件服务器添加到现有列表中,请输入相应的地址和优先级值。完成后,通过选择 确认。请参阅 图 19.7,“DNS 服务器:区域编辑器(MX 记录)”。
此页面允许您创建 SOA(权威起始)记录。有关各个选项的说明,请参阅 示例 19.6,“/var/lib/named/example.com.zone 文件”。通过 LDAP 管理的动态区域不支持更改 SOA 记录。
此对话框管理名称解析。在 中,输入主机名,然后选择其类型。 类型表示主条目。此值应为 IP 地址(IPv4)。使用 表示 IPv6 地址。 是别名。使用类型 和 表示详细或部分记录,这些记录扩展了 和 选项卡中提供的信息。这三种类型解析为现有的 A 记录。 用于反向区域。它是 A 记录的相反,例如
hostname.example.com. IN A 192.168.0.1 1.0.168.192.in-addr.arpa IN PTR hostname.example.com.
要添加反向区域,请按照以下步骤操作
添加转发区域后,返回主菜单并选择反向区域进行编辑。在 选项卡中,激活复选框 并选择您的转发区域。这样,转发区域的所有更改都会自动更新到反向区域。
在 openSUSE® Leap 系统上,名称服务器 BIND(Berkeley Internet Name Domain)经过预配置,因此可以在安装后立即启动,而不会出现任何问题。通常,如果您已经有互联网连接,并且在 /var/run/netconfig/resolv.conf 中将 127.0.0.1 作为 localhost 的名称服务器地址输入,那么您已经拥有正常工作的名称解析,而无需了解提供商的 DNS。BIND 通过根名称服务器执行名称解析,这是一个明显较慢的过程。通常,应在 /etc/named.conf 文件下的 forwarders 中使用提供商的 DNS 及其 IP 地址进行配置,以确保有效且安全的名称解析。如果到目前为止一切正常,则名称服务器将作为纯 缓存专用 名称服务器运行。只有在配置自己的区域后,它才会成为一个合适的 DNS。
根据互联网连接或网络连接的类型,名称服务器信息可以自动调整为当前条件。为此,请将 /etc/sysconfig/network/config 文件中的 NETCONFIG_DNS_POLICY 变量设置为 auto。
但是,在获得负责机构分配之前,请勿设置官方域。即使您拥有自己的域并且由提供商管理,最好不要使用它,因为 BIND 否则将不会转发该域的请求。例如,提供商的 Web 服务器将无法访问该域。
要启动名称服务器,请以 root 用户身份输入命令 systemctl start named。使用 systemctl status named 检查 named(名称服务器进程的名称)是否已成功启动。立即在本地系统中使用 host 或 dig 程序测试名称服务器,它应将 localhost 作为地址为 127.0.0.1 的默认服务器返回。如果不是这种情况,/var/run/netconfig/resolv.conf 可能包含不正确的名称服务器条目或该文件不存在。对于第一次测试,输入 host 127.0.0.1,这应该始终有效。如果收到错误消息,请使用 systemctl status named 查看服务器是否正在运行。如果名称服务器未启动或行为异常,请检查 journalctl -e 的输出。
要使用提供商的名称服务器(或网络上已运行的名称服务器)作为转发器,请在 options 部分下的 forwarders 中输入相应的 IP 地址或地址。 示例 19.1,“named.conf 中的转发选项” 中的地址仅为示例。根据您自己的设置调整这些条目。
options {
directory "/var/lib/named";
forwarders { 10.11.12.13; 10.11.12.14; };
listen-on { 127.0.0.1; 192.168.1.116; };
allow-query { 127/8; 192.168/16 };
notify no;
};options 条目后跟区域、localhost 和 0.0.127.in-addr.arpa 的条目。type hint 条目应始终位于 “.” 下。不需要修改相应的文件,并且应该按原样工作。此外,请确保每个条目都以 “;” 结尾,并且大括号位于正确的位置。更改 /etc/named.conf 或区域文件后,使用 systemctl reload named 告诉 BIND 重新读取它们。通过停止并重新启动名称服务器,使用 systemctl restart named 实现相同效果。随时通过输入 systemctl stop named 停止服务器。
BIND 名称服务器的所有设置都存储在 /etc/named.conf 文件中。但是,要处理的域的区域数据(包括主机名、IP 地址等)存储在 /var/lib/named 目录中的单独文件中。稍后会详细介绍这些内容。
/etc/named.conf 大致分为两个区域。一个是用于常规设置的 options 部分,另一个是用于各个域的 zone 条目。 logging 部分和 acl(访问控制列表)条目是可选的。注释行以 # 符号或 // 开头。一个基本的 /etc/named.conf 如图 示例 19.2,“一个基本的 /etc/named.conf” 所示。
options {
directory "/var/lib/named";
forwarders { 10.0.0.1; };
notify no;
};
zone "localhost" in {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.zone";
};
zone "." in {
type hint;
file "root.hint";
};指定 BIND 可以找到包含区域数据的文件的目录。通常,这是 /var/lib/named。
指定如果无法直接解析,应将 DNS 请求转发到的名称服务器(提供商的名称服务器)。将 IP-ADDRESS 替换为类似于 192.168.1.116 的 IP 地址。
在尝试通过根名称服务器解析它们之前,转发 DNS 请求。除了 forward first 之外,可以编写 forward only 以转发所有请求,并且不发送任何请求到根名称服务器。这对于防火墙配置是有意义的。
告诉 BIND 在哪些网络接口和端口上接受客户端查询。port 53 不需要显式指定,因为 53 是默认端口。输入 127.0.0.1 以允许来自本地主机的请求。如果完全省略此条目,则默认情况下将使用所有接口。
告诉 BIND 它应该在哪个端口上侦听 IPv6 客户端请求。除了 any 之外,唯一的替代方案是 none。就 IPv6 而言,服务器仅接受通配符地址。
如果防火墙正在阻止传出的 DNS 请求,则需要此条目。这告诉 BIND 从端口 53 外部发布请求,而不是从 1024 以上的任何高端口发布。
告诉 BIND 使用哪个端口进行 IPv6 查询。
定义客户端可以发布 DNS 请求的网络。将 NET 替换为地址信息,例如 192.168.2.0/24。末尾的 /24 是子网掩码的缩写表示形式(在本例中为 255.255.255.0)。
控制哪些主机可以请求区域传输。在示例中,使用 ! * 拒绝此类请求。如果没有此条目,则可以从任何地方不受限制地请求区域传输。
如果没有此条目,BIND 每小时会在系统的日志中生成几行统计信息。将其设置为 0 以抑制这些统计信息,或设置分钟数间隔。
此选项定义 BIND 清理其缓存的时间间隔。每次发生时,这会在系统的日志中触发一个条目。时间指定以分钟为单位。默认值为 60 分钟。
BIND 定期搜索网络接口以查找新的或不存在的接口。如果将此值设置为 0,则不会执行此操作,并且 BIND 仅侦听启动时检测到的接口。否则,可以定义分钟数间隔。默认值为六十分钟。
no 阻止其他名称服务器在更改区域数据或重新启动名称服务器时收到通知。
有关可用选项的列表,请阅读 man 页面 man 5 named.conf。
BIND 中的日志记录可以进行广泛的配置,包括日志记录的内容、方式和位置。通常,默认设置应该足够。 示例 19.3,“禁用日志记录的条目” 显示了这种条目的最简单形式,并抑制任何日志记录。
logging {
category default { null; };
};zone "example.com" in {
type master;
file "example.com.zone";
notify no;
};在 zone 之后,指定要管理域的名称 (example.com),后跟 in 和用大括号括起来的相关选项块,如 示例 19.4,“example.com 的区域条目” 所示。要定义 辅助区域,请将 type 切换到 secondary,并指定管理该区域的名称服务器作为 primary(反过来,它可能是另一个主服务器的辅助服务器),如 示例 19.5,“example.net 的区域条目” 所示。
zone "example.net" in {
type secondary;
file "secondary/example.net.zone";
masters { 10.0.0.1; };
};区域选项
通过指定 primary,告诉 BIND 该区域由本地名称服务器处理。这假定已创建正确格式的区域文件。
此区域从另一个名称服务器传输。必须与 primary_servers 一起使用。
类型为 hint 的区域 . 用于设置根名称服务器。可以按原样保留此区域定义。
example.com.zone 或 file “secondary/example.net.zone”;此条目指定位于何处区域数据的域文件。对于辅助服务器,不需要此文件,因为此数据是从另一个名称服务器拉取的。为了区分主服务器和辅助服务器的文件,请为辅助文件使用目录 secondary。
此条目仅适用于辅助区域。它指定应从哪个名称服务器传输区域文件。
此选项控制外部写入访问,这将允许客户端进行 DNS 条目——出于安全原因,通常不希望这样做。如果没有此条目,则不允许区域更新。上述条目实现了相同的结果,因为 ! * 实际上禁止了任何此类活动。
需要两种类型的区域文件。一种将 IP 地址分配给主机名,另一种则相反:它为 IP 地址提供主机名。
在区域文件中,"." 具有重要含义。如果主机名没有最终句点 (.) 给出,则将附加区域。指定带有完整域名(必须以句点 (.) 结尾)的完整主机名,以避免再次添加该域。缺少或放置错误的“.” 是名称服务器配置错误的常见原因。
首先要考虑的情况是区域文件 example.com.zone,负责域 example.com,如 示例 19.6,“The /var/lib/named/example.com.zone file” 所示。
$TTL 2D 1 example.com. IN SOA dns root.example.com. ( 2 2003072441 ; serial 3 1D ; refresh 4 2H ; retry 5 1W ; expiry 6 2D ) ; minimum 7 IN NS dns 8 IN MX 10 mail dns 9 gate IN A 192.168.5.1 10 IN A 10.0.0.1 dns IN A 192.168.1.116 mail IN A 192.168.3.108 jupiter IN A 192.168.2.100 venus IN A 192.168.2.101 saturn IN A 192.168.2.102 mercury IN A 192.168.2.103 ntp IN CNAME dns 11 dns6 IN A6 0 2002:c0a8:174::
| |
SOA(权威起始)控制记录从这里开始
| |
| |
| |
| |
| |
SOA 记录中的最后一个条目指定 | |
| |
MX 记录指定邮件服务器,该邮件服务器接受、处理和转发域 | |
以下行是实际的地址记录,其中将一个或多个 IP 地址分配给主机名。这些名称在这里列出而没有 注意:IPv6 语法IPv6 记录的语法与 IPv4 略有不同。由于碎片化的可能性,有必要在地址之前提供有关丢失位的相关信息。要用所需的数量的“0”填充 IPv6 地址,请在地址的正确位置添加两个冒号。 pluto AAAA 2345:00C1:CA11::1234:5678:9ABC:DEF0 pluto AAAA 2345:00D2:DA11::1234:5678:9ABC:DEF0 | |
别名 |
伪域 in-addr.arpa 用于 IP 地址的反向查找为主机名。它以反向符号附加到地址的网络部分。因此,192.168 解析为 168.192.in-addr.arpa。请参阅 示例 19.7,“反向查找”。
$TTL 2D 1 168.192.in-addr.arpa. IN SOA dns.example.com. root.example.com. ( 2 2003072441 ; serial 1D ; refresh 2H ; retry 1W ; expiry 2D ) ; minimum IN NS dns.example.com. 3 1.5 IN PTR gate.example.com. 4 100.3 IN PTR www.example.com. 253.2 IN PTR cups.example.com.
$TTL 定义适用于此处所有条目的标准 TTL。 | |
配置文件应激活网络 有关此记录中条目的详细信息,请参阅 示例 19.6,“The /var/lib/named/example.com.zone file”。 | |
此行指定负责此区域的名称服务器。但是,这次以其完整形式输入名称,包括域和结尾的 | |
此行以及以下行是指向各个主机上 IP 地址的指针记录。仅在行开头输入 IP 地址的最后一部分,不包括结尾的 |
通常,不同版本的 BIND 之间的区域传输应该可以正常进行,而不会出现任何问题。
术语 动态更新 指的是通过客户端向主服务器的区域文件中添加、更改或删除条目的操作。此机制在 RFC 2136 中描述。动态更新通过为每个区域条目添加可选的 allow-update 或 update-policy 规则单独配置。不应手动编辑应动态更新的区域。
使用命令 nsupdate 将要更新的条目传输到服务器。有关此命令的确切语法,请查看 nsupdate 的 man 页面 (man 8 nsupdate)。出于安全原因,应使用 TSIG 密钥(如 第 19.8 节,“安全事务” 所述)执行任何此类更新。
可以使用基于共享密钥(也称为 TSIG 密钥)的事务签名 (TSIG) 来进行安全的事务。本节描述了如何生成和使用这些密钥。
在不同服务器之间的通信以及区域数据的动态更新中,都需要安全的事务。使访问控制依赖于密钥比仅仅依赖于 IP 地址更安全。
使用以下命令生成 TSIG 密钥(有关详细信息,请参阅 man tsig-keygen)
>sudotsig-keygen -a hmac-md5 host1-host2 > host1-host2.key
这将创建一个名为 host1-host2.key 的文件,其内容可能如下所示
key "host1-host2" { |
algorithm hmac-md5;
secret "oHpBLgtcZso6wxnRTWdJMA==";
};该文件必须以安全的方式(例如使用 scp)传输到远程主机。为了启用 host1 和 host2 之间的安全通信,必须将密钥包含在本地和远程服务器上的 /etc/named.conf 文件中。
key host1-host2 {
algorithm hmac-md5;
secret "ejIkuCyyGJwwuN3xAteKgg==";
};/etc/named.conf 文件的文件权限确保 /etc/named.conf 的权限受到适当的限制。该文件的默认权限为 0640,所有者为 root,组为 named。或者,可以将密钥移动到具有专门限制权限的额外文件中,然后从 /etc/named.conf 中包含该文件。要包含外部文件,请使用
include "filename"
将 filename 替换为指向包含密钥的文件的绝对路径。
要启用服务器 host1 使用 host2 的密钥(在本例中,其地址为 10.1.2.3),服务器的 /etc/named.conf 必须包含以下规则
server 10.1.2.3 {
keys { host1-host2. ;};
};必须在 host2 的配置文件中包含类似的条目。
为任何为 IP 地址和地址范围定义的访问控制列表 (ACL,不要与文件系统 ACL 混淆) 添加 TSIG 密钥,以启用事务安全性。相应的条目可能如下所示
allow-update { key host1-host2. ;};该主题在 BIND 管理员参考手册 的 update-policy 下进行了更详细的讨论。
DNSSEC,或 DNS 安全性,在 RFC 2535 中有描述。BIND 手册中讨论了可用于 DNSSEC 的工具。
被认为安全的区域必须与其关联一个或多个区域密钥。这些密钥使用 dnssec-keygen 生成,就像主机密钥一样。DSA 加密算法当前用于生成这些密钥。应将生成的公钥包含在相应的区域文件中,使用 $INCLUDE 规则。
使用命令 dnssec-signzone,您可以创建生成的密钥集(keyset- 文件),以安全的方式将它们传输到父区域,并对其进行签名。这将生成要在 /etc/named.conf 中包含的文件。