BIND (简体中文)
伯克利互联网名称服务 (Berkeley Internet Name Daemon,简称 BIND) 是 DNS 协议的一个参考实现。
Contents
安装
以下步骤可以协助您安装 BIND 并将其配置成一个本地缓存服务器。
如果希望只允许本地网络访问,编辑 /etc/named.conf
并将这行配置加入到 options 区域。
listen-on { 127.0.0.1; };
修改 resolv.conf 以使用本地的 DNS 服务器,127.0.0.1。
开始 named.service
服务。
缓存 DNS 服务器
当 BIND 被配置为缓存服务器的时候,它只会回应已缓存的请求,并将所有其他的请求转发到上游的 DNS 服务器(例如说您的 ISP 的服务器,或者 Google、OpenNIC 等知名的服务)。
将以下配置加入到 /etc/named.conf
的 global 或特定的域名区域中,并根据个人情况修改相应 IP 地址。
options { listen-on { 192.168.66.1; }; forwarders { 8.8.8.8; 8.8.4.4; }; };
不要忘记重启 named.service
服务。
权威 DNS 服务器
以下为一个设置权威域的简单教程。在这个示例中,我们的权威域名为 "domain.tld"。
更详尽的教程参见 Two-in-one DNS server with BIND9.
1. 创建一个 zonefile
# nano /var/named/domain.tld.zone
$TTL 7200 ; domain.tld @ IN SOA ns01.domain.tld. postmaster.domain.tld. ( 2007011601 ; Serial 28800 ; Refresh 1800 ; Retry 604800 ; Expire - 1 week 86400 ) ; Minimum IN NS ns01 IN NS ns02 ns01 IN A 0.0.0.0 ns02 IN A 0.0.0.0 localhost IN A 127.0.0.1 @ IN MX 10 mail imap IN CNAME mail smtp IN CNAME mail @ IN A 0.0.0.0 www IN A 0.0.0.0 mail IN A 0.0.0.0 @ IN TXT "v=spf1 mx"
$TTL 定义了默认的 TTL (time-to-live), 单位为秒。在这个例子中,默认 TTL 为 2 小时。
每次修改 zonefile 的时候,都需要将 Serial (序列号) 加一再重启 named。只有当新的 Serial 比最后传输的域的序列号大的时候,从服务器才会请求传输新的域。
2. 配置主服务器
将您的 zone 文件加到 /etc/named.conf
:
zone "domain.tld" IN { type master; file "domain.tld.zone"; allow-update { none; }; notify no; };
开始/启用 named.service
即可。如果已经运行了的话,可以直接重新加载配置文件。
最后一个参数可以确保 DNS 服务在配置文件被修改的情况下依旧可以继续运行。
3. 将其设置为默认 DNS 服务器
如果您自己已经在运行 DNS 服务器的话,可以考虑同时将其用来处理 DNS 查询请求。服务器必须支持 recursive (递归) 查询。为了防止 DNS 放大攻击,许多 DNS 解析程序都默认禁用了递归功能。Arch 的默认 /etc/named.conf
配置只允许本机地址使用递归:
allow-recursion { 127.0.0.1; };
resolv.conf 配置文件必须包含 127.0.0.1 地址以使用您的 DNS 服务器。 参见 Resolv.conf#Preserve DNS settings 以了解确保这个文件不会被覆盖的方法。
如果您想为您的局域网提供 DNS 服务的话(例如 192.168.0 IP 段),您必须将对应的 IP 段加入到 /etc/named.conf
中:
allow-recursion { 192.168.0.0/24; 127.0.0.1; };
配置 DNSSEC
参见 DNSSEC#BIND (serving signed DNS zones)[broken link: invalid section]。
自动监听新的网络接口
BIND 会每个每隔几个小时扫描新的网络接口并停止在已经不再不存在的上监听。如果您想修改这个时间的话,可以在 /etc/named.conf
中增加这个项:
interface-interval <扫描间隔>;
最大间隔为 28 天 (40230 分钟)。
如果需要禁用这个功能的话,可以将时间值设置为 0。
最后,请重启服务。
在 chroot 环境运行 BIND
在 [chroot] 环境运行可以提高安全性。
创建 Jail House
首先,我们需要创建一个 jail。我们可以使用 /srv/named
, 并将相关文件都放到里面去。
mkdir -p /srv/named/{dev,etc,usr/lib/engines,var/{run,log,named}} # Copy over required system files cp -av /etc/{localtime,named.conf} /srv/named/etc/ cp -av /usr/lib/engines/* /srv/named/usr/lib/engines/ # Set up required dev nodes mknod /srv/named/dev/null c 1 3 mknod /srv/named/dev/random c 1 8 # Set Ownership of the files chown -R named:named /srv/named
这些步骤可以配置 jail 的文件系统。
服务文件
接下来我们需要创建服务文件 (service file),以强制 BIND 在 chroot 环境中启动。
cp -av /usr/lib/systemd/system/named.service /etc/systemd/system/named-chroot.service
我们需要修改 service 启动 BIND 的方法。
/etc/systemd/system/named-chroot.service
ExecStart=/usr/bin/named -4 -f -u named -t "/srv/named"}
最后,重新加载 systemd systemctl daemon-reload
。然后,启动 named-chroot.service
。