31 域名系统 #
需要使用 DNS(域名系统)将域名和主机名解析成 IP 地址。这样,便可以将 IP 地址指派给主机名,例如,将 192.168.2.100 指派给 jupiter
。在设置您自己的名称服务器前,请阅读第 19.3 节 “名称解析”中有关 DNS 的一般信息。下列配置示例中使用了默认的 DNS 服务器 - BIND。
31.1 DNS术语 #
- 区域
域名称空间由一些区域 (zone) 组成。例如,如果您拥有
example.com
,您就拥有com
域的example
段(或区域)。- DNS 服务器
DNS 服务器是维护域的名称和 IP 信息的服务器。主 DNS 服务器可用于主要区域、次要服务器可用于从属区域,不含有任何区域的从属服务器可用于缓存。
- 主区域 DNS 服务器
主区域包含网络中的所有主机,DNS 服务器主区域储存域中所有主机的最新记录。
- 从属区域 DNS 服务器
从属区域是主区域的副本。从属区域 DNS 服务器将使用区域传送操作从其主服务器获取区域数据。只要从属区域 DNS 服务器具有有效(没到期)的区域数据,便会对区域作出权威响应。如果从属服务器不能获取区域数据的新副本,它将停止响应区域。
- 转发器
转发器是您的 DNS 服务器应将无法应答的查询发送到的 DNS 服务器。使用
netconfig
,以便在一个配置中启用不同配置源(另请参见man 8 netconfig
)。- 记录
记录就是有关名称和 IP 地址的信息。有关支持的记录及其语法的描述可在 BIND 文档中获取。以下是一些特殊记录:
- NS 记录
NS 记录会告诉命名服务器哪些计算机负责给定域区域。
- MX 记录
MX(邮件交换)记录描述在互联网中定向邮件时要联系的计算机。
- SOA 记录
SOA(起始授权机构)记录是区域文件中的第一条记录。当使用 DNS 在多台计算机之间同步数据时,使用 SOA 记录。
31.2 安装 #
要安装 DNS 服务器,请启动 YaST 并选择
› 。选择 › ,然后选择 。确认安装相关的包来完成安装进程。或者,在命令行中使用以下命令:
tux >
sudo
zypper in -t pattern dhcp_dns_server
31.3 使用 YaST 进行配置 #
使用 YaST DNS 模块为本地网络配置 DNS 服务器。第一次启动此模块时,会启动向导,提示您做出一些有关服务器管理的决定。完成此初始设置后,将产生基本服务器配置。使用专家模式可处理更高级的配置任务,例如设置 ACL、日志记录、TSIG 密钥和其他选项。
31.3.1 向导配置 #
向导由三个步骤或对话框组成。您可以从对话框的适当位置进入专家配置模式。
第一次启动模块时,您将看到图 31.1 “DNS 服务器安装:转发器设置”中显示的 对话框将打开。 允许设置以下选项:
自动
,但是,您可以在此处设置接口名称,或者从STATIC
与STATIC_FALLBACK
这两个特殊策略名称中做出选择。
在
中,指定要使用的服务: 、 或 。有关有关所有这些设置的更多信息,请参见
man 8 netconfig
。图 31.1︰ DNS 服务器安装:转发器设置 #转发器是接收您的 DNS 服务器自己无法应答的查询的 DNS 服务器。输入它们的 IP 地址,然后单击
。第 31.6 节 “区域文件”中所述)。对于新区域,请在 中为其提供一个名称。要添加反向区域,名称必须以
对话框由多个部分组成,负责管理区域文件(如.in-addr.arpa
结尾。最后选择 (主、从属或转发)。请参见图 31.2 “DNS 服务器安装:DNS 区域”。单击 可配置现有区域的其他设置。要删除区域,请单击 。图 31.2︰ DNS 服务器安装:DNS 区域 #在最后对话框中,您可以通过单击图 31.3 “DNS 服务器安装:完成向导”。
打开防火墙中的 DNS 端口。然后决定是否在引导时启动 DNS 服务器( 或 )。您还可以激活 LDAP 支持。请参见图 31.3︰ DNS 服务器安装:完成向导 #
31.3.2 专家配置 #
启动此模块后,YaST 将打开一个窗口,其中显示了多个配置选项。完成此窗口会生成具有基本功能的 DNS 服务器配置:
31.3.2.1 启动 #
在
下,定义是要在引导系统时启动 DNS 服务器,还是手动启动 DNS 服务器。要立即启动 DNS 服务器,请单击 。要停止 DNS 服务器,请单击 。要保存当前设置,请选择 。您可以用 打开防火墙中的 DNS 端口,并用 修改防火墙设置。通过选择
,让 LDAP 数据库管理区域文件。当 DNS 服务器重启动或被提示重装载其配置时,它会挑选出写入到 LDAP 数据库的任何区域数据更改。31.3.2.2 转发器 #
如果您的本地 DNS 服务器无法应答请求,则会尝试将请求转发给man 8 netconfig
。
31.3.2.3 基本选项 #
在这一部分,设置基本的服务器选项。从
菜单中选择所需的项,然后在相应文本框中指定值。选择 包括新的条目。31.3.2.4 日志记录 #
要设置 DNS 服务器应该记录的内容和记录方法,请选择
。在 下,指定 DNS 服务器将日志数据写入的位置。选择 以使用系统范围的日志,或选择 以指定另一个文件。对于后者,请额外指定名称、最大文件大小(以兆字节为单位)以及要储存的日志文件版本数。在每个查询,在这种情况下,日志文件可能会变得非常大。出于这个原因,如果不是为了调试,则最好不要启用此选项。要记录区域更新期间 DHCP 和 DNS 服务器之间的通讯数据,请启用 。要记录将区域从主服务器传送到从属服务器期间的数据流量,请启用 。请参见图 31.4 “DNS 服务器:日志记录”。
下可以使用其他一些选项。启用 将记录31.3.2.5 ACL #
使用此对话框定义 ACL(访问控制列表)来强制执行访问限制。在
下提供不同的名称后,在 下指定具有下列形式的 IP 地址(带有或不带有网络掩码):{ 192.168.1/24; }
配置文件的语法要求地址以分号结尾且放在花括号中。
31.3.2.6 TSIG 密钥 #
TSIG(事务签名)的主要用途是保护 DHCP 和 DNS 服务器间通讯的安全性。这些内容在第 31.8 节 “安全事务”中有所介绍。
要生成 TSIG 密钥,请在标为
的字段中输入一个唯一名称,并指定储存密钥的文件( )。用 确认选择。要使用以前创建的密钥,请将
字段保留为空,并在 下选择储存这个密钥 ID 的文件。选择后,请用 按钮进行确认。31.3.2.7 DNS 区域(添加从属区域) #
要添加从属区域,请选择
,然后选择区域类型 ,写入新区域名称并单击 。在
下的 子对话框中,指定从属服务器将从中获取数据的主服务器。要限制对此服务器的访问,可从列表中选择一个 ACL。31.3.2.8 DNS 区域(添加主区域) #
要添加主区域,请选择 example.com
(指向子集 192.168.1.0/24
中的主机)时,也应为包含的 IP 地址范围添加一个反时向区域。按照定义,应命名为 1.168.192.in-addr.arpa
。
31.3.2.9 DNS 区域(编辑主区域) #
要编辑主区域,请选择
,从表中选择主区域,最后单击 。该对话框包含几个页面: (第一个打开的页面)、 、 、 和 。图 31.5 “DNS 服务器:区域编辑器(基本)”中显示的基本对话框用于定义动态 DNS 的设置以及指向客户端和从属名称服务器的区域传送的访问选项。要允许动态更新区域,请选择 及相应的 TSIG 密钥。必须在更新操作开始前定义密钥。要启用区域传送,请选择相应的 ACL。必须已经定义了 ACL。
在
对话框中,选择是否启用区域传输。使用所列 ACL 来定义谁能够下载区域。- 区域编辑器(NS 记录)
图 31.6 “DNS 服务器:区域编辑器(NS 记录)”。
对话框用于为指定的区域定义备用名称服务器。确保已将自己的名称服务器包括在列表中。要添加记录,请在 下输入其名称,然后用 按钮确认。请参见图 31.6︰ DNS 服务器:区域编辑器(NS 记录) #- 区域编辑器(MX 记录)
要将当前区域的邮件服务器添加到现有的列表中,请输入相应的地址和优先级值。执行完此操作后,请选择图 31.7 “DNS 服务器:区域编辑器(MX 记录)”。
进行确认。请参见图 31.7︰ DNS 服务器:区域编辑器(MX 记录) #- 区域编辑器 (SOA)
此页用于创建 SOA(起始授权机构)记录。有关各选项的描述,请参见例 31.6 “/var/lib/named/example.com.zone 文件”。通过 LDAP 管理的动态区域不支持更改 SOA 记录。
图 31.8︰ DNS 服务器:区域编辑器 (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.
31.3.2.9.1 添加反向区域 #
要添加反向区域,请遵循以下过程:
添加正向区域后,返回到主菜单并选择该反向区域以进行编辑。在选项卡
中激活复选框 ,然后选择正向区域。这样,对正向区域的所有更改都会在反向区域中更新。31.4 启动 BIND 名称服务器 #
在 SUSE® Linux Enterprise Server 系统上,已预先配置名称服务器 BIND(Berkeley 互联网名称域),因此在安装后可以立即启动此名称服务器,而不会出现任何问题。一般而言,如果您已有互联网连接,并在 /var/run/netconfig/resolv.conf
中输入了 127.0.0.1
作为 localhost
的名称服务器地址,则表示您已经有正常工作的名称解析功能,因而无需知道提供商的 DNS。BIND 通过 root 名称服务器执行名称解析,这个过程非常慢。通常,应将提供商的 DNS 及其 IP 地址输入配置文件 /etc/named.conf
的 forwarders
下,以确保能进行有效而安全的名称解析。如果到目前为止是这种情况,则该名称服务器将作为仅用于缓存的纯名称服务器运行。只有在配置了该名称服务器自己的区域后,它才能成为正确的 DNS。在 /usr/share/doc/packages/bind/config
中可找到简单的示例。
根据互联网连接或网络连接的类型,名称服务器信息可以自动适应当前的情况。为此,请将 /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 地址。例 31.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
来停止服务器。
31.5 /etc/named.conf 配置文件 #
BIND 名称服务器本身的所有设置都储存在文件 /etc/named.conf
中。但是,将要处理的域的区域数据(由主机名、IP 地址等组成)储存在目录 /var/lib/named
下单独的文件中。稍后将介绍其详细信息。
/etc/named.conf
大致分为两部分。一部分是存放常规设置的 options
部分,另一部分由各个域的 zone
项组成。而 logging
部分和 acl
(访问控制列表)项是可选的。注释行以 #
符号或 //
开头。例 31.2 “基本的 /etc/named.conf”显示了一个最小的 /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"; };
31.5.1 重要的配置选项 #
- directory "FILENAME";
指定目录,BIND 可以在该目录中找到包含区域数据的文件。通常,此目录是
/var/lib/named
。- forwarders { IP-ADDRESS; };
指定在无法直接解析 DNS 请求的情况下应将其转发到的名称服务器(大多数情况下是提供商的名称服务器)。用 IP 地址(例如
192.168.1.116
)替换 IP-ADDRESS。- forward first;
在尝试通过 root 名称服务器解析 DNS 请求前,对 DNS 请求进行转发。可以写入
forward only
(而不是forward first
)转发所有请求并且不将任何请求发送到 root 名称服务器。这可以用于防火墙配置。- listen-on port 53 { 127.0.0.1; IP-ADDRESS; };
告知 BIND 在哪个网络接口和端口上接受客户端查询。不需要显式指定
端口 53
,因为53
为默认端口。输入127.0.0.1
允许接收来自 Localhost 的请求。如果完全省略此项,则在默认情况下使用所有接口。- listen-on-v6 port 53 {any; };
指示 BIND 应通过哪个端口侦听 IPv6 客户端请求。唯一可以替代
any
的是none
。就 IPv6 而言,服务器只接受通配符地址。- query-source address * port 53;
如果防火墙阻止外发的 DNS 请求,则需要此项。此项指示 BIND 从端口 53 向外部发送请求,而不使用端口号大于 1024 的任何端口。
- query-source-v6 address * port 53;
指示 BIND 将哪个端口用于 IPv6 查询。
- allow-query { 127.0.0.1; NET; };
定义客户端可以自此发送 DNS 请求的网络。用地址信息(例如
192.168.2.0/24
)替换 NET。末尾的/24
是网络掩码的缩写表示(在本例中为255.255.255.0
)。- allow-transfer ! *;;
控制哪些主机可以请求区域传送。在本例中,用
! *
中定义的值,如果没有此项,则可以从没有限制的任何位置请求区域传送。- statistics-interval 0;
如果缺少此项,则 BIND 每小时都会在系统的日志中生成几行统计信息。将其设置为 0 可以完全禁止生成此类统计信息,也可以设置时间间隔(以分钟为单位)。
- cleaning-interval 720;
此选项定义 BIND 间隔多长时间清除其缓存。每次清除时都会在系统的日志中触发一项。时间是以分钟为单位指定的。默认值为 60 分钟。
- interface-interval 0;
BIND 定期在网络接口中搜索新接口或不存在的接口。如果将该值设置为
0
,则不执行搜索,BIND 只侦听启动时检测到的接口。否则,采用分钟定义时间间隔。默认值是 60 分钟。- notify no;
指定
no
将阻止其他名称服务器在区域数据被更改或名称服务器被重启动时得到通知。
有关可用选项的列表,请阅读手册页 man 5 named.conf
。
31.5.2 日志记录 #
可以在 BIND 中详细配置日志记录的内容、方式和位置。通常,默认设置已足够了。例 31.3 “禁用日志记录的项”显示了此项最简单的形式,会彻底隐藏所有日志记录。
logging { category default { null; }; };
31.5.3 区域项 #
zone "example.com" in { type master; file "example.com.zone"; notify no; };
在 zone
后,指定要管理的域的名称 (example.com
),后跟 in
和用花括号括起来的相关选项块,如例 31.4 “example.com 的区域项”所示。要定义从属区域,请将 type
切换为 slave
并将管理此区域的名称服务器指定为 master
(它可能是另一个主区域的从属区域),如 例 31.5 “example.net 的区域项” 所示。
zone "example.net" in { type slave; file "slave/example.net.zone"; masters { 10.0.0.1; }; };
区域选项:
- type master;
通过指定
master
,指示 BIND 由本地名称服务器对区域进行处理。这假定已用正确的格式创建了区域文件。- type slave;
从另一个名称服务器传送此区域。必须将它与
masters
一起使用。- type hint;
区域
.
(hint
类型)用于设置 root 名称服务器。此区域定义可以保留原样。- file
example.com.zone
或 file “slave/example.net.zone”; 此项指定域的区域数据所在的文件。从属区域不需要此文件,因为此数据是从另一个名称服务器中获取的。要区分主文件和从属文件,请对从属文件使用目录
slave
。- masters { SERVER_IP_ADDRESS; };
只有从属区域需要此项。它指定应从哪个名称服务器传送区域文件。
- allow-update {! *; };
此选项控制外部写访问,这将允许客户端创建 DNS 项(出于安全原因,通常不希望出现这种情况)。没有此项,就不允许进行区域更新。上述项可以实现相同的结果,因为
! *
有效地禁止了此类操作。
31.6 区域文件 #
所需的区域文件有两种类型。一种类型将 IP 地址指派给主机名,另一种类型则正好相反:为 IP 地址提供主机名。
另一方面, "."
在区域文件中有重要的含义。如果指定的主机名末尾没有点 (.
),则会追加区域。使用完整域名指定的完整主机名必须以点 (.
) 结尾,这是为了避免再次向它添加域。缺少“.”或将其放错位置可能是导致名称服务器配置错误的最常见的原因。
第一个要考虑的情况是负责域 example.com
的区域文件 example.com.zone
,如例 31.6 “/var/lib/named/example.com.zone 文件”中所示。
$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(Start Of Authority,起始授权机构)控制记录开始的位置:
| |
| |
| |
| |
| |
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
。请参见例 31.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。 | |
此配置文件应激活网络 有关此记录中的项的细节,请参见例 31.6 “/var/lib/named/example.com.zone 文件”。 | |
此行指定负责此区域的名称服务器。但这次以完整格式输入名称,即包含域且以“ | |
此行及其后面的行是提示相应主机上 IP 地址的指针记录。在此行的开头仅输入了 IP 地址的最后一部分,不以“ |
通常,可以在 BIND 的不同版本间传输区域,不会产生任何问题。
31.7 区域数据的动态更新 #
术语动态更新指添加、更改或删除主服务器区域文件中的项的操作。RFC 2136 中对此机制进行了描述。通过添加可选的 allow-update
或 update-policy
规则,可为每个区域项分别配置动态更新。不应手动编辑要动态更新的区域。
用命令 nsupdate
将要更新的项传送到服务器。有关此命令的精确语法,请查看关于 nsupdate 的手册页 (man
8 nsupdate
)。出于安全原因,应使用 第 31.8 节 “安全事务” 中介绍的 TSIG 密钥执行此类更新。
31.8 安全事务 #
借助于基于共享密钥(也称为 TSIG 密钥)的事务签名 (TSIG) 可以实现安全事务。本节介绍如何生成和使用此类密钥。
不同服务器间的通信和区域数据的动态更新需要安全事务。依靠密钥进行访问控制比只靠 IP 地址进行访问控制要安全得多。
使用下面的命令生成 TSIG 密钥(有关细节,请参见 man
tsig-keygen
):
tux >
sudo
tsig-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
对此主题进行了详细介绍。
31.9 DNS 安全性 #
RFC 2535 中对 DNSSEC(或 DNS 安全性)进行了描述。BIND 手册中介绍了可用于 DNSSEC 的工具。
被认为是安全的区域必须有一个或多个与之关联的区域密钥。这些密钥是通过 dnssec-keygen
生成的,就像主机密钥一样。当前使用 DSA 加密算法来生成这些密钥。应使用 $INCLUDE
规则将所生成的公共密钥包括在相应的区域文件中。
使用命令 dnssec-signzone
,您可以创建生成的密钥集(keyset-
文件),将它们以安全方式传送到父区域并加以签名。这会生成要包含在 /etc/named.conf
中的针对每个区域的文件。
31.10 更多信息 #
有关更多信息,请参见安装在 /usr/share/doc/packages/bind/arm
下的 bind-doc
软件包中的 BIND Administrator Reference Manual(BIND 管理员参考手册)。另外,请考虑参考该手册中所引用的 RFC 和 BIND 附带的手册页。/usr/share/doc/packages/bind/README.SUSE
包含有关 SUSE Linux Enterprise Server 中 BIND 的最新信息。