1. 安装
apt install bind9
2. 配置bind9
2.1 配置bind9工作模式
vi /etc/bind/named.conf.options
-
directory: 定义区域文件的存放目录。
-
listen-on: 定义BIND监听的IP地址。可以使用any监听所有地址或使用特定IP地址。
-
allow-query: 定义允许查询BIND服务的客户端IP地址或网段。同样可以使用any允许所有客户端查询。
-
recursion: 定义是否允许递归查询。通常设置为yes以提供递归解析服务。
-
forward: 定义是否启用转发功能,以及转发到的DNS服务器地址。
root@u20svr:/etc/bind# cat /etc/bind/named.conf.options options { directory "/var/cache/bind"; // 设置监听的ip和端口 listen-on port 53 { 127.0.0.1; any; }; // 设置允许查询的客户端范围 allow-query { any; }; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. forwarders { // 0.0.0.0; 192.168.1.1; 223.5.5.5; 8.8.8.8; }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; // 对于 NXDOMAIN 响应使用标准的域名未找到响应 listen-on-v6 { any; }; };
2.2 自定义域名解析
修改文件。
mkdir /etc/bind/zones vi /etc/bind/named.conf.local
修改之后,
root@u20svr:/etc/bind# cat /etc/bind/named.conf.local // // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; 域名--》ip zone "wll.com" { type master; /// xx.wll.com -->ip-x映射 file "/etc/bind/zones/db.wll.com"; ;区域文件 }; ip--> 域名 zone "10.x.in-addr.arpa"{ type master; file "/etc/bind/zones/db.10.x"; ;区域文件 };
2.2.1 参数
zone语句块用于定义一个DNS区域。每个区域都需要指定区域名称和区域类型(如主区域、从区域等)。常见的参数包括:
-
name: 定义区域的名称,通常为域名。
-
type: 定义区域的类型,如master(主区域)、slave(从区域)等。
-
file: 定义存储区域数据的文件名。该文件应位于由options语句块中的directory选项指定的目录中。
-
allow-update: 定义允许动态更新区域数据的客户端地址或网段。
2.3 区域文件
2.3.1 域名到ip(区域文件)
cp /etc/bind/db.local /etc/bind/zones/db.wll.com vi /etc/bind/zones/db.wll.com
修改之后,
root@u20svr:/etc/bind# cat /etc/bind/zones/db.wll.com ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA wll.com. wll.com. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ;@ IN NS wll.com. @ IN NS pi2.wll.com. @ IN NS pi3.wll.com. dns.wll.com. IN A 192.168.1.190 pi2.wll.com. IN A 192.168.1.190 pi3.wll.com. IN A 10.9.9.3 ;* IN A 10.9.9.3
泛解析
root@u20svr:/etc/bind# cat /etc/bind/zones/db.wll.com ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA wll.com. wll.com. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ;@ IN NS wll.com. @ IN NS pi2.wll.com. @ IN NS pi3.wll.com. dns.wll.com. IN A 192.168.1.190 pi2.wll.com. IN A 192.168.1.190 pi3.wll.com. IN A 10.9.9.3 * IN A 10.9.9.3 ;泛解析
2.3.1.1 配置文件配置检查
named-checkzone wll.com /etc/bind/zones/db.wll.com
成功示例:
root@u20svr:/etc/bind# named-checkzone wll.com /etc/bind/zones/db.wll.com zone wll.com/IN: loaded serial 3 OK
2.3.1.2 参数
2.3.1.2.1 SOA记录
SOA记录:起始授权记录 Start of Authority record 宣告了namespace使用哪个nameserver的权威信息。须位于指令后第一行,是区域文件的第一个资源记录。格式如下:
@ IN SOA primary-name-server hostmaster-email ( serial-number time-to-refresh time-to-retry time-to-expire minimum-TTL )
@ 表示使用域名作为这个 SOA 的 namespace。
primary-name-server:该域权威DNS的主名称服务器的主机名 hostmaster-email:该namespace联系人邮件 serial-number:序列号,每次此区域文件被修改后,该序列号应该增加,以此提醒域名服务要重新加载该区域了。代表着当前数据库文件的新旧, 该值越大表示当前数据库的配置越新,一般来说这个值设定的值遵循 YYYYMMMMDDDD 的格式; 这个数值必须小于 4294967296; time-to-refresh 规定了Resource Record 的失效时间,即当前资源记录能够被缓存的时间长短,默认的单位为秒,能够设定的最大时间长度是 32 bit 的整形变量 ( 0 到 4294967295 ),单位是秒;更新的频率,设置 Slave DNS 服务器 去向 主服务器 进行配置更新的周期; Retry- 失败重新尝尝试时间,如果 Slave 服务器无法对 Master 进行链接,则需要设置这个值规定多长时间进行一次重试连接; Expire - 是失效时间,如果一直失败连接,那么这个配置规定了重试连接的最大时间;
示例
@ IN SOA wll.com. wll.com. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL
2.3.1.2.2 NS记录
Name Server Records 定义了在当前 DNS服务器 中的 NS 的 IP地址,在每一个 zone file 中必须指定 主/从 域名解析器的IP地址, 使用 A
记录,这个IP地址必须与你搭建的DNS服务器保持一致;
NS记录: 名称服务器记录指定了权威名称服务器。格式如下:
IN NS nameserver-name ;nameserver-name 应该是完全域名(FQDN)。
每个区域配置文件都必须包含至少一个NS记录。
示例
@ IN NS wll.com.
示例
@ IN NS ns.domain.com.
2.3.1.2.3 A记录
Address Records 记录了 域名 与 IP 地址的对应关系;
A 记录:给名称指定解析地址。格式如下:
hostname IN A IP-address
示例
pi3.wll.com. IN AAAA 10.9.9.3 ;pi3.wll.com
示例
ns.domain.com. IN A 192.168.1.1
2.3.2 ip到域名(区域文件)
cp /etc/bind/db.127 /etc/bind/zones/db.10.x vi /etc/bind/zones/db.10.x
修改之后,
2.3.2.1 配置文件配置检查
named-checkzone wll.com /etc/bind/zones/db.10.x
失败示例
root@u20svr:/etc/bind# named-checkzone wll.com /etc/bind/zones/db.10.x zone wll.com/IN: has no NS records zone wll.com/IN: not loaded due to errors.
3. bind9生效
service bind9 restart
查看bind9工作状态
service bind9 status
示例
/etc/bind# service bind9 status ● named.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2024-08-31 12:39:19 UTC; 3min 10s ago Docs: man:named(8) Main PID: 11742 (named) Tasks: 14 (limit: 6968) Memory: 6.8M CGroup: /system.slice/named.service └─11742 /usr/sbin/named -f -u bind Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:500:1::53#53 Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:7fd::1#53 Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:500:a8::e#53 Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:dc3::35#53 Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:503:ba3e::2:30#53 Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:500:9f::42#53 Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:500:12::d0d#53 Aug 31 12:39:19 u20svr named[11742]: network unreachable resolving './NS/IN': 2001:500:2::c#53 Aug 31 12:39:19 u20svr named[11742]: managed-keys-zone: Key 20326 for zone . is now trusted (acceptance timer complete) Aug 31 12:39:19 u20svr named[11742]: resolver priming query complete: success
3.1 ubuntu被占用53端口
查看当前53端口是否被占用。
netstat -ntulp |grep 53
停止systemd-resolved.service服务。
systemctl stop systemd-resolved.service systemctl disable systemd-resolved.service systemctl restart NetworkManager.service
3.2 异常处理
查看bind9错误的原因:
cat /var/log/syslog 或 service bind9 status
3.2.1 权限异常
xxx@u20svr:/etc/bind$ ll /usr/sbin/named -rwxr-xr-x 1 root root 579160 Jul 16 18:48 /usr/sbin/named*
解决方法
chmod 777 /usr/sbin/named
修改后,如下:
xxx@u20svr:/etc/bind# ls /usr/sbin/named -ld -rwxrwxrwx 1 root root 579160 Jul 16 18:48 /usr/sbin/named
3.2.2 端口冲突
netstat -ntulp | grep 53
3.3 本机dns不可用
测试DNS是否可用。
dig www.baidu.com
ubuntu会使用默认的配置
# cat /etc/resolv.conf nameserver 127.0.0.53 options edns0 trust-ad
修改
vi /etc/resolv.conf
修改之后
# cat /etc/resolv.conf nameserver 127.0.0.1 nameserver 127.0.0.53 options edns0 trust-ad
4. 验证测试
dig www.baidu.com dig pi3.wll.com