Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。
域名系统(英文:Domain Name System,DNS)是因特网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
DNS最早于1983年由保罗·莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。
早期的域名必须以英文句号“.”结尾,当用户访问 www.toxingwang.com 的HTTP服务时必须在址栏中输入:http://www.toxingwang.com.,这样DNS才能够进行域名解析。如今DNS服务器已经可以自动补上结尾的句号。
SOA记录:表明此 DNS 名称服务器是为该 DNS 域中的数据的信息的来源。
##SOA记录格式
ZONE NAME TTL IN SOA FQDN ADMINISTRATOR_MAILBOX (
serial number
refresh
retry
expire
na ttl )
##时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
##邮箱格式:[email protected] -写为-> admin.toxingwang.com
域名服务器记录(NS记录):用来指定某域名由哪个DNS服务器来进行解析。
##NS(Name Server): ZONE NAME --> FQDN
toxingwang.com. 600 IN NS ns1.toxingwang.com.
toxingwang.com. 600 IN NS ns2.toxingwang.com.
ns1.toxingwang.com. 600 IN A 192.168.8.100
ns2.toxingwang.com. 600 IN A 192.168.8.101##NS记录除了NS记录本身,还应该包含NS对应A记录
主机记录(A记录):A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
##A(address): FQDN-->IPv4
mail.toxingwang.com. 600 IN A 192.168.8.3
别名记录(CNAME记录): 用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。
##CNAME(Canonical NAME): FQDN-->FQDN
www2.toxingwang.com. IN CNAME www.toxingwang.com.
邮件交换记录(MX记录):用于电子邮件程序发送邮件时根据收信人的地址后缀来定位邮件服务器。
##MX(Mail eXchanger): ZONE NAME --> FQDN
ZONE NAME TTL IN MX pri VALUE
##优先级:0-99,数字越小级别越高,如:
toxingwang.com. 600 IN MX 10 mail.toxingwang.com.
mail.toxingwang.com. 600 IN A 192.168.8.3
IPv6主机记录(AAAA记录): 与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址。
服务位置记录(SRV记录): 用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。
反向解析记录(PTR记录):用于将一个IP地址映射到对应的域名,也可以看成是A记录的反向,IP地址的反向解析。
NAPTR记录: 它提供了正则表达式方式去映射一个域名。NAPTR记录非常著名的一个应用是用于ENUM查询。
递归查询图解:
用户使用toxingwang.com的DNS服务器ns.toxingwang.com解析www.kernel.org主机的递归查询过程如下:
迭代查询图解:
同样用户使用toxingwang.com的DNS服务器ns.toxingwang.com查询www.kernel.org主机的迭代查询过程如下:
本地dns服务器需要发起多次查询请求,迭代方式查询到www.kernel.org主机,而对于用户来说,本地dns服务器却是递归查询,用户只需发起一次查询请求,服务器将查询到的结果反馈给用户。
DNS客户端设置使用的DNS服务器(如上图的ns.toxingwang.com)一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器(如上图的根域、org域等)之间一般采用迭代查询方式。以查询 www.kernel.org 为例:
客户端发送查询报文"query www.kernel.org"至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。
如果记录老化或不存在,则
DNS默认使用tcp53和udp53端口,TCP53端口一般用于区域传送,而其他时候使用UDP53。
目前互联网上最为广泛的DNS服务器为bind,而企业内部,由于很多企业使用windows AD域,因此Windows DNS在企业内部应用较多。其他还包括:
DJBDNS (Dan J Bernstein's DNS implementation)
MaraDNS
NSD (Name Server Daemon)
PowerDNS
mydns
DNS服务工具 Dnsmasq
Windows下的DNS服务器 NtBind
轻量级DNS服务器 djbdns
智能DNS系统 wddns[国产的但社区较为活跃]
基于twisted实现的智能dns系统 smartdns [小米等知名科技公司在用]
DNS 管理系统 NamedManager
集群域名解析管理 mysqlBind
DNS 防攻击工具 dnswall
动态域名服务软件 PyDDnsPod
DNS 服务器 RubyDNS
更多开源DNS服务器 -开源中国社区: http://www.oschina.net/project/tag/108/dnsserver
对于一个互联网企业来说,搭建一个公司内部的DNS服务器是很必要的,一来可以通过公司内网的DNS缓存提高公司内部的DNS解析效率,二来域名服务商提供的解析服务并不可靠,为了安全起见,自己搭建(当然也有不错的第三方DNS解析服务,如DNSpod,但需要收费),三来公司内部有一些服务在内网需要解析成内网IP,对于公网的用户访问就需要访问公网的IP,这样可以通过DNS配置轻松实现,当然还有其他很多实现方式。
为了提高DNS可用性部署采用一主多辅的方式部署,使用辅服务器提供解析读服务,主服务处理写服务。另外,为了实现内外网解析的不同,使用bind的ACL+VIEW实现智能解析。
一、搭建环境
为了测试方便我们搭建一主一辅,对个辅服务器配置都雷同。
Mater:192.168.36.54外网:121.42.81.52
Slave:192.168.36.189外网:121.42.81.53
公司内外网解析不同域名:
域名(slimsmart.cn):
主机内网地址外网地址
mail.slimsmart.cn192.168.0.25 121.42.81.20
ftp.slimsmart.cn192.168.0.21121.42.81.21
二、安装bind
请参考:http://blog.csdn.net/zhu_tianwei/article/details/45045431
三、配置
1.生成内外网TSIG
vi /etc/keys.conf
关于生成方法参考:dnssec-keygen命令
2.主服务器
vi /etc/named.conf
主服务器不提供查询服务,所以关闭递归服务:recursion no;
由于需要动态添加zone和解析记录RR,所以acl lan排除了自己的网络地址,也可以根据自己的实际情况,使用!排除单个IP地址,如:
对于zone允许更新:allow-update {any; };,由于排除自己的IP地址,会根据TSIG查找view。
vi /var/named/zone/neiwang/slimsmart.cn.zone
vi /var/named/zone/waiwang/slimsmart.cn.zone
3.辅服务器
复制/etc/keys.conf到辅服务器。
vi /etc/named.conf
创建zone目录:mkdir /var/named/zone/{neiwang,waiwang}
四、启动服务
/home/slim/bind/sbin/named -u slim -t /home/slim/chroot/ -c /etc/named.conf -g
使用-g参数查看日志。
五、测试
使用dig命令指定TSIG查询对应的view数据。
内网:
外网:
使用nsupdate添加内外网解析记录,
内网:
www.slimsmart.cn A 1.1.1.1
外网:
www.slimsmart.cn A 2.2.2.2
再使用dig查询一下,解析正常。
【 BIND9+mysql的其他安装方式】
bind官方网站提供了最新版的bind安装源码,可以下载编译安装:http://www.isc.org/downloads/
如果使用RHEL、CentOS,可以使用yum在线安装,如果是ubuntu等,则可以使用apt在线安装。
我这里以Centos使用yum安装为例,测试环境如下:
主机名:ns.toxingwang.com
主机IP:192.168.8.101
[root@ns ~]# rpm -q bind ##查看当前是否安装bind,如果安装的是比较旧的版本,则可以先删除
目前centos 6的安装源提供了bind9.8的安装包
[root@ns ~]# yum list |grep "^bind" ##查找bind安装包
bind.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-chroot.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-dyndb-ldap.x86_64 2.3-2.el6_4.1 @updates
bind-libs.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-sdb.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-utils.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-devel.i686 32:9.8.2-0.17.rc1.el6_4.5 updates
bind-devel.x86_64 32:9.8.2-0.17.rc1.el6_4.5 updates
bind-libs.i686 32:9.8.2-0.17.rc1.el6_4.5 updates
这里只须安装最基本的bind、bind-libs、bind-utils三个组件即可
[root@ns ~]# yum -y install bind bind-libs bind-utils
主配置文件:/etc/named.conf
rndc配置文件:/etc/rndc.conf
数据目录:/var/named/
[root@ns ~]# ls /var/named/
dynamic named.empty named.loopback data named.ca named.localhost slaves
named.conf的基本配置中,文件主要分两部分,全局配置和zone配置:
默认情况下,named.conf已经有基本配置,我们删除后重新配置后如下:
options { ##全局配置,所有配置都要以分红结尾
listen-on port 53 { 192.168.8.101; }; ##监听端口及地址,注意,大括号与中间内容间需要有空格
allow-query { 192.168.8.0/24; }; ##允许用户发起递归查询的地址范围
directory "/var/named"; ##数据文件默认目录};
zone "." IN { ##定义跟区域
type hint; ##区域类型
file "named.ca"; ##区域对应数据文件
};zone "toxingwang.com" IN { ##定义本次试验解析域
type master; ##区域类型为master
file "named.toxingwang"; ##区域数据文件
};zone "localhost" IN {
type master;
file "named.localhost";
};
默认数据文件:
安装好bind98后,默认已经有根域和localhost域的数据文件,本次我们不修改其配置。
配置域toxingwang.com数据文件:
##复制localhost域数据文件作为模板修改
[root@ns named]# cp -p named.localhost named.toxingwang.com ##复制时保留原来的权限
##修改数据文件
[root@ns named]# vi named.toxingwang.com
$TTL 1H ##定义全局TTL宏
@ IN SOA ns.toxingwang.com. admin.toxingwang.com. ( ##从这里到下面反括号都是定义SOA记录
2013081701 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.toxingwang.com.
IN MX 10 mail.toxingwang.com.
ns IN A 192.168.8.101
www IN A 192.168.8.100
mail IN A 192.168.8.3
www2 IN CNAME www.toxingwang.com.
配置检查:
[root@ns named]# named-checkconf ##检查named.conf配置文件是否存在语法错误
[root@ns named]# named-checkzone "toxingwang.com" /var/named/named.toxingwang.com ##检查数据文件
zone toxingwang.com/IN: loaded serial 2013081701
OK
检查无误后即可启动named服务器了:
[root@ns named]# chkconfig named on ##加入开机启动
[root@ns named]# service named start
启动 named: [确定]
测试用具:nslookup、dig
使用nslookup测试时,需先指定server 为named服务器地址
参考文章:
1.使用bind构建高可用智能dns服务器
2.BIND9 管理员参考手册中文版.pdf - http://www.oschina.net/question/12_10889