安装bind
yum install -y bind bind-chroot bind-utis
如果是Centos 5
# yum -y install bind caching-nameserver
文件结构
# ll /etc/named.*
-rw-r----- 1 root named 1021 May 8 16:39 /etc/named.conf
-rw-r--r-- 1 root named 2389 Mar 10 23:55 /etc/named.iscdlv.key
-rw-r----- 1 root named 1073 May 9 11:27 /etc/named.rfc1912.zones
-rw-r--r-- 1 root named 487 Jul 19 2010 /etc/named.root.key
# tree /var/named/
/var/named/
├── chroot
│ ├── dev
│ │ ├── null
│ │ ├── random
│ │ └── zero
│ ├── etc
│ │ ├── localtime
│ │ ├── named
│ │ ├── named.conf
│ │ ├── named.iscdlv.key
│ │ ├── named.rfc1912.zones
│ │ ├── named.root.key
│ │ ├── pki
│ │ │ └── dnssec-keys
│ │ └── rndc.key
│ ├── usr
│ │ └── lib64
│ │ └── bind
│ └── var
│ ├── log
│ ├── named
│ │ ├── 199.168.192.zone
│ │ ├── app.com.zone
│ │ ├── chroot
│ │ │ ├── dev
│ │ │ │ ├── null
│ │ │ │ ├── random
│ │ │ │ └── zero
│ │ │ ├── etc
│ │ │ │ ├── localtime
│ │ │ │ ├── named
│ │ │ │ ├── named.conf
│ │ │ │ ├── named.iscdlv.key
│ │ │ │ ├── named.rfc1912.zones
│ │ │ │ ├── named.root.key
│ │ │ │ ├── pki
│ │ │ │ │ └── dnssec-keys
│ │ │ │ └── rndc.key
│ │ │ ├── usr
│ │ │ │ └── lib64
│ │ │ │ └── bind
│ │ │ └── var
│ │ │ ├── log
│ │ │ ├── named
│ │ │ ├── run
│ │ │ │ └── named
│ │ │ │ ├── named.pid
│ │ │ │ └── session.key
│ │ │ └── tmp
│ │ ├── data
│ │ │ └── named.run
│ │ ├── dynamic
│ │ │ ├── managed-keys.bind
│ │ │ └── managed-keys.bind.jnl
│ │ ├── named.ca
│ │ ├── named.empty
│ │ ├── named.localhost
│ │ ├── named.loopback
│ │ └── slaves
│ ├── run
│ │ └── named
│ │ ├── named.pid
│ │ └── session.key
│ └── tmp
├── data
│ └── named.run
├── dynamic
│ ├── managed-keys.bind
│ └── managed-keys.bind.jnl
├── named.ca
├── named.empty
├── named.localhost
├── named.loopback
└── slaves
BIND配置文件保存在:
/etc/named.conf 主配置文件
/var/named/ 域zone文件位置
配置修改:
vim /etc/named.conf
vim /etc/named.rfc1912.zones
vim /var/named/app.com.zone
SOA表示授权开始 /*上面的IN表示后面的数据使用的是INTERNET标准。而@则代表相应的域名,如在这里代表app.com,即表示一个域名记录定义的开始。而ns.app.com则是这个域的主域名服务器,而root.app.com.则是管理员的邮件地址。注意这是邮件地址中用.来代替常见的邮件地址中的@.而SOA表示授权的开始 */ 1 ; serial (d. adams) /*本行前面的数字表示配置文件的修改版本,格式是年月日当日修改的修改的次数,每次修改这个配置文件时都应该修改这个数字,要不然你所作的修改不会更新到网上的其它DNS服务器的数据库上,即你所做的更新很可能对于不以你的所配置的DNS服务器为DNS服务器的客户端来说就不会反映出你的更新,也就对他们来说你更新是没有意义的。 */ 1D ; refresh /*定义的是以为单位的刷新频率 即规定从域名服务器多长时间查询一个主服务器,以保证从服务器的数据是最新的 */ 1H ;retry /*上面的这个值是规定了以秒为单位的重试的时间间隔,即当从服务试图在主服务器上查询更时,而连接失败了,则这个值规定了从服务多长时间后再试 */ 1W ; expiry /*上面这个用来规定从服务器在向主服务更新失败后多长时间后清除对应的记录,上述的数值是以分钟为单位的 */ 3H ) /*上面这个数据用来规定缓冲服务器不能与主服务联系上后多长时间清除相应的记 录 */
@ IN NS ns.app.com.
ns.app.com. IN A 192.168.199.61
www.app.com. IN A 192.168.199.60
mail.app.com. IN MX 5 ns.app.com.
nginx1 IN CNAME www
/*上面的第一列表示是主机的名字,省去了后面的域。 NS:表示是这个主机是一个域名服务器, A:定义了一条A记录,即主机名到IP地址的对应记录 MX 定义了一邮件记录 CNAME:定义了对应主机的一个别名
vim /var/named/199.168.192.zone
@ IN SOA ns.app.com. root.app.com. ( 12 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.app.com.
/*以上的各关键字的含义跟app.com是相同的 @ IN NS ns.app.com.61 IN PTR ns.app.com.60 IN PTR www.app.com.60 IN PTR nginx1.app.com./* 上面的第二列表示的是主机的IP地址。省略了网络地址部分。如61完整应该是: 192.168.199.61
PTR:表示反向记录 最后一列表示的是主机的域名。
语法检测:
named-checkconf /etc/named.conf #配置文件检测
named-checkzone app.com /var/named/app.com.zone #zone文件检测
防火墙设置:
vim /etc/sysconfig/iptables #配置防火墙端口
-AINPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-AINPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-AINPUT -m state --state NEW -m tcp -p tcp --dport 953 -j ACCEPT
客户端测试:
# cat /etc/resolv.conf
nameserver 192.168.199.61
# yum install bind-utils
nslookup
dig
host
故障排查
# tail -f /var/log/messages | grep named
# service named restart
zone xxx.xxx/IN: loading from master file xxx.xxx.xxx failed: permission denied
named[4089]: zone xxx.xxx /IN: not loaded due to errors.
报此错误是因为 named 服务是通过 named用户身份运行的没有读取/var/named下配置文件的权限
执行 chmod +r /var/named/* 即可
参考:
Linux下搭建DNS服务器和配置文件(named.conf)祥解