DNS服务器bind9用法
BIND9(Berkeley Internet Name Domain, version 9)是当前最广泛使用的开源DNS服务器软件,由Internet Systems Consortium(ISC)开发和维护
主要功能:
- BIND9的主要作用是域名解析,将域名转换为计算机可识别的IP地址实现互联网通信的基础服务
主要特性:
- 管理特定域名的DNS记录
- 响应其他DNS服务器的查询请求
- 支持主从服务器架构
- 为客户端提供完整的域名解析服务
- 缓存查询结果提高性能
- 支持DNSSEC安全扩展
- 将查询转发到其他DNS服务器
- 实现本地DNS缓存加速
应用场景:
- 企业内网:搭建内部DNS服务,管理内部域名
- 互联网服务:作为公共DNS服务器(如Google DNS、Cloudflare DNS基于BIND)
- 域名注册商:为注册的域名提供权威解析
- CDN服务:实现智能DNS解析和负载均衡
本例子中演示服务器系统为ubuntu,环境准备:
| IP | 192.168.51.246 | 192.168.51.252 | 192.168.49.224 |
| 用途 | 主DNS服务器 | 从DNS服务器 | 应用服务器 |
1、先安装bind9,执行如下命令:
apt install -y bind9 bind9-utils
安装后会自动启动,如图:

2、/etc/bind目录下有多个配置文件,如图:

- named.conf – 主配置文件,通过include语句包含其他配置文件,定义服务器运行的基本框架
- named.conf.options – 全局选项配置文件,定义监听设置、访问控制、转发器、递归查询、DNSSEC等全局参数
- named.conf.local – 本地区域配置文件,用于定义服务器管理的权威DNS区域(正向和反向解析)
- named.conf.default-zones – 默认区域配置文件,包含localhost、广播地址等系统默认的DNS区域定义
- db.local – localhost正向解析文件,将localhost解析为127.0.0.1
- db.127 – 127.0.0.0/8网段的反向解析文件,用于本地回环地址的反向解析
- db.0 – 0.0.0.0/8网段的反向解析文件
- db.255 – 255.255.255.0网段的反向解析文件
- db.empty – 空区域文件模板,用于创建新的区域文件
- rndc.key – 远程名称守护进程控制密钥文件,用于rndc工具与named进程的安全通信
- bind.keys – 根区域信任锚点文件,包含根DNS服务器的公钥,用于DNSSEC验证
- zones.rfc1918 – RFC 1918私有地址空间定义文件,包含10.0.0.0/8、172.16.0.0/12、192.168.0.0/16等私有网段的区域定义,通常用于防止私有地址泄露到公网
实际部署时,named.conf.options和named.conf.local是最频繁修改的配置文件,区域文件则根据业务需求动态更新
3、编辑全局配置文件,添加内容如下:
options {
directory "/var/cache/bind";
listen-on port 53 {127.0.0.1;192.168.51.246;};
allow-query {
192.168.51.0/24;
192.168.49.0/24;
};
recursion yes;
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
listen-on-v6 { any; };
};
- directory:指定BIND9的工作目录,DNS缓存、动态区域文件、临时文件存放位置
- listen-on:指定监听的IP地址和端口,只允许这两个监听DNS查询
- allow-query:允许查询的客户端IP范围,其余网段IP将会被拒绝,默认为any(所有)
- recursion yes:启用递归查询功能,当客户端查询的域名不在本地权威区域时,BIND9会向其他DNS服务器查询,如果设为
no,只响应本地权威区域的查询,生产环境建议谨慎开启,防止DNS放大攻击 - forwarders:指定上游DNS服务器,当递归查询时,优先查询8.8.8.8和8.8.4.4
- dnssec-validation auto:DNSSEC验证设置,防止DNS欺骗和缓存投毒攻击,auto(自动),yes(强制),no(不验证)
- listen-on-v6:监听所有IPv6接口,如果不需要IPv6支持,可设为
none
4、编辑区域配置文件name.conf.local,如下:
zone "oa.com" {
type master; # 主服务器类型
file "/etc/bind/oa.com.zone"; # 区域文件路径
allow-transfer { 192.168.51.252; }; # 允许传输到从服务器
notify yes; # 启用区域变更通知
#also-notify {ip1;ip2;ip3;};
};
- zone:定义区域名字,这个名字要和oa.com.zone中的保持一直
- type:类型为主DNS服务器
- file:定义区域文件路径,这里就是写具体的域名和IP映射
- allow-transfer:从服务器
- notify yes: 如果变更了通知从服务器
- also-notify:额外通知的服务器,没有就注释掉
5、创建oa.com.zone区域文件,内容如下:
$TTL 604800
@ IN SOA ns1.oa.com. admin.oa.com. (
2025121901 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; Name Server Records
@ IN NS ns1.oa.com.
@ IN NS ns2.oa.com.
; Mail Exchange Records
@ IN MX 10 mail.oa.com.
; Address Records
@ IN A 192.168.1.10
ns1 IN A 192.168.1.10
ns2 IN A 192.168.1.20
www IN A 192.168.49.224
abcd IN A 192.168.49.224
; IPv6 Address Records
www IN AAAA 2001:db8::1
; Canonical Name Records
web IN CNAME www.oa.com.
imap IN CNAME mail.oa.com.
; Text Records
@ IN TXT "v=spf1 a mx ~all"
_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
; Service Records
_sip._tcp IN SRV 10 60 5060 sip.oa.com.
- TTL:DNS缓存时间,默认是秒
- ns1.oa.com. : 主权威DNS服务器,要以点(.) 结尾表示绝对域名
- 管理员邮箱,格式:
admin.oa.com.对应admin@oa.com,@符号用点(.)表示


