第十章:搭建 BIND 9

在Unix或Linux系统上搭建,使用:

有几个环境变量会影响编译,可以在运行 configure 之前设置它们。最重要的是:

VariableDescription
CCThe C compiler to use. configure tries to figure out the right one for supported systems.
要使用的C编译器。configure 试图为支持的系统找出正确的配置。
CFLAGSThe C compiler flags. Defaults to include -g and/or -O2 as supported by the compiler. Please include -g if CFLAGS needs to be set.
C编译器标志。默认包括编译器支持的 -g 和/或 -O2 。如果需要设置CFLAGS ,请包括 -g
LDFLAGSThe linker flags. Defaults to an empty string.
链接器标记。默认为空字符串。

影响构建的其他环境变量列在 configure 帮助文本的末尾,可以通过运行以下命令获得:

如果使用Emacs, make tags 命令可能会有所帮助。

第十章:搭建 BIND 910.1. 必需的库10.2. 可选功能10.3. macOS

10.1. 必需的库

要构建BIND 9,必须安装以下软件包:

BIND 9.20要求 libuv 1.34.0或更高;建议使用 libuv >=1.40.0。不支持使用 libuv 1.35.0或1.36.0编译或运行,因为这可能会导致UDP接收代码中的断言(assertion)失败。在旧系统上,需要从EPEL、PPA或其他本地源安装更新的 libuv 包。另一种选择是从源代码构建并安装 libuv

需要OpenSSL 1.0.2e或更高版本。如果OpenSSL库安装在非标准位置,请在配置命令行上使用 --with-OpenSSL=<prefix> 指定前缀。要将PKCS#11硬件服务模块用于加密操作,必须编译并使用OpenSC项目中的 engine_pkcs11

用户空间RCU库 liburcu (https://liburcu.org/) 用于无锁(lock-free)数据结构和并发安全内存回收(reclamation)。

在Linux上,使用 libcap 库在用户空间中管理进程功能 (https://git.kernel.org/pub/scm/libs/libcap/libcap.git/) ,可以通过 libcap-devlibcap-devel 软件包安装在大多数Linux系统上。

要从git存储库构建BIND,还必须安装以下工具:

10.2. 可选功能

要查看配置选项的完整列表,请运行 configure --help

为了提高性能,使用 jemalloc 库(https://jemalloc.net/)强烈推荐。使用时需要4.0.0或更高版本。

要支持 DNS over HTTPS(DoH),服务器必须与 libnghttp2 链接(https://nghttp2.org/)。如果库不可用,可以使用 --disable-doh 来禁用doh支持。

为了支持HTTP统计通道,服务器必须与以下库中的至少一个链接: libxml2 (https://gitlab.gnome.org/GNOME/libxml2/-/wikis/home)或 json-c (https://github.com/json-c/json-c)。如果这些安装在非标准位置,则:

为了支持HTTP统计通道上的压缩,服务器必须与 zlib 链接(https://zlib.net/)。如果安装在非标准位置,请使用 --with-zlib=/prefix 指定前缀。

为了支持在LMDB数据库中存储运行时添加的区域的配置数据,服务器必须与 liblmdb 链接(https://github.com/LMDB/lmdb)。 如果安装在非标准位置,请使用 --with-lmdb=/prefix 指定前缀。

要支持MaxMind GeoIP2基于位置的ACL,服务器必须与 libmaxminddb 链接(https://maxmind.github.io/libmaxminddb/)。如果找到库,默认情况下会启用此选项;如果库安装在非标准位置,请使用 --with-maxminddb=/prefix 指定前缀。GeoIP2支持可以通过 --disable-geoip 关闭。

对于DNSTAP数据包记录, libfstr (https://github.com/farsightsec/fstrm)以及 libprotobuf-c (https://protobuf.dev)必须安装,BIND必须配置 --enable-dnstap

为了在 dig 中支持国际化域名, libidn2 (https://www.gnu.org/software/libidn/#libidn2)必须安装。如果库安装在非标准位置,请使用 --with-libidn2=/prefix 指定前缀或调整 PKG_CONFIG_PATH

对于 nsupdatenslookup 中的行编辑,可以使用 readline (https://tiswww.case.edu/php/chet/readline/rltop.html)或 libedit 库(https://www.thrysoee.dk/editline/)必须安装。如果这些安装在非标准位置,请调整 PKG_CONFIG_PATH 。默认情况下使用 readline ,可以使用 --withreadline=libedit 显式请求 libedit

在某些平台上,需要明确请求大文件支持来处理大于2GB的文件。这可以通过在 configure 命令行上使用 --enable-largefile 来完成。

通过在配置命令行上指定 --enable-fixed-rrset--disable-fixed-rrset ,可以启用或禁用对“fixed”RRset顺序选项的支持。默认情况下,禁用固定RRset顺序以减少内存占用。

--enable-querytrace 选项使 named 在处理每个查询时记录每个步骤。 --enable-singletrace 选项启用相同的详细跟踪,但允许通过将查询ID设置为0来单独跟踪单个查询。这些选项只应在调试时启用,因为它们对查询性能有重大的负面影响。

make install 安装 named 和各种BIND 9库。默认情况下,安装在 /usr/local 中,但在运行 configure 时可以使用 --prefix 选项进行更改。

可以指定选项 --sysconfdir 来设置默认情况下 named.conf 等配置文件所在的目录; --localstatedir 可用于设置 run/named.pid 的默认父目录。 --sysconfdir 默认为 $prefix/etc--localstatedir 默认为 $prefix/var

10.3. macOS

在macOS上构建假定已安装“Xcode命令工具(Command Tools for Xcode”)”。这些可以从以下网址下载https://developer.apple.com/xcode/resources/。或者,如果已经安装了Xcode,只需运行 xcode-select -install 即可。(请注意,访问下载页面可能需要Apple ID。)